FizzBuzz問題とは?Rubyでプログラミングしてみよう!


こんにちは。Tomoyuki(@tomoyuki65)です。

Fizz Buzz問題って知っていますか?

 

プログラマならできて当たり前と言われている問題なんです!

 

今までに聞いたことがないって方は、ぜひ試してみて下さい。

この記事では、そんなFizz Buzz問題について解説します。

 



Fizz Buzzとは?

Fizz Buzzとは、英語圏で行われている言葉遊びです。

プレイヤーが円状に座り、最初のプレイヤーは「1」と数字を発言し、次のプレイヤーは、直前のプレイヤーの次の数字を発言していきます。

ただし、発言する数字が3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、15で割り切れる場合は「Fizz Buzz」を数字の代わりに発言しなければなりません。

発言と間違えたり、ためらった場合は脱落となります。

 

このFizz Buzzをプログラムの問題としてテストし、プログラムを書けるプログラマとして最低限の能力があるかどうかを見分けるのによく知られています。

 

 

Fizz Buzz問題をやってみよう!

では早速、Fizz Buzz問題をプログラミングしてみましょう!

今回は以下の条件でプログラムを作成してみて下さい。

  •  fizz_buzzメソッドを定義し、1から30までの数を渡す
  •  3で割り切れる数値をメソッドの引数に渡すと「Fizz」を返す
  •  5で割り切れる数値をメソッドの引数に渡すと「Buzz」を返す
  •  15で割り切れる数値をメソッドの引数に渡すと「Fizz Buzz」を返す
  •  それ以外の数値は、その数値を文字列として返す
  •  fizz_buzzメソッドで返ってきた値をputsで表示する

 



解答例

では以下に解答例を示していきます。

 

fizz_buzzメソッドを定義

まず、渡した数値を文字列として返すfizz_buzzメソッドを定義します。

1から100までの数値をfizz_buzzメソッドに渡し、返ってきた値をputsで表示させます。

# fizz_buzzメソッドを定義
def fizz_buzz(n)
  n.to_s
end

# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end

 

実行結果
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

 

3で割り切れる場合の処理を追加

次はfizz_buzzメソッドに渡した数値が3で割った余りが0の場合、「Fizz」を返す処理を追加します。

# fizz_buzzメソッドを定義
def fizz_buzz(n)  # 3で割り切れる場合
  if n % 3 == 0
    'Fizz'
  else
    n.to_s
  end
end

# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end

 

実行結果
1
2
Fizz
4
5
Fizz
7
8
Fizz
10
11
Fizz
13
14
Fizz
16
17
Fizz
19
20
Fizz
22
23
Fizz
25
26
Fizz
28
29
Fizz

 

5で割り切れる場合の処理を追加

次はfizz_buzzメソッドに渡した数値が5で割った余りが0の場合、「Buzz」を返す処理を追加します。

# fizz_buzzメソッドを定義
def fizz_buzz(n)
  # 3で割り切れる場合
  if n % 3 == 0
    'Fizz'  # 5で割り切れる場合
  elsif n % 5 == 0
    'Buzz'
  else
    n.to_s
  end
end

# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end

 

実行結果
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で割り切れる場合の処理を追加

最後に、fizz_buzzメソッドに渡した数値が15で割った余りが0の場合、「Fizz Buzz」を返す処理を追加します。

ただし、追加する位置を間違えないように気をつけて下さい!

# fizz_buzzメソッドを定義
def fizz_buzz(n)
  # 15で割り切れる場合
  if n % 15 == 0
    'Fizz Buzz'
  # 3で割り切れる場合
  elsif n % 3 == 0
    'Fizz'
  # 5で割り切れる場合
  elsif n % 5 == 0
    'Buzz'
  else
    n.to_s
  end
end

# 1から30をfizz_buzzメソッドに渡し、putsで表示
range = 1..30
range.each do |x|
  puts fizz_buzz(x)
end

 

実行結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
Fizz Buzz

 

最後に

今回はFizz Buzz問題について解説しましたが、いかがだったでしょうか?

 

簡単すぎて楽勝だったよって方は、プログラマの素質があるでしょう!

 

また、今回は基本的な問題でしたが、条件を追加することによって難易度の調整もできるようです。

その他、Ruby以外のプログラミング言語で試すのも良いと思うので、ぜひ挑戦してみて下さい。

 

  • 関連記事

オススメのRuby入門サイトはどれ?Rubyの学習方法をまとめる

2017.10.24

 

The following two tabs change content below.
Tomoyuki

Tomoyuki

好きなことで生きたくて、SEを辞めてブロガー&ゲーム実況で活動中。パソコン、ネット、ゲームが大好き。YouTubeのチャンネル登録&Twitterのフォローもぜひお願いします!








シェアはこちらから


本を、聴こう。

オーディブルなら、プロの声優やナレーターが朗読した本(音声コンテンツ)を、耳で聴いて楽しめます。



資産運用ならウェルスナビがおすすめ!

ウェルスナビなら誰でも簡単に自動で資産運用を始められますよ!
まだ資産運用を始めてない人は、ぜひ一度チェックしてみて下さいね。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です