16{
17 char str[
N], strP[
N], strR[
N], c, p, v;
18 int i, j, k, l, nc, cc, cb, np, p2, p2f, cc2, cb2;
19 srand(time(NULL));
20 i = 0;
21 do{
22 c = getchar();
23 str[i] = c;
24 i++;
25 }
while(c!=10&&i<(
N-1));
26 nc = i-1;
27 str[nc] = '\0';
28 np = (int)(log2(nc+log2(nc)+1)+1);
29 printf("NP = %d\n", np);
30 printf("%s (%d, %d)\n", str, nc, np);
31 for(i=0, j=0, p2=1; i<(nc+np); i++)
32 {
33 if((i+1)==p2)
34 {
35 strP[i] = 0;
36 p2<<=1;
37 }
38 else
39 {
40 c = str[j++];
41 strP[i] = c;
42 for(k=0, p2f=1; k<np; k++)
43 {
44 if(p2f&(i+1))
45 strP[p2f-1]^=c;
46 p2f<<=1;
47 }
48 }
49 }
50 strP[nc+np] = '\0';
51 cc = rand()%(nc+np);
52 cb = rand()%8;
54 printf("%s\n", strP);
55 for(i=0, j=0, l=0, p2=1; i<(nc+np); i++)
56 {
57 if((i+1)==p2)
58 {
59 strR[nc+1+l] = strP[i];
60 l++;
61 p2 <<= 1;
62 }
63 else
64 {
65 c = strP[i];
66 strR[j++] = c;
67 for(k=0, p2f=1; k<np; k++)
68 {
69 if(p2f&(i+1))
70 strR[nc+1+k]^=c;
71 p2f<<=1;
72 }
73 }
74 }
75 strR[nc] = '\0';
76 strR[nc+np+1] = '\0';
77 printf("%s (%d, %d)\n", strR, cc, cb);
78 for(i=0, cc2=0; i<np; i++)
79 {
80 printf("%d\t", strR[nc+1+i]);
82 if(strR[nc+1+i])
83 cb2 = log2(strR[nc+1+i]);
84 }
85 printf("(%d, %d)\n", cc2-1, cb2);
87 printf("%s\n", strP);
88 return 0;
89}
#define BIT_WRITE(x, n, v)