/* bf.c - Don Yang (uguu.org) 06/17/12 */ #include #include #include /* T S U K U Y O M I 84 83 85 75 85 89 79 77 73 10 [4] 84 83 85 85 89 [3] 75 79 77 73 [1] 10 */ int main(void) { int tape[256]; int p; memset(tape, 0, sizeof(tape)); p = 0; /* BF: ++++[ */ for(tape[p] = 4; tape[p]; tape[p] -= 1) { /* BF: > */ p += 1; /* BF: ++++[ */ for(tape[p] = 4; tape[p]; tape[p] -= 1) { /* BF: >+++++ */ tape[p + 1] += 5; /* BF: <-] */ } /* BF: < */ p -= 1; /* BF: -] */ } assert(p == 0); assert(tape[0] == 0); assert(tape[1] == 0); assert(tape[2] == 80); /* BF: >> */ p += 2; /* BF: [ */ for(; tape[p]; tape[p] -= 1) { /* BF: >+ */ tape[p + 1] += 1; /* BF: >+ */ tape[p + 2] += 1; /* BF: <<-] */ } assert(p == 2); assert(tape[2] == 0); assert(tape[3] == 80); assert(tape[4] == 80); /* BF: +++++[ */ for(tape[p] += 5; tape[p]; tape[p] -= 1) { /* BF: >- */ tape[p + 1] -= 1; /* BF: >+ */ tape[p + 2] += 1; /* BF: <<<++ */ tape[p - 1] += 2; /* BF: >-] */ } assert(p == 2); assert(tape[1] == 10); assert(tape[2] == 0); assert(tape[3] == 75); assert(tape[4] == 85); /* BF: >>-. */ p += 2; assert(p == 4); tape[p] -= 1; assert(tape[4] == 84); putchar(tape[p]); /* T */ /* BF: -. >>[(p,q)]<< */ tape[p] -= 1; assert(tape[4] == 83); putchar(tape[p]); /* S */ /* BF: ++. */ tape[p] += 2; assert(tape[4] == 85); putchar(tape[p]); /* U */ /* BF: <. */ p -= 1; assert(tape[3] == 75); putchar(tape[p]); /* K */ /* BF: >. */ p += 1; assert(tape[4] == 85); putchar(tape[p]); /* U */ /* BF: ++++. */ tape[p] += 4; assert(tape[4] == 89); putchar(tape[p]); /* Y */ /* BF: <++++. */ p -= 1; tape[p] += 4; assert(tape[3] == 79); putchar(tape[p]); /* O */ /* BF: -- >X< */ tape[p] -= 2; assert(tape[3] == 77); putchar(tape[p]); /* M */ /* BF: -- XXXXXXXX --. */ tape[p] -= 4; assert(tape[3] == 73); putchar(tape[p]); /* I */ /* BF: < */ p -= 2; assert(tape[1] == 10); putchar(tape[p]); /* \n */ return 0; }