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入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

 

The following two tabs change content below.

Tomoyuki

SEを5年経験後、全くの未経験ながら思い切ってブロガーに転身し、月間13万PVを達成。その後コロナの影響も受け、以前から興味があったWeb系エンジニアへのキャリアチェンジを決意。現在はWeb系エンジニアとして働きながら、プロゲーマーとしても活躍できるように活動中。








シェアはこちらから


【2024年】おすすめのゲーミングPC

モンハンワイルズの発売日とPC版(Steam版)の推薦スペックが公開されたので、おすすめのゲーミングPCをご紹介!


コメントを残す

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