こんにちは。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
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
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
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
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以外のプログラミング言語で試すのも良いと思うので、ぜひ挑戦してみて下さい。
- 関連記事
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す