Open1
競プロトレーニング
#と.を市松模様に出力する問題
最初はこのように書いていた。
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をそれぞれで奇数判定するのではなく、
加算した結果を判定することにより、シンプルな記述にできた。
しかし繰り返し処理が二重となっていることは解消できておらず、
奇数を判定していることは分かりにくくなっていると思う。
模範解答も二重になっていたので仕方ないのか、、。