1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】FizzBuzz問題

Last updated at Posted at 2021-01-03

概要

Rubyの勉強として FizzBuzz問題whileeach を使用して解きました。解き方は他にもありますが、今回は個人的に使用頻度の低い while と、よく使用する each で問題を解いてみました。

(2020.1.13 追記) uptoメソッドと引数をつかった方法でも実践しました。

目次

  • 実践

    • 問題
    • 解答(while)
    • 解答(each)
    • 解答(upto)
    • おまけ
  • 補足

  • まとめ

  • 参考文献

実践

問題

1~100 の数字をターミナルに出力してください。

【条件】

  • 値が3の倍数のとき、"Fizz" と出力
  • 値が5の倍数のとき、 "Buzz" と出力
  • 値が3と5の倍数のとき、 "FizzBuzz" と出力

解答(while)

def fizz_buzz
  num = 0

  while (num <= 100) do    # 100まで繰り返す条件
    num += 1               # 繰り返すたびに1を足していく

    if (num % 15) == 0     # 15の倍数のとき
      p 'FizzBuzz'
    elsif (num % 3) == 0   # 3の倍数のとき
      p 'Fizz'
    elsif (num % 5) == 0   # 5の倍数のとき
      p 'Buzz'
    else                   # それ以外の時
      p num
    end
  end
end

fizz_buzz

解答(each)

def fizz_buzz

  (1..100).each do |num|     # 1~100まで
    if (num % 15) == 0       # 15の倍数のとき
      p 'FizzBuzz'
    elsif (num % 3) == 0     # 3の倍数のとき
      p 'Fizz'
    elsif (num % 5) == 0     # 5の倍数のとき
      p 'Buzz'
    else                     # それ以外のとき
      p num
    end
  end
end

fizz_buzz

解答(upto)

def fizz_buzz
  1.upto(100) do |num|  # 1〜100まで
    if num % 15 == 0
      p 'FizzBuzz'
    elsif num % 3 == 0
      p 'Fizz'
    elsif num % 5 == 0
      p 'Buzz'
    else
      p num
    end
  end
end

fizz_buzz

おまけ

1〜100まで ではなく 1〜任意の数まで というパターンもできたらと思いプログラムを書きました。

方法はあまり変わらなくて 引数で指定した値まで繰り返し処理 をするというだけです。

def fizz_buzz(max_num)
  1.upto(max_num) do |num| # 1〜引数で指定した数(任意の数)まで
    if num % 15 == 0
      p 'FizzBuzz'
    elsif num % 3 == 0
      p 'Fizz'
    elsif num % 5 == 0
      p 'Buzz'
    else
      p num
    end
  end
end

p 'いくつまで数えますか?'
num = gets.to_i
fizz_buzz(num)

補足

値が3と5の倍数のとき、 "FizzBuzz" と出力

num % 3 == 0 && num % 5 == 0

解答では (num % 15) == 0 このように書いていますが、上記のように置き換えることができます。

3の倍数 or 5の倍数( 15の倍数 ) という条件を先に書く理由

問題文にもあるとおり、 「3と5の倍数」のとき、FizzBuzz なので 3の倍数でもあり5の倍数( 15の倍数 ) でなくてはいけません。この条件を最後に書いてしまうと、その前に 「3の倍数」「5の倍数」 の条件が評価されてしまうのではじめに 15の倍数 を追加しています。

まとめ

  • FizzBuzz問題の解き方は他にもあり上記で上げた以外でも解くことができる
  • 今回のような条件があるときには 15の倍数 をはじめに追加しないと評価されない

参考文献

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?