文系でもプログラマーになりたい!

文系プログラマー(になりたい人)のメモです。現在、プログラミングスクールで学習中。WEBエンジニアへの転職目指して活動中です!

Ruby で FizzBuzz問題を解く

 学習の一環でrubyFizzBuzz問題を解いたのでまとめます。

 

FizzBuzz問題って何?

数字を1から順に言い、

3で割り切れる数の時は「Fizz」、

5で割り切れる数も時は「Buzz」、

15で割り切れる数の時は「FizzBuzz」と言うゲーム。

「プログラムを書けるプログラマ」を見分けるためのテストとして良く知られている。

 

Rubyで書いてみよう

回答は一個ではない。様々な方法でFizzBuzz問題のプログラムを書くことが出来る。

条件分岐は15で割り切れる場合から、書くのが重要!

 

①each文で書く。

繰り返しのeach文で書くとこうなる。

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

 

②while文で書く

条件を満たすかぎり繰り返されるWhile文だとこうなる。

a = 1
while a <= 100 
  if a%15 == 0
    puts "fizzbuzz"
  elsif a%5 == 0
    puts "Buzz" 
  elsif a%3 == 0
    puts "Fizz"
  else
    puts a
  end
  a += 1 
end

 

③timesを使って書く

繰り返しの回数を決めるtimesを使うとこう

a = 1
100.times do
  if a%15 == 0
    puts "fizzbuzz"
  elsif a%5 == 0
    puts "Buzz" 
  elsif a%3 == 0
    puts "Fizz"
  else
    puts a
  end
  a += 1 
end

④upto を使って書く

上限を決められるuptoで書くとこうなる。

a = 1
1.upto(100do
  if a%15 == 0
    puts "fizzbuzz"
  elsif a%5 == 0
    puts "Buzz" 
  elsif a%3 == 0
    puts "Fizz"
  else
    puts a
  end
  a += 1 
end

実行結果

正しく表示されていればOK!

1
2
4
Buzz
7
8
Buzz
11
13
14
16
17
19
Buzz
22
23
Buzz
26
28
29
31
32
34
Buzz
37
38
Buzz
41
43
44
46
47
49
Buzz
52
53
Buzz
56
58
59
61
62
64
Buzz
67
68
Buzz
71
73
74
76
77
79
Buzz
82
83
Buzz
86
88
89
91
92
94
Buzz
97
98
Buzz

 

間違いやもっといいコードがあれば、教えていただければ幸いです。

よろしくお願いします。