目次
開発環境
- Ruby version: ruby 3.1.2
RubyのFizzBuzzプログラムとは
FizzBuzzとは英語圏で長距離ドライブ中や飲み会の時に行われる数字を用いた言葉遊びです。
ジェフ・アトウッドがコードが書けないプログラマ志願者を見分ける手法としてFizzBuzz問題を提唱し、その提唱は世界的に様々な場所で議論の対象になっているほど有名です。
そのため、基本的なアルゴリズムを考え、プログラムを構築するチュートリアルとして幅広く使用されています。
Wikipedia:https://ja.wikipedia.org/wiki/Fizz_Buzz
RubyのFizzBuzzプログラムのチュートリアル
FizzBuzzプログラムにチャレンジするにあたり、FizzBuzzプログラムのルールを確認しましょう。
FizzBuzzプログラムのルール
- 1から100までの数字で下記の条件に合うプログラムを構築する
- 3の倍数=>Fizzを表示する
- 5の倍数=>Buzzを表示する
- 3の倍数かつ5の倍数=>FizzBuzzを表示する
- いずれにも当てはまらない場合は数字を表示する
FizzBuzzプログラムのサンプルコード
RubyのFizzBuzzプログラムのサンプルコードは下記になります。
1 2 3 4 5 6 7 8 9 10 11 | (1..100).each do |number| if number % 3 == 0 && number % 5 == 0 puts "FizzBuzz" elsif number % 3 == 0 puts "Fizz" elsif number % 5 == 0 puts "Buzz" else puts number end end |
FizzBuzzプログラムの実行結果
RubyのFizzBuzzプログラムの実行結果は下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 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 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz |
RubyのFizzBuzzプログラムの注意点
FizzBuzzプログラムを構築するにあたり、いくつか注意点を解説していきます。
条件分岐の処理の順番で結果がかわる
FizzBuzzプログラムのルール通りにif文を構築した場合、下記になります。
1 2 3 4 5 6 7 8 9 10 11 | (1..100).each do |number| if number % 3 == 0 puts "Fizz" elsif number % 5 == 0 puts "Buzz" elsif number % 3 == 0 && number % 5 == 0 puts "FizzBuzz" else puts number end end |
そして、実行結果を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz 16 17 Fizz 19 Buzz |
実行結果の15行目は「3の倍数かつ5の倍数」にあたる15ですが、if文の条件分岐の順番をルール通りにしたことで「FizzBuzz」と表示されず「Fizz」と表示されています。
これは15が2行目の「if number % 3 == 0」で「true」となり、3行目の「puts "Fizz"」が実行されたため、6行目の「elsif number % 3 == 0 && number % 5 == 0」まで処理がいかなかったことが原因です。
そのため、どのように処理を行えば正常にプログラムを構築できるのか、基本的なアルゴリズムを考えることが大切です。
おわりに
RubyのFizzBuzzプログラムのチュートリアルを解説してきましたが、いかがだったでしょうか。
もし、私がFizzBuzzプログラムを書くとしたら下記のようにプログラムするでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def FizzBuzz(number) if number % 3 == 0 && number % 5 == 0 puts "FizzBuzz" elsif number % 3 == 0 puts "Fizz" elsif number % 5 == 0 puts "Buzz" else puts number end end numbers = 1..100 numbers.each do |number| FizzBuzz(number) end |
いわゆるオブジェクト指向を少し反映したプログラムですが、「define(ディファイン)」で処理をメソッド化し、メソッドを呼び出すことで戻り値を出力することで保守性と可読性を考慮しています。
そのほかにも、1行でプログラムを書くことを「one liner(ワンライナー)」といいますが、最短で1行でプログラムすることもできます。
FizzBuzzプログラムは、基本的なアルゴリズムを学ぶことができる基本問題なので、是非、チャレンジしてください。