id:sumim:20060406:p5 からの続き。hirofummy さんの Haskell 版を Squeak の Smalltalk で書き直した最後の版を、こんどは Ruby で直訳気味に。 これを Ruby らしく書き直すのに必要な Ruby 力は、恥ずかしながら私には備わっていません。w
#!/usr/local/bin/ruby
series = ARGV[0]
lines = Array.new
curr = 0
add = proc do |chr|
lines.each_with_index do |line,idx|
line.insert(0, idx == curr - 1 ? chr : " ")
end
end
series.reverse.split(//).each do |code|
if code == "R" then
lines << "" if (curr += 1) > lines.size
add.call("/")
else
if curr == 0 then
lines.insert(0, "")
curr = 1
end
case code
when "F"
add.call("\\")
curr -= 1
when "C"
add.call("_")
end
end
end
puts lines