#include #include #include #if 0 def extract_bf_instructions(text) print "\n" * 36 # Align line numbers. open_bracket = /^\s+\{/ close_bracket = /^\s+\}/ add = /^\s+t\[p\]\s*([-+])=\s*(\d+);/ shift = /^\s+p\s*([-+])=\s*(\d+);/ output = /^\s+putchar\(t\[p\]\);/ text.each_line{|line| if open_bracket.match?(line) print "[\n" elsif close_bracket.match?(line) print "]\n" elsif m = add.match(line) if m[1] == "+" print "+" * m[2].to_i, "\n" else print "-" * m[2].to_i, "\n" end elsif m = shift.match(line) if m[1] == "+" print ">" * m[2].to_i, "\n" else print "<" * m[2].to_i, "\n" end elsif output.match?(line) print ".\n" else print "\n" end } end extract_bf_instructions(%{ #endif int main(int argc, char **argv) { int t[10], p = 0; memset(t, 0, sizeof(t)); /* T R I C K \n 84 82 73 67 75 10 */ t[p] -= 7; while( t[p] ) { assert(p == 0); t[p] += 1; p += 1; t[p] += 1; p += 1; t[p] += 3; while( t[p] ) { assert(p == 2); t[p] -= 1; p += 1; t[p] += 4; while( t[p] ) { assert(p == 3); t[p] -= 1; p += 1; t[p] += 1; p += 1; t[p] += 1; p += 1; t[p] += 1; p -= 3; assert(p == 3); } p -= 1; assert(p == 2); } p -= 2; assert(p == 0); } assert(p == 0); assert(t[0] == 0); assert(t[1] == 7); assert(t[2] == 0); assert(t[3] == 0); assert(t[4] == 84); assert(t[5] == 84); assert(t[6] == 84); p += 1; t[p] += 2; while( t[p] ) { assert(p == 1); t[p] -= 1; p += 1; t[p] += 1; p += 3; t[p] -= 1; p += 1; t[p] -= 2; p -= 5; assert(p == 1); } assert(p == 1); assert(t[0] == 0); assert(t[1] == 0); assert(t[2] == 9); assert(t[3] == 0); assert(t[4] == 84); assert(t[5] == 75); assert(t[6] == 66); p += 3; assert(p == 4); assert(t[p] == 'T'); putchar(t[p]); t[p] -= 2; assert(t[p] == 'R'); putchar(t[p]); p += 1; assert(p == 5); t[p] -= 2; assert(t[p] == 'I'); putchar(t[p]); p += 1; assert(p == 6); t[p] += 1; assert(t[p] == 'C'); putchar(t[p]); p -= 1; assert(p == 5); t[p] += 2; assert(t[p] == 'K'); putchar(t[p]); p -= 3; assert(p == 2); t[p] += 1; assert(t[p] == '\n'); putchar(t[p]); return 0; } /* })# */