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