1. Си / Говнокод #9112

    +131

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    #include <stdio.h>
    #include <math.h>
    void out_bin (unsigned short c){
    	for (int i = 11; i>=0; i--) {
    		if ((c & (unsigned short)(1<<i))/(1<<i)==1) printf("1");
    		else printf("0");
    	}
    	printf("\n");
    }
    int main (){
    	int a[8]={2,4,5,6,8,9,10,11};
    	int b[4]={0,1,3,7};
    	int d=0;
    	unsigned short int c=0,c1[4]={0,0,0,0};
    	unsigned char data=165,tdata=176;
    	for(int i=7;i>=0;i--)
    	{ 
    		if (tdata & 128){
    			c+=(unsigned short )(1<<a[i]);
    		}
    		tdata<<=1;
    	}
    	for (int i=0;i<8;i++){
    		unsigned short b = (unsigned short)((c & (unsigned short)(1<<a[i]))/(1<<a[i])) ;
    		if(a[i] & 1) c1[0]^=b;
    		else
    			if(a[i] & 2) c1[1]^=b ;
    			else
    				if(a[i] & 4) c1[2]^=b ;
    				else
    					if(a[i] & 8) c1[3]^=b ;
    	}
    	for (int i = 0; i < 4; i++) {
    		if (!c1[i]) {
    			c|=(unsigned short)(1<<((1<<i)-1));
    		}
    	}
    	printf("Data=      ");
    	out_bin(c);
    	c ^= 256 ;
    	if ((((c & 1024)/1024) ^ ((c & 256)/256) ^ ((c & 64)/64) ^ ((c & 16)/16) ^ ((c & 4)/4) ^ ((c & 1)/1) ) !=1 ){
    		d += 1;
    	}
    	if ((((c & 1024)/1024) ^ ((c & 512)/512) ^ ((c & 64)/64) ^ ((c & 32)/32) ^ ((c & 4)/4) ^ ((c & 2)/2) )  !=1 ){
    		d +=2;
    	}  
    	if ((((c & 2048)/2048) ^ ((c & 64)/64) ^ ((c & 32)/32) ^ ((c & 16)/16) ^ ((c & 8)/8) ) !=1 ){
    		d +=4;
    	}
    	if ((((c & 2048)/2048) ^ ((c & 1024)/1024) ^ ((c & 512)/512) ^ ((c & 256)/256) ^ ((c & 128)/128) )!=1 ){
    		d+=8;
    	}
    	printf("Spoiled=   ");
    	out_bin(c);
    	printf("%d",d);
    	if (d){
    			c ^=(1<<(d-1));
    	}
    	printf("Corrected= ");
    	out_bin(c);
    	return 0;
    }

    Код Хэмминга

    Запостил: Abbath, 13 Января 2012

    Комментарии (9) RSS

    Добавить комментарий