89 lines
1000 B
C
89 lines
1000 B
C
|
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
int prog[] = {2,4,1,1,7,5,4,4,1,4,0,3,5,5,3,0};
|
||
|
int plen = sizeof(prog) / sizeof(int);
|
||
|
|
||
|
long reverse(int i, long init) {
|
||
|
long a = init;
|
||
|
// jnz,0
|
||
|
if (i >= plen) {
|
||
|
return init;
|
||
|
}
|
||
|
|
||
|
// in,5
|
||
|
int b = prog[plen-i-1];
|
||
|
|
||
|
// adv,3,
|
||
|
a <<= 3l;
|
||
|
|
||
|
// bxl,4
|
||
|
b ^= 4;
|
||
|
|
||
|
// cdv,5
|
||
|
// bxc,4
|
||
|
long q;
|
||
|
for (q = 0; q < 8; q++) {
|
||
|
if (((q^1) ^ ((((a|q)>>(q^1)))&7)) == b) {
|
||
|
// bst 4
|
||
|
// bxl,1
|
||
|
long x = reverse(i+1, a|q);
|
||
|
if (x >= 0) {
|
||
|
return x;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//error
|
||
|
if (a == 0) {
|
||
|
return -1;
|
||
|
}
|
||
|
return -a;
|
||
|
}
|
||
|
|
||
|
|
||
|
int run(long a) {
|
||
|
int b = 0;
|
||
|
int c = 0;
|
||
|
int i = 0;
|
||
|
|
||
|
// 4:a 5:b 6:c
|
||
|
do {
|
||
|
|
||
|
// bst 4
|
||
|
b = a%8;
|
||
|
//
|
||
|
// bxl,1
|
||
|
b ^= 1;
|
||
|
// cdv,5
|
||
|
c = (a&65535) >> b;
|
||
|
// bxc,4
|
||
|
b ^= c;
|
||
|
// bxl,4
|
||
|
b ^= 4;
|
||
|
// adv,3,
|
||
|
a >>= 3;
|
||
|
// out,5
|
||
|
printf("%d", b%8);
|
||
|
if (i >= plen || (b%8) != prog[i]) {
|
||
|
printf("!");
|
||
|
}
|
||
|
printf(" ");
|
||
|
i++;
|
||
|
|
||
|
// jnz,0
|
||
|
} while (a != 0);
|
||
|
|
||
|
printf("\n");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
int main() {
|
||
|
long a = reverse(0, 0);
|
||
|
printf("%ld\n", a);
|
||
|
run(a);
|
||
|
return 0;
|
||
|
}
|