/* misaka_bf2.c - Don Yang (uguu.org) 2013-09-28 */ #include #include #include int main(int argc, char **argv) { int d[16]; int p = 0; memset(d, 0, sizeof(d)); /* M I S A K A 32 77 73 83 65 75 65 10 */ d[p] += 4; /* BF:++++ */ assert(p == 0); while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p++; /* BF:> */ d[p] += 2; /* BF:++ */ assert(p == 1); while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p++; /* BF:> */ d[p]++; /* BF:+ */ p++; /* BF:> */ d[p] += 4; /* BF:++++ */ p -= 2; /* BF:<< */ assert(p == 1); } /* BF:] */ p--; /* BF:< */ assert(p == 0); } /* BF:] */ assert(d[0] == 0); assert(d[1] == 0); assert(d[2] == 8); assert(d[3] == 32); p += 3; /* BF:>>> */ assert(p == 3); while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p++; /* BF:> */ d[p]++; /* BF:+ */ p++; /* BF:> */ d[p] += 2; /* BF:++ */ p -= 2; /* BF:<< */ assert(p == 3); } /* BF:] */ assert(d[0] == 0); assert(d[1] == 0); assert(d[2] == 8); assert(d[3] == 0); assert(d[4] == 32); assert(d[5] == 64); assert(d[6] == 0); p--; /* BF:< */ assert(p == 2); while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p -= 2; /* BF:<< */ d[p]++; /* BF:+ */ p += 3; /* BF:>>> */ d[p] += 2; /* BF:++ */ p--; /* BF:< */ assert(p == 2); } /* BF:] */ assert(d[0] == 8); assert(d[1] == 0); assert(d[2] == 0); assert(d[3] == 16); assert(d[4] == 32); assert(d[5] == 64); p += 3; /* BF:>>> */ assert(p == 5); while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p -= 2; /* BF:<< */ d[p]++; /* BF:+ */ p--; /* BF:< */ d[p]++; /* BF:+ */ p--; /* BF:< */ d[p]++; /* BF:+ */ p += 4; /* BF:>>>> */ assert(p == 5); } /* BF:] */ assert(d[0] == 8); assert(d[1] == 64); assert(d[2] == 64); assert(d[3] == 80); assert(d[4] == 32); assert(d[5] == 0); p -= 5; /* BF:<<<<< */ assert(p == 0); d[p] += 2; /* BF:++ */ while( d[p] ) /* BF:[ */ { d[p]--; /* BF:- */ p += 2; /* BF:>> */ d[p]++; /* BF:+ */ p += 3; /* BF:>>> */ d[p]++; /* BF:+ */ p -= 5; /* BF:<<<<< */ assert(p == 0); } /* BF:] */ assert(d[0] == 0); assert(d[1] == 64); assert(d[2] == 74); assert(d[3] == 80); assert(d[4] == 32); assert(d[5] == 10); assert(d[6] == 0); p++; /* BF:> */ d[p]++; /* BF:+ */ p++; /* BF:> */ d[p] += 3; /* BF:+++ */ p++; /* BF:> */ d[p] += 3; /* BF:+++ */ p++; /* BF:> */ assert(p == 4); assert(d[0] == 0); assert(d[1] == 65); assert(d[2] == 77); assert(d[3] == 83); assert(d[4] == 32); assert(d[5] == 10); assert(d[6] == 0); assert(d[p] == ' '); putchar(d[p]); /* BF:. */ p -= 2; /* BF:<< */ assert(d[p] == 'M'); putchar(d[p]); /* BF:. */ d[p] -= 4; /* BF:---- */ assert(d[p] == 'I'); putchar(d[p]); /* BF:. */ p++; /* BF:> */ assert(d[p] == 'S'); putchar(d[p]); /* BF:. */ p -= 2; /* BF:<< */ assert(d[p] == 'A'); putchar(d[p]); /* BF:. */ p++; /* BF:> */ d[p] += 2; /* BF:++ */ assert(d[p] == 'K'); putchar(d[p]); /* BF:. */ d[p] += 2; /* BF:++ */ p--; /* BF:< */ assert(d[p] == 'A'); putchar(d[p]); /* BF:. */ p += 3; /* BF:>>> */ assert(p == 4); assert(d[0] == 0); assert(d[1] == 65); assert(d[2] == 77); assert(d[3] == 83); assert(d[4] == 32); assert(d[5] == 10); assert(d[6] == 0); p++; /* BF:> */ assert(d[p] == '\n'); putchar(d[p]); /* BF:. */ p++; /* BF:> */ return 0; }