Execute Brain****: Difference between revisions

Content added Content deleted
Line 202: Line 202:


string ctbf(string code) {
string ctbf(string code) {
string r = "enum char empty = '\\0';
string r;
char[30_000] m = empty;
size_t i = 0;\n";


foreach (c; code)
foreach (c; code)
switch (c) {
switch (c) {
case '>': r ~= "i++; assert(i < m.length);\n"; break;
case '>': r ~= "i++; assert(i < m.length);"; break;
case '<': r ~= "i--; assert(i >= 0);\n"; break;
case '<': r ~= "i--; assert(i >= 0);"; break;
case '+': r ~= "m[i]++;\n"; break;
case '+': r ~= "m[i]++;"; break;
case '-': r ~= "m[i]--;\n"; break;
case '-': r ~= "m[i]--;"; break;
case '[': r ~= "while (m[i]) {\n"; break;
case '[': r ~= "while (m[i]) {"; break;
case ']': r ~= "}\n"; break;
case ']': r ~= "}"; break;
case '.': r ~= "putchar(m[i]);\n"; break;
case '.': r ~= "putchar(m[i]);"; break;
case ',': r ~= "int d = getc(stdin);
case ',':
if (d == EOF) exit(1);
r ~= "int d = getc(stdin);
tape[cell] = cast(char)d;\n";
if (d == EOF) exit(1);
tape[cell] = cast(char)d;";
break;
break;
default: break;
default: break;
Line 226: Line 225:


void main() {
void main() {
enum char empty = '\0';
mixin(ctbf("++++++++++[>+++++++>++++++++++>+++>+<<<<-]
char[30_000] m = empty;
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."));
size_t i;
mixin(ctbf("++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."));
}</lang>
}</lang>