Stage6も本当は埋め込み可能です
<object classid='clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616' width='639' height='379' codebase='http://go.divx.com/plugin/DivXBrowserPlugin.cab'> <br/><param name='src' value='http://video.stage6.com/63372/1607.divx' /><br/> <embed type='video/divx' src='http://video.stage6.com/63372/1607.divx' width='639' height='379' pluginspage='http://go.divx.com/plugin/download/'></embed>
言語 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回だけ引けばよかった。
HaskellでBrainfuckのインタプリタ書こうかと思ったけど時間がかかりそうなので後回し
追記。
実際に書いた人が。
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ブーム
ビット数を数える4 再帰版2(シンプルバージョン)
bitCount4 :: Int -> Int bitCount4 0 = 0 bitCount4 b = (b .&. 1) + bitCount4(shiftR b 1)
いかにも再帰的な感じ。
ビット数を数える3 高階関数版(testBitを使用)
bitCount3 :: Int -> Int bitCount3 b = length $ filter (testBit b) [0..bitSize(b)-1]
いかにもビットを数えている感じ。分かりやすい。
ビット数を数える2 再帰版
ここのバージョン3を参考に
http://www.nminoru.jp/~nminoru/programming/bitcount.html
import Bits bitCount2 :: Int -> Int bitCount2 0 = 0 bitCount2 b = 1 + bitCount2 ( b .&. (b-1))
こっちの方が綺麗で好きだなぁ。
なんとなく短くしてみたり
import Bits e:: Int -> Int e 0=0;e b=1+e(b.&.(b-1))
24 byte (関数宣言のみ。型宣言やimport行は除く)