FizzBuzz問題をRubyで書くと

FizzBuzz問題とはこれ。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

Step1
vi fizzbuzz.rbして以下を記述する。100.eachはさすがに通らなかった。iだけだと0から99表示になるのでi+1する。

100.times do |i|
 puts i+1
end

ruby fizzbuzz.rbを実行すると1〜99が表示される。

完成した。

#vi fizzbuzz.rb
100.times do |i|
  i += 1
  if i % 3 == 0 and i % 5 == 0
    puts "FizzBuzz"
  elsif i % 3 == 0
    puts "Fizz"
  elsif i % 5 == 0
    puts "Buzz"
  else 
    puts i
  end
end

が、仕様は満たしているが気に入らない。重複が多い。putsが何回も出てくるしi+=1とかダサい…。@ikmさんにしたがってちょっと直した。次はif文をどうにかしたいね。

#vi fizzbuzz.rb
1.upto 100 do |i|
  t = ""
  if i % 3 == 0 and i % 5 == 0
    t += "FizzBuzz\n"
  elsif i % 3 == 0
    t += "Fizz\n"
  elsif i % 5 == 0
    t += "Buzz\n"
  else
    t += "#{i}\n"
  end
  puts t
end

One Response to “FizzBuzz問題をRubyで書くと”

  1. ikm より:

    1.upto(100) do |i| でもいけますよー。