【概要】
1.結論
2.FizzBuzz問題とは何か
3.どのようにプログラムするのか
4.ここから学んだこと
1.結論
eachメソッドとif..elsifを組み合わせよう!
2.FizzBuzz問題とは何か
結論としては、コードが書けないプログラマー志願者を分けるために作られたプログラムです。
具体例としては、
(i)1~100の数字を出力する際に、
(ii)3の倍数は”Fizz"
(iii)5の倍数は"Buzz"
(iv)15の倍数は"FizzBuzz"
を表示させる
というプログラムです!
基本的なことが理解できているかを試せる問題として有名です!
3.どのようにプログラムするのか
今回は使用する言語は"Ruby"になります。
def fizz_buzz
num = 1 #---❶
(1..100).each do |i| #---❷
if num % 15 == 0 #---❸
puts "FizzBuzz"
elsif num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
else
puts num #---❹
end
num = num + 1 #---❺
end
end
fizz_buzz
❶まずここでnumに"1"を代入しないとどの変数のどの値からか、わかりません。今回は1~100なので"1"を代入しています。
❷"2.FizzBuzz問題とは何か"で説明した(i)を満たすには、繰り返し処理+条件が必要です。ここは"4.ここから学んだこと"に後述しますが、each以外のメソッドでもコーディングできます。
❸"2.FizzBuzz問題とは何か"で説明した(ii)~(iv)を満たすための条件式です。倍数の場合分けは、剰余演算子を利用して3/5/15の倍数を判別しています。注意としては3の倍数の条件式からコーディングしてしまうと、"15"の数字が出た際に"3の倍数"の条件で認識されてしまいます。プログラムは上から下に読み込まれるのが基本なので、一度条件に当てはまると以降のプログラムは無視されます。
剰余の書き方については自分の記事でも紹介しているので、探す手間が省けます!
剰余とべき乗(冪乗)の演算子
❹"2.FizzBuzz問題とは何か"で説明した(i)で"1~100"を表示させるので倍数以外の条件も出力します。なので条件以外数字はそのままの数字を出力するようにしています。
❺これがないと、”1”以降の数字を生み出せません。eachに1~100と書いてあっても"1"を100回出力する繰り返し処理になってしまいます。"num += 1" でもOKです。
4.ここから学んだこと ---------------------------------------- ❷の部分は 繰り返し処理メソッドと条件の式(100以下)を組み合わせればいけるのではと思いwhileメソッド使ったところ動きました。
while num <= 100 do
いろいろ検索していたところ、
繰り返し処理は下記URLのようにたくさんの方法がありました!自分が知っていたのはtimes/each/whileメソッドでした。また条件をどう組み込むかもメソッドによって違います!
参考にしたURL:
while文
いろいろな方法で1から100までを出力する