rubyco(るびこ)の日記 RSSフィード

2007-05-09

Fizz-Buzz問題

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

どうしてプログラマに・・・プログラムが書けないのか?

Fizzを出すのは「3の倍数であって5の倍数でないとき」と仮定して解く。

a = Array.new
(1..100).each do |k|
  if k % 3 == 0 and k % 5 == 0
    a << 'FizzBuzz'
  elsif k % 3 == 0
    a << 'Fizz'
  elsif k % 5 == 0
    a << 'Buzz'
  else
    a << k
  end
end
puts a

muscovyduckmuscovyduck 2007/05/10 09:49 caseのほうがいいそうなのですが、趣味によりますよねえ。
http://jp.rubyist.net/magazine/?0010-CodeReview#l14

case
when k % 3 == 0 and k % 5 == 0
a << ’FizzBuzz’
when k % 3 == 0
a << ’Fizz’
when k % 5 == 0
a << ’Buzz’
else
a << k
end

rubycorubyco 2007/05/10 12:04 ん?違うと思いますよ。式の値を調べるぞ、といってwhenが並ぶのは正しいですが、この場合は違うと思いますよ。そもそも、muscovyduckさんのコードは動かないような...

muscovyduckmuscovyduck 2007/05/10 12:55 失礼しました。どうやらカッコが必要なようでした。
when (k % 3 == 0 and k % 5 == 0)

あと、case の「式」を省略した場合、when の条件式が偽でない最初の式を評価します。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#case

yoosakiyoosaki 2007/05/10 15:15 http://golf.shinh.org/p.rb?FizzBuzz#Ruby
こちらにチャレンジしてみても面白いですよ。
ちなみにわたしの記録は63byteです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証