Open1

競プロトレーニング

kosyokosyo

#と.を市松模様に出力する問題

最初はこのように書いていた。

h.times do |i|
  output_line = []
  is_odd_h = i % 2 == 1
  w.times do |j|
    is_odd_w = j % 2 == 1
    if is_odd_h
      output_line << (is_odd_w ? '#' : '.')
    else
      output_line << (is_odd_w ? '.' : '#')
    end
  end
end

ただ、これらが気になったのでAIに聞いた

  • 二重の繰り返し処理を行っていること
  • is_odd_hの中のコードや奇数判定の処理が重複していること
    以下のように改善。
h.times do |i|
  output_line = []
  w.times do |j|
    output_line << ((i + j).even? ? '#' : '.')
  end
  puts output_line.join
end

iとjをそれぞれで奇数判定するのではなく、
加算した結果を判定することにより、シンプルな記述にできた。

しかし繰り返し処理が二重となっていることは解消できておらず、
奇数を判定していることは分かりにくくなっていると思う。
模範解答も二重になっていたので仕方ないのか、、。