【ruby】FizzBuzz問題について
FizzBuzzの問題とは「1から100まで数を数える時に、3の倍数なら「fizz」、5の倍数なら「buzz」、ただし15の倍数なら「fizzbuzz」、それ以外はその数を答える問題」のことでプログラミングの素質を問う問題とのこと
この問題を見たとき、残念ながら素質ない私は最初普通の以下のように書いてしまいました。
for i in 1..99 do if i%3 == 0 puts "fizz" elsif i%5 == 0 puts "buzz" elsif i%15 == 0 puts "fizzbuzz" else puts i end end
for文で1~100を繰り返す処理をつくり、if文で場合分けすればいいのではと思いました。その構文自体は書けているのですが、結果は次のようになりました。
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizz 16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizz ~以降省略
あれっ15の倍数でfizzbuzzが表示されていない!ということに気づきました。 それもそのはず、15の倍数は3の倍数でもあるし、5の倍数でもあります。 そのためこの書き方だと15の倍数は3の倍数で判断されてfizzの表示になっていたんですね。
なのでこの形式で書くなら15の倍数を先に持ってきて処理させないといけません。
for i in 1..99 do if i%15 == 0 puts "fizzbuzz" elsif i%5 == 0 puts "buzz" elsif i%3 == 0 puts "fizz" else puts i end end
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizzbuzz ~以降省略
こんなことにも気づけないとは・・素質ないんだろうな 今まではサンプルのコードをアレンジしながらプログラミングしてたが 不格好でもいいので、自分で0からコードを書くようにしないといけないな と思いました。