LoginSignup
0
0

More than 1 year has passed since last update.

【Ruby】Fizzbuzzプログラムを作成しよう!

Last updated at Posted at 2022-12-04

Rubyから少し離れていたので復習がてらFizzbuzzプログラムを作りました。

Fizzbuzzプログラムとは?

Fizz Buzzとは、英語圏で行われている言葉遊びです。
プレイヤーが円状に座り、最初のプレイヤーは「1」と数字を発言し、次のプレイヤーは、直前のプレイヤーの次の数字を発言していきます。
ただし、発言する数字が3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、15で割り切れる場合は「Fizz Buzz」を数字の代わりに発言しなければなりません。
このFizzBuzzを、プログラムコードとして画面上に出力できるかどうかでプログラマーの技術力がわかるため、コーディング面接の題材としてよく使われています。

FizzBuzzプログラムは、以下のような挙動をするプログラムです。

  • 3で割り切れる数値を引数に渡すと、「Fizz」を返す
  • 5で割り切れる数値を引数に渡すと、「Buzz」を返す
  • 3と5の両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す
  • それ以外の数値は、その数値を文字列に変えて返す

要件

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

fizz_buzzメソッドを定義

「3と5の両方で割り切れる数値」をnumber % 3 == 0 && number % 5 == 0という書き方でも表せますが、
もっとシンプルに考えて、3で割り切れる数値(=3の倍数)かつ、5で割り切れる数値(=5の倍数)は、
つまり15で割り切れる数値(=15の倍数)なので、number % 15 == 0と書くことができます。

またプログラムは、上から下に順番に処理されるため、15の倍数は、3でも5でも割り切れる数値なので、number % 15 == 0を条件分岐の先頭に持ってくる必要があります。
number % 3 == 0やnumber % 5 == 0を先に書いてしまうと、そちらが先にtrueで評価され、期待どおりの挙動をしなくなってしまいます。

fizz_buzz.rb
def fizz_buzz(number)
  # 15で割り切れる場合
  if number % 15 == 0
    'Fizz Buzz'
  # 3で割り切れる場合
  elsif number % 3 == 0
    'Fizz'
  # 5で割り切れる場合
  elsif number % 5 == 0
    'Buzz'
  else
    number.to_s
  end
end

1から30までの数値をfizz_buzzメソッドに渡し、戻り値をputsで表示

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

完成コード

fizz_buzz.rb
def fizz_buzz(number)
  # 15で割り切れる場合
  if number % 15 == 0
    'Fizz Buzz'
  # 3で割り切れる場合
  elsif number % 3 == 0
    'Fizz'
  # 5で割り切れる場合
  elsif number % 5 == 0
    'Buzz'
  else
    number.to_s
  end
end

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

実行結果

3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、15の倍数(3の倍数かつ5の倍数)の時は「Fizz Buzz」と出力されました。
スクリーンショット 2022-12-04 17.16.22.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0