Execute Brain****: Difference between revisions
Content added Content deleted
Line 196: | Line 196: | ||
brainfuckRun("++++++++++[>+++++++>++++++++++>+++>+<<<<-] |
brainfuckRun("++++++++++[>+++++++>++++++++++>+++>+<<<<-] |
||
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."); |
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."); |
||
}</lang> |
|||
Faster partially compile-time version (code generated at compile-time, run at run time): |
|||
<lang d>import core.stdc.stdio: getc, putchar, stdin, EOF; |
|||
import core.stdc.stdlib: exit; |
|||
string ctbf(string code) { |
|||
string r = "enum char empty = '\\0'; |
|||
char[30_000] m = empty; |
|||
size_t i = 0;\n"; |
|||
foreach (c; code) |
|||
switch (c) { |
|||
case '>': r ~= "i++; assert(i < m.length);\n"; break; |
|||
case '<': r ~= "i--; assert(i >= 0);\n"; break; |
|||
case '+': r ~= "m[i]++;\n"; break; |
|||
case '-': r ~= "m[i]--;\n"; break; |
|||
case '[': r ~= "while (m[i]) {\n"; break; |
|||
case ']': r ~= "}\n"; break; |
|||
case '.': r ~= "putchar(m[i]);\n"; break; |
|||
case ',': r ~= "int d = getc(stdin); |
|||
if (d == EOF) exit(1); |
|||
tape[cell] = cast(char)d;\n"; |
|||
break; |
|||
default: break; |
|||
} |
|||
return r; |
|||
} |
|||
void main() { |
|||
mixin(ctbf("++++++++++[>+++++++>++++++++++>+++>+<<<<-] |
|||
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.")); |
|||
}</lang> |
}</lang> |
||