AA 折れ線グラフクイズ 6


id:sumim:20060406:p5 からの続き。hirofummy さんの Haskell 版を SqueakSmalltalk で書き直した最後の版を、こんどは 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