Brainfuck インタプリタ。
arr = [] ptr = 0 soc = ARGF.read pos = 0 while soc.size > pos print soc[pos].chr if $DEBUG p arr if $DEBUG arr[ptr] ||= 0 case soc[pos] when ?> ptr += 1 when ?< ptr -= 1 when ?+ arr[ptr] += 1 when ?- arr[ptr] -= 1 when ?. print arr[ptr].chr when ?, arr[ptr] = $stdin.getc when ?[ if arr[ptr].zero? n = 1 while n.nonzero? pos += 1 case soc[pos] when ?[ n += 1 when ?] n -= 1 end end end when ?] n = -1 while n.nonzero? pos -= 1 case soc[pos] when ?[ n += 1 when ?] n -= 1 end end pos -= 1 end pos += 1 end puts
mailto:>++++++++++[<++++++++++>-]<-. +++++. +++++++. >++++++[<---------->-]<+. +. >++[<+++++>-]<+. >++++[<++++++++++>-]<++++. +++. ++++++++. -----. -------------. ----. +++++++++++. >++++++[<---------->-]<--. >++++++[<++++++++++>-]<++++. ---------. +++++++++++++++.
途中式 もっと短くしろよとかね。知らないよ。1パターンしか使ってないしね。いやでも別にね。ね。
bfi.rb Brainfuck の Ruby 実装 ってのを見つけた。変数名以外殆ど同じ(w. 最後に puts
つけてるのまで同じだ。おもろいなぁ。ちなみに最後の puts は zsh 対策です。
The Ruby BrainFuck Interpreter クラス使ってる
アルゴリズム自体は Brainf*ck で頭にいれ、テストもそのページで紹介されているプログラムを使った。