LoginSignup
1
0

More than 3 years have passed since last update.

Ruby FizzBuzz

Last updated at Posted at 2020-03-07

IT未経験のスクール生が学んだことをアウトプットします:sunglasses:

FizzBuzzは非常に有名なプログラミングの問題です。
私もRubyの勉強やり始めた時にこの問題と遭遇しました。
プログラミング初心者の方は特に覚えておきたい問題です。

FizzBuzz問題

1〜100までの数字をターミナルに出力してください。ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、両方の倍数である「15の倍数」のときはFizzBuzzと出力してください。

1から100までの数字を出力させる

1〜100まで出力させるからといって以下のように順番にputsで出力しようとしては効率が悪すぎます。

良くない例

saple.rb
def fizz_buzz

puts 1
puts 2
puts 3
(中略)
puts 99
puts 100

一定の処理を繰り返す時にはwhile文を使います。

while文

while文は繰り返し処理を行う文法の1つです。

sample.rb
  while 条件式 do
    # 処理
  end

条件式を元に繰り返すかどうかを判定します。条件式がtrueの時は処理を繰り返します。
1~100まで出力、つまり数字が100以上になるまでは処理を繰り返すので、条件式は以下のようになります。

sample.rb
num = 1
while (num <=100) do
end

1から始まるのでnum=1を定義します。while文の中に書いてしまうとnumを判別できなくなりエラーが起こるので注意しましょう。

次にwhile文の中身である処理を記述しましょう。処理は問題文にある通り、「3の倍数」のときはFizzと、「5の倍数」のときはBuzz、両方の倍数である「15の倍数」のときはFizzBuzzと出力、です。

if文

「3の倍数の時は」や「5の倍数の時は」など条件によって処理が別れる時はif文を使います。
条件が複数の時はelsifを使います

書き方

sample.rb
  if 条件式1 
    # 条件式1が真(true)のときに実行する処理
  elsif 条件式2 
    # 条件式1が偽(false)のとき、かつ
    # 条件式2が真(true)のときに実行する処理
  elsif 条件式3
    # 条件式1が偽(false)のとき、更に
    # 条件式2が偽(false)のとき、かつ
    # 条件式3が真(true)のときに実行する処理
  else
    # 条件式1と条件式2がどちらとも偽(false)のときに実行する処理
  end

今回の問題に当てはめるとこうなります。

sample.rb
  def fizz_buzz
    num = 1
    while (num <= 100) do
      #15の倍数の時(もしnumを15で割った時の余りが0なら)
      if (num % 15) == 0
        puts "FizzBuzz"
      #3の倍数の時(numを3で割った時の余りが0なら)
      elsif (num % 3) == 0
        puts "Fizz"
      #5の倍数の時(numを5で割った時の余りが0なら)
      elsif (num % 5) == 0
        puts "Buzz"
      #それ以外の時
      else
        puts num
      end
    end
  end

最後に処理が終わるごとにnumを1ずつ増やさなければいけません。増やさないとnumが1のままで、
永遠に1だけが出力されます。

完成コード

sample.rb
 def fizz_buzz
    num = 1
    while (num <= 100) do
      if (num % 15) == 0
        puts "FizzBuzz"
      elsif (num % 3) == 0
        puts "Fizz"
      elsif (num % 5) == 0
        puts "Buzz"
      else
        puts num
      end
      # numを1ずつ増やす num +=1(自己代入演算子)でもOK
      num = num + 1
    end
  end
  #メソッドの実行
  fizz_buzz
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