Merhaba,
Şurada çözmeye çalıştığım sorunun nedenini bulamadım ve ben de çıktı ekranının farklı olmasının başka bir sebebi olacağını düşünerek ve ilk Beyin Farkı (BF) 1.04 sürümünü duyuruyorum! Çünkü içe içe döngüler çalışıyor...
Aşağıdaki tek örnekli kod, orijinal BF'ye göre 4 ekstra komuta (#&^v) daha sahiptir:
enum countToFifty = "+++>++^[-<^>]<&>+++++"~
"[->++^^+[-<<+<.>.>>\n"~
"]<<---------<+.>.>\n]";
void main()
{
size_t ptr, i;
ushort[5] mem;
auto s = countToFifty.dup;
auto l = s.length;
while(i < l)
{
size_t b = 1;
switch(s[i])
{
case '#' : ptr.writeln(": ", mem);
break;
case '&' : mem[++ptr] += mem[ptr - 1];
break;
case '^' : mem[ptr] <<= 1;
break;
case 'v' : mem[ptr] >>= 1;
break;
case '\n': writeln(); break;
case '+' : ++mem[ptr]; break;
case '-' : --mem[ptr]; break;
case '>' : ++ptr; break;
case '<' : --ptr; break;
case '[' : stack.push(i); break;
case ']' :
if(mem[ptr]) i = stack.front();
else stack.popFront();
break;
case '.' :
const chr = cast(char) mem[ptr];
chr.writef!"%s";
break;
case ',' :
auto chr = cast(ubyte) stdin.readln[0];
mem[ptr] = chr;
break;
default:
}
++i;
}
mem.writeln; /* program bitimindeki bellek ve
2 satırlık eşdeğeri: */
foreach(n; 1..51)
n.writefln!"%02d";
}
import std.stdio;
StackLIFO!size_t stack;
struct StackLIFO(T)
{
private T[] data;
size_t length() {
return data.length;
}
bool empty() {
return data.length == 0;
}
T back() {
return data.length ? data[0] : T.init;
}
void push(T data) {
this.data ~= data;
}
T front() {
return data[$ - 1];
}
void popFront() {
data.length--;
}
}
Başarılar...