読者です 読者をやめる 読者になる 読者になる

Rubyで100マス計算

ruby

ruby勉強会の演習問題を解いてみた - rochefort's blog
これはrubyを書き始めた頃のソースですが
たまたま目にして、あまりにもアレだと思ったので、
カッとなって書き直してしまいました。
 

コード

class Game100Cell
  CELLS = (1..9).to_a.freeze

  def initialize
    setup
  end
  
  def ready
    render
  end
  
  def answer
    render(do_answer: true)
  end
  
  def reset
    setup
  end
  
  def set_easy_mode
    @x_axises = CELLS
    @y_axises = CELLS
  end
  
  private
  
  def setup
    @x_axises = CELLS.shuffle
    @y_axises = CELLS.shuffle
  end
  
  def render(do_answer: false)
    render_header
    render_body(do_answer)
  end
  
  def render_header
    puts "  |  #{@x_axises.join('  ')}"
    puts "--+---------------------------"
  end
  
  def render_body(do_answer)
    @y_axises.each do |y|
      line = "#{y} |"
      @x_axises.each { |x| line << ("%3d" % (x*y)) } if do_answer
      puts line
    end
  end
end

実行結果

game = Game100Cell.new
game.ready
  |  1  3  5  4  7  8  2  6  9
--+---------------------------
3 |
8 |
5 |
1 |
2 |
9 |
4 |
7 |
6 |
game.answer
  |  1  3  5  4  7  8  2  6  9
--+---------------------------
3 |  3  9 15 12 21 24  6 18 27
8 |  8 24 40 32 56 64 16 48 72
5 |  5 15 25 20 35 40 10 30 45
1 |  1  3  5  4  7  8  2  6  9
2 |  2  6 10  8 14 16  4 12 18
9 |  9 27 45 36 63 72 18 54 81
4 |  4 12 20 16 28 32  8 24 36
7 |  7 21 35 28 49 56 14 42 63
6 |  6 18 30 24 42 48 12 36 54