言語 Brainf*ck

http://ja.wikipedia.org/wiki/Brainfuck

8命令しかないけどチューリング完全な言語Brainf*ck

++++++++[>++++++<-]>[>+>+>+<<<-],>[<->-],>[<->-]<[-<+>]<[->>>+<<<]>>>.

2文字の数字入力を受け取りそれぞれの数を足した物を出力するプログラム(1桁のみ)
つまり入力"12"に対して出力は"3"になる。

a[0] = a[0] + 8 //++++++++ 
for(;a[0];a[0]--){    //[(〜)-]
  a[1]=a[1]+6         // >++++++
}                     // < 
                      // この時点で a[1]==48 つまりord '0' 
for(;a[1];a[1]--){    // >[(〜)-]
  a[2]++;             // >+
  a[3]++;             // >+
  a[4]++;             // >+
}                     // <<<
                      // この時点でaの中身は[0,0,48,48,48] つまり三つにコピーした
a[1] = getch();       // ,
                      //         [0,c1,48,48,48]
for(;a[2];a[2]--){    // >[(〜)-]
  a[1]--              // <-
}                     // >
                      //         [0,c1-48,0,48,48] a[1]==c1-48=c1-'0'=数字

a[2] = getch();        // ,
                      //         [0,c1-48,c2,48,48]
for(;a[3];a[3]--){    // >[(〜)-]
  a[2]--              // <-
}                     // >
                      //         [0,c1-48,c2-48,0,48] 
for(;a[2];a[2]--){    // <[-(〜)]
  a[1]++              // <+                
}                     // > 
                      //         [0,(c1-48)+(c2-48),0,0,48]
for(;[a1];a[1]--0{    // <[-(〜)]
  a[4]++              //  >>>+
}                     //  <<<
                      //         [0,0,0,0,48+(c1-48)+(c2-48)]
putchr(a[4]);         //  >>>.

後から48足してるんだから48を2回引かずに1回だけ引けばよかった。
HaskellBrainfuckインタプリタ書こうかと思ったけど時間がかかりそうなので後回し


追記。

実際に書いた人が。
 http://haskell.g.hatena.ne.jp/mr_konn/20060620

参考になります。

追加。
 http://d.hatena.ne.jp/tanakh/20040725

さらに追加
 http://www.jmuk.org/d/?path=2006/06/21#d21t01

(さらに)**2 追加 JavaScript版とPerl
http://blog.livedoor.jp/dankogai/archives/50545151.html

謎のBFブーム