或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

RubyでFizzBuzz問題を解く

どうも、パイソンです。

ネットを探索してると、初歩的なプログラム問題としてFizzBuzz問題なるものが超有名であるとありました。

いや、実際10年以上プログラマやってるが初めて聞いたぞ。。(;^_^A

ということで、今回ブログのネタがてら少し調べて見ることにしました。

FizzBuzzとは

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。

Fizz Buzz - Wikipedia

これをプログラムで出力しなさいというのが、FizzBuzz問題だということ。

確かにこの問題、プログラミングの初歩である、「条件分岐」、「繰り返し」の要素が理解出来ていないと解けないので、基本が出来ているかどうかを試すには程よい問題ですね。

プログラミングを教える題材として、HelloWorldの次ぐらいの例題として使えます。

時期柄、新人研修なんかの演習問題としても丁度良いかも。

Rubyでの実装

早速、勉強中のRubyで実装してみました。

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

実行結果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16

#(中略)

89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

雑感

この問題の解き方として、「剰余演算子(%)禁止」とか、最小文字数で実装するとか色んな楽しみ方があるようです。色んな解き方を考えて見るのもプログラミングの楽しさですね。(^-^)