#include #include #include #define MIN(a,b) (((a)<(b))?(a):(b)) #define triangle (128+((agc*p*(abs(x%32)-16))/16)) #define fragments 64 #define poolsize (4*8*fragments) const unsigned char barker[4] = {26,207,252,29}; int got=0; int getchar_dummy(){ if(4>got){ return barker[got++]; } return getchar(); } int main(int argc,char *argv[]){ int r,d,d2; unsigned char o; int x=0; int f = 0; int p = 1; int agc = 16; if(argc==2){ unsigned char pool[poolsize]={0}; for(;;){ memmove(pool,pool+1,poolsize-1); if((r=getchar())<0){ return 102; } pool[poolsize-1]=r; p=1;d=0;x=0;d2=0; int poolindex=0; int min=255;int max=0; for(int i = 0;poolsize>i;i++){ if(min>pool[i]){ min=pool[i]; } if(maxk;k++){ for(int i = 0;8>i;i++){ if((barker[k]>>i)&1){ p*=-1; } for(int j = 0;fragments>j;j++){ d+=abs(triangle - pool[poolindex]); d2+=abs((256-triangle) - pool[poolindex]); poolindex++; x++; } } } if((440>(d/agc))||(440>(d2/agc))){ break; } } for(;;){ o=0; for(int i = 0;8>i;i++){ d=0; for(int j = 0;fragments>j;j++){ if((r=getchar())<0){ return 101; } d += abs(r-triangle); x++; } d/=agc; if((f==1)!=(d>22)){ o|=1<22); } putchar(o); } }else{ while((r=getchar_dummy())>-1){ for(int i = 0;8>i;i++){ if((r>>i)&1){ p*=-1; } for(int j = 0;fragments>j;j++){ putchar(triangle); x++; } } } } return 0; }