fizzbuzz.rb 3つ

30分プログラム、その27。眠いので、適当。

今回は、最近話題のFizzBuzz問題。

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

これを一つ作るのに、30分かけていたらプログラマ失格なので、剰余を遣うのから使わないのまで計3種作ってみた。それでも、そこそこ時間が余ったけど。

基本的なバージョン:

1.upto(100){|n|
  if n % 15 == 0then
    puts 'fizzbuzz'
  elsif n % 3 == 0 then
    puts 'fizz'
  elsif n % 5 == 0 then
    puts 'buzz'
  else
    puts n
  end
}

Arrayを使ったちょっと変なやつ

puts Array.new(101){|n|
  if n % 15 == 0 then
    'fizzbuzz'
  elsif n % 3 == 0 then
    'fizz'
  elsif n % 5 == 0 then
    'buzz'
  else
    n
  end
}[1..101].join("\n")

id:zyxwvに教えてもらった剰余を使わないバージョン

fizz = ['','','fizz'] * 34
buzz = ['','','','','buzz'] * 20
 
fb = (1..100).zip(fizz,buzz).map{|n,f,b|
  str = f+b
  str.empty?() ? n : str
}
puts fb.join("\n")
  • 剰余を使わないバージョンがステキすぎる
  • あ、今日はSchemeの日だった。間違えた