2006-01-16
Brainfuck on Ruby
- Reference URI
- http://lowreal.net/logs/2006/01/16/4
- Written Time
- 2006-01-16T22:09:39+09:00
- Tags
-
- prog
- ruby
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 で頭にいれ、テストもそのページで紹介されているプログラムを使った。
Inserted at 2006-01-18T12:05:01+09:00
Trackback URI: http://lowreal.net/logs/2006/01/16/4.trackback
NULL
Generated with Taglibro
この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。
Comments (0)