#include <stdio.h>
unsigned long findSetBitPositions( unsigned long num) {
int index = 0 , i= 1 ;
while ( i< 32 ) {
if ( ( num >> i) & 1 ) {
index = i;
}
i++;
}
return index;
}
int main( ) {
unsigned long dta = 0 , errorTime = 0 , baseCode = 0x4043A880 , alterDta[ 20 ] ;
int tima = 1200 , timb = 400 , errPosStrt = 0 , errPosEnd = 0 , j = 0 , errDtaCnt= 0 ;
//int bitarra[] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
int bitarr[ ] = { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 } ;
int timearr[ ] = { 400 , 1200 , 300 , 100 , 200 , 100 , 200 , 100 , 200 , 400 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 1200 , 400 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 400 , 1200 , 1200 , 400 , 400 , 1200 , 1200 , 400 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 1200 , 400 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 , 400 , 1200 } ; // Calculate the size of the array
int bitsiz = sizeof ( bitarr) / sizeof ( bitarr[ 0 ] ) ;
int timsiz = sizeof ( timearr) / sizeof ( timearr[ 0 ] ) ;
int baseIndex = findSetBitPositions( baseCode) ;
printf ( "Number of elements in the array: %d : %d\n " , bitsiz
, timsiz
) ;
for ( int i = 0 ; i < bitsiz; i++ ) {
if ( ( timearr[ i] != tima) && ( timearr[ i] != timb) ) {
errPosStrt = i;
while ( 1 ) {
if ( ( timearr[ i] == tima) || ( timearr[ i] == timb) ) {
printf ( "\n OK i = %d \t b = %d \t t = %d " , i
, bitarr
[ i
] , timearr
[ i
] ) ; break ;
}
errorTime = errorTime+ timearr[ i] ;
errPosEnd = i;
printf ( "\n ErrPos= %d \t b = %d \t t = %d " , i
, bitarr
[ i
] , timearr
[ i
] ) ; i++;
}
}
else {
j= i;
if ( bitarr[ i] == 1 ) {
if ( ( timearr[ j] == tima) && ( timearr[ j + 1 ] == timb) ) {
dta = ( dta << 1 ) | 1 ;
}
else if ( ( timearr[ j] == timb) && ( timearr[ j + 1 ] == tima) ) {
dta = ( dta << 1 ) | 0 ;
}
i++;
}
}
}
if ( errorTime> 0 ) {
alterDta[ errDtaCnt] = ( 1 << 32 - errPosStrt) | dta;
errDtaCnt++;
alterDta[ errDtaCnt] = ( 0 << 32 - errPosStrt) | dta;
errDtaCnt++;
}
printf ( "\n dta = %X\n errPos = %d : %d\n " , dta
, errPosStrt
, errPosEnd
) ; printf ( "ErrT = %ld\n " , errorTime
) ; printf ( "ErrP = %d\n " , 32 - errPosStrt
) ; for ( int i = 0 ; i < errDtaCnt; i++ ) {
printf ( "alterDta[%d] = %X\n " , i
, alterDta
[ i
] ) ; }
printf ( "Positions of set bits: %d \n " , baseIndex
) ; errorTime = 0 ;
dta = 0 ;
/* for (int i = 0; i < bitsiz; i++) {
printf("i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
j=j+2;
}
for (int i = 0; i < bitsiz; i++) {
if ((bitarr[i] == 0)&&(timearr[j] == timb) && (timearr[j + 1] == tima)) {
printf("Correct: i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
j=j+2;
}
else if ((bitarr[i] == 1)&&(timearr[j] == tima) && (timearr[j + 1] == timb)) {
printf("Correct: i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
j=j+2;
}
else {
printf("Wrong: i = %d : %d : (J = %d ; %d, J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
}
}*/
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCBsb25nIGZpbmRTZXRCaXRQb3NpdGlvbnModW5zaWduZWQgbG9uZyBudW0pIHsKICAgIGludCBpbmRleCA9IDAsaT0xOwogICAgd2hpbGUoaTwzMil7CiAgICAgICAgaWYgKChudW0gPj4gaSkgJiAxKSB7CiAgICAgICAgICAgIGluZGV4ID0gaTsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgfQogICAgcmV0dXJuIGluZGV4Owp9CgppbnQgbWFpbigpIHsKICB1bnNpZ25lZCBsb25nIGR0YSA9IDAsZXJyb3JUaW1lID0wLGJhc2VDb2RlID0gMHg0MDQzQTg4MCxhbHRlckR0YVsyMF07CiAgaW50IHRpbWEgPSAxMjAwLCB0aW1iID0gNDAwLGVyclBvc1N0cnQgPSAwLGVyclBvc0VuZCA9IDAsaiA9IDAsZXJyRHRhQ250PTA7CiAgLy9pbnQgYml0YXJyYVtdID0gezAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwogIGludCBiaXRhcnJbXSA9IHsxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAxLCAwfTsKICBpbnQgdGltZWFycltdID0gezQwMCwgMTIwMCwgMzAwLCAxMDAsIDIwMCwgMTAwLCAyMDAsIDEwMCwgMjAwLCA0MDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgMTIwMCwgNDAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDAsIDEyMDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDQwMCwgMTIwMCwgMTIwMCwgNDAwLCA0MDAsIDEyMDAsIDEyMDAsIDQwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgMTIwMCwgNDAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDAsIDQwMCwgMTIwMCwgNDAwLCAxMjAwLCA0MDAsIDEyMDB9OyAvLyBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGFycmF5CiAgaW50IGJpdHNpeiA9IHNpemVvZihiaXRhcnIpIC8gc2l6ZW9mKGJpdGFyclswXSk7CiAgaW50IHRpbXNpeiA9IHNpemVvZih0aW1lYXJyKSAvIHNpemVvZih0aW1lYXJyWzBdKTsKICBpbnQgYmFzZUluZGV4ID0gZmluZFNldEJpdFBvc2l0aW9ucyhiYXNlQ29kZSk7CiAgcHJpbnRmKCJOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5OiAlZCA6ICVkXG4iLCBiaXRzaXosIHRpbXNpeik7CiAgCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaXRzaXo7IGkrKykgewogICAgaWYgKCh0aW1lYXJyW2ldICE9IHRpbWEpICYmICh0aW1lYXJyW2ldICE9IHRpbWIpKSB7CiAgICAgIGVyclBvc1N0cnQgPSBpOwogICAgICB3aGlsZSAoMSkgewogICAgICAgIGlmICgodGltZWFycltpXSA9PSB0aW1hKSB8fCAodGltZWFycltpXSA9PSB0aW1iKSkgewogICAgICAgICAgcHJpbnRmKCJcbk9LIGkgPSAlZCBcdCBiID0gJWQgXHQgdCA9ICVkICIsIGksIGJpdGFycltpXSwgdGltZWFycltpXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXJyb3JUaW1lID1lcnJvclRpbWUrdGltZWFycltpXTsKICAgICAgICBlcnJQb3NFbmQgPSBpOwogICAgICAgIHByaW50ZigiXG5FcnJQb3M9ICVkIFx0IGIgPSAlZCBcdCB0ID0gJWQgIiwgaSwgYml0YXJyW2ldLCB0aW1lYXJyW2ldKTsKICAgICAgICBpKys7CiAgICAgIH0KICAgICAgcHJpbnRmKCJcbiIpOwogICAgIAogICAgfQogICAgZWxzZSB7CiAgICAgIGo9aTsKICAgICAgaWYgKGJpdGFycltpXSA9PSAxKSB7CiAgICAgICAgIGlmKCh0aW1lYXJyW2pdID09IHRpbWEpICYmICh0aW1lYXJyW2ogKyAxXSA9PSB0aW1iKSkgewogICAgICAgICAgICAgZHRhID0gKGR0YSA8PCAxKSB8IDE7CiAgICAgICAgICAgICBwcmludGYoIjEiKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCh0aW1lYXJyW2pdID09IHRpbWIpICYmICh0aW1lYXJyW2ogKyAxXSA9PSB0aW1hKSkgewogICAgICAgICAgICAgZHRhID0gKGR0YSA8PCAxKSB8IDA7CiAgICAgICAgICAgICBwcmludGYoIjAiKTsKICAgICAgICAgfQogICAgICAgIGkrKzsKICAgICAgfQogICAgfQogIH0KICBpZihlcnJvclRpbWU+MCl7CiAgICBhbHRlckR0YVtlcnJEdGFDbnRdID0gKDEgPDwgMzItZXJyUG9zU3RydCkgfCBkdGE7CiAgICBlcnJEdGFDbnQrKzsKICAgIGFsdGVyRHRhW2VyckR0YUNudF0gPSAoMCA8PCAzMi1lcnJQb3NTdHJ0KSB8IGR0YTsKICAgIGVyckR0YUNudCsrOwogIH0KCgoKICBwcmludGYoIlxuZHRhID0gJVhcbmVyclBvcyA9ICVkIDogJWRcbiIsZHRhLGVyclBvc1N0cnQsZXJyUG9zRW5kKTsKICBwcmludGYoIkVyclQgPSAlbGRcbiIsZXJyb3JUaW1lKTsKICBwcmludGYoIkVyclAgPSAlZFxuIiwzMi1lcnJQb3NTdHJ0KTsKICBmb3IgKGludCBpID0gMDsgaSA8IGVyckR0YUNudDsgaSsrKSB7CiAgICBwcmludGYoImFsdGVyRHRhWyVkXSA9ICVYXG4iLGksYWx0ZXJEdGFbaV0pOwogIH0KcHJpbnRmKCJQb3NpdGlvbnMgb2Ygc2V0IGJpdHM6ICAlZCBcbiIsIGJhc2VJbmRleCk7CiAgZXJyb3JUaW1lID0wOwogIGR0YSA9MDsKCgogIC8qICBmb3IgKGludCBpID0gMDsgaSA8IGJpdHNpejsgaSsrKSB7CiAgICAgIHByaW50ZigiaSA9ICVkIDogJWQgOiAoSiA9ICVkIDsgJWQsSiA9ICVkIDsgJWQpXG4iLCBpLCBiaXRhcnJbaV0saisxLCB0aW1lYXJyW2pdLGorMiwgdGltZWFycltqICsgMV0pOwogICAgICAgIGo9aisyOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaXRzaXo7IGkrKykgewogICAgIGlmICgoYml0YXJyW2ldID09IDApJiYodGltZWFycltqXSA9PSB0aW1iKSAmJiAodGltZWFycltqICsgMV0gPT0gdGltYSkpIHsKICAgICAgICAgcHJpbnRmKCJDb3JyZWN0OiBpID0gJWQgOiAlZCA6IChKID0gJWQgOyAlZCxKID0gJWQgOyAlZClcbiIsIGksIGJpdGFycltpXSxqKzEsIHRpbWVhcnJbal0saisyLCB0aW1lYXJyW2ogKyAxXSk7CiAgICAgICAgIGo9aisyOwogICAgIH0KICAgICBlbHNlIGlmICgoYml0YXJyW2ldID09IDEpJiYodGltZWFycltqXSA9PSB0aW1hKSAmJiAodGltZWFycltqICsgMV0gPT0gdGltYikpIHsKICAgICAgICAgcHJpbnRmKCJDb3JyZWN0OiBpID0gJWQgOiAlZCA6IChKID0gJWQgOyAlZCxKID0gJWQgOyAlZClcbiIsIGksIGJpdGFycltpXSxqKzEsIHRpbWVhcnJbal0saisyLCB0aW1lYXJyW2ogKyAxXSk7CiAgICAgICAgaj1qKzI7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgcHJpbnRmKCJXcm9uZzogaSA9ICVkIDogJWQgOiAoSiA9ICVkIDsgJWQsIEogPSAlZCA7ICVkKVxuIiwgaSwgYml0YXJyW2ldLGorMSwgdGltZWFycltqXSxqKzIsIHRpbWVhcnJbaiArIDFdKTsKICAgICB9CiAgICB9Ki8KCgogIHJldHVybiAwOwp9