Ruby プログラミング

【Ruby入門 】Fizz_Buzz問題とよくある間違いについて

 

みやちゃ

 

皆さんこんにちは、みやちゃです!

物理とプログラミングについて解説しています!

皆さんはFizzBuzz問題というのをご存知でしょうか?

プログラマの中ではかなり有名な問題で、様々なプログラミング言語で解かれています。

「これができないとプログラマとして失格」と言われることがあるそうです。

今回はこのFizzBuzz問題をRubyで書いていきます。

今回は
  • FizzBuzz問題とは
  • FizzBuzzプログラムの作成
  • FizzBuzzプログラムでよくある間違い
この記事を読むと

FizzBuzzプログラムを作成できる

以下のような流れで進めていきます!

流れ
  • FizzBuzz問題とは
  • FizzBuzzプログラム作成
  • よくある間違い

目次

FizzBuzz問題とは

FizzBuzz問題は、プログラマの間で有名な問題で、様々なプログラミング言語で解くことができます。

「これができないとプログラマとして失格」とも言われたりするそうなので、ぜひできるようにしたい問題です。

今回はRubyでコードを書いていきます。

Rubyの言語がよくわからないという方にも詳細に理解できるように、記事を書いているので安心してください。

それでは実際に作成していきましょう!

FizzBuzzプログラム作成

FizzBuzzプログラムの概要

FizzBuzzプログラムの概要は以下のようになります。

  • 1〜30までの数字を表示する
  • 3で割り切れる数値のときは、"Fizz"と返す
  • 5で割り切れる数値のときは、"Buzz"と返す
  • 15で割り切れる数値のときは、"FizzBuzz"と返す
  • それ以外の数値は、その数値を文字列で返す

ファイルを作成

ここから実際にプログラムを書いていきます。

まずはコードを書くファイルを作成します。

Sublime Textを開き、新しいファイルを作成します。

[File] → [New File]で新しいファイルを作成することができます。

次にファイルを保存します。

command + s でファイルを保存できます。

ファイル名を「fizzbuzz.rb」で、場所は「Desktop」で保存します。

作成したファイルにコードを書いていきましょう。

FizzBuzzプログラム作成

1〜30までの数字を表示

まずは、1〜30までの数字を繰り返し処理によって表示させます。

(1..30).each do |i|
  puts i
end

eachメソッドは、繰り返し処理を行うメソッドです。

変数を「i」として、「puts i」で変数「i」に格納された1〜30までの数字を繰り返し返します。

一度試しに実行してみます。

Terminalを開き、「ruby fizzbuzz.rb」と入力します。

結果は、

mbp:Desktop miyacha$ ruby fizzbuzz.rb
1
2
3
...
28
29
30
mbp:Desktop miyacha$ 

ちゃんと1〜30までの数字を返してくれました。

「割り切れる」の表現方法

次に、「3、5、15の数値で割り切れる」という表現方法を見ていきます。

「%」は割り算の余りを求める演算子です。

「割り切れる」は、「%」を用いて表現します。

この「%」という演算子がどのように機能するのか、わかりやすいようにirbを起動して確かめてみましょう。

mbp:Desktop miyacha$ irb
irb(main):001:0> 5 % 3
=> 2
irb(main):002:0> 

上では、Terminalでirbを起動し、「5 % 3」と入力しています。

その結果、「2」と返ってきているのがわかります。

「5÷3=1あまり2」の2の部分が返ってきていることがわかります。

 

みやちゃ

 

「%」という演算子を使って

「もし3で割り切れたら、Fizzという文字列を返す」

を書いてみましょう。

fizzbuzz.rbのファイルに以下のようにコードを追加します。

(1..30).each do |i|
  if i%3==0
    puts "Fizz"
  else
    puts i
  end
end

「i%3==0」は、「iの数値を3で割った時の余りが0」という意味です。

次にターミナルで実行して見ましょう。

以下のような結果が返ってきました。

mbp:Desktop miyacha$ ruby fizzbuzz.rb
1
2
Fizz
4
...
Fizz
28
29
Fizz
mbp:Desktop miyacha$ 

うまく3の倍数の時に、「Fizz」という文字列が返ってきていることがわかります。

FizzBuzzプログラム完成

3と同様にして、「5で割り切れる」と「15で割り切れる」もコードを書いていきます。

fizzbuzz.rbのファイルを開き、以下のように、コードを書き換えてください。

(1..30).each do |i|
  if i%15==0
      puts "FizzBuzz"
  elsif i%3==0
      puts "Fizz"
  elsif i%5==0 
      puts "Buzz"
  else
      puts i
  end
end

初めに15で割り切れる数値で条件分岐していることに注意してください。(「よくある間違い」で解説)

実際にターミナルで実行して見ます。

mbp:Desktop miyacha$ ruby fizzbuzz.rb
1
2
Fizz
4
Buzz
...
Buzz
26
Fizz
28
29
FizzBuzz
mbp:Desktop miyacha$ 

3の倍数の時は「Fizz」、5の倍数の時は「Buzz」、15の倍数の時は「FizzBuzz」と返ってきています。

うまくできたみたいです。

よくある間違い

ファイルを次のコードに書き換えて、ターミナルで実行してみます。

(1..30).each do |i|
  if i%3==0
      puts "Fizz"
  elsif i%5==0
      puts "Buzz"
  elsif i%15==0 
      puts "FizzBuzz"
  else
      puts i
  end
end

ターミナルで実行してみます。

mbp:Desktop miyacha$ ruby fizzbuzz.rb
1
2
Fizz
4
Buzz
...
Buzz
26
Fizz
28
29
Fizz
mbp:Desktop miyacha$ 

15の倍数の時に、「FizzBuzz」と返ってきていないことがわかります。

これは最初に「3で割り切れる」という条件分岐を書いてしまっているため、 15と30が「3で割り切れる」の方で処理されてしまっています。

つまり、「15で割り切れる」を最初に条件分岐に持ってくることで、うまくいくようにしています。

まとめ

いかがでしたでしょうか?

今回は、FizzBuzzプログラムを作成しました。

 

みやちゃ

 

ここまでご覧いただきありがとうございます!

© 2024 とあるエンジニアの備忘録ブログ Powered by AFFINGER5