Execute Brain****/D: Difference between revisions

Content added Content deleted
(Version 2 D updated)
(Version 3 D updated)
Line 176: Line 176:
}</lang>
}</lang>


== Implementation 3 ==
===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;


pure string ctbf(in string code) {
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;"; break;
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>