べるべる研究日誌

なんでもやる系エンジニアの日々

Fizz-Buzz問題をいまさらながら書く

ふと一時期話題になっていたけど競って短いコード競争みたいになっていたのでやっていなかったFizzBuzz問題をふと他のところで見たので、今回はめんどくさがらずにちゃんと書いてみた。

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

最初に思いついたコード

(1..100).each{|n|
  print n unless (n%3==0 || n%5==0)
  if (n%3==0)
    print "Fizz"
  end
  if (n%5==0)
    print "Bizz"
  end
  print "\n"
}

unlessを1行で書いているのにifは複数行なのと、縦に表示されると確認するのにスクロールするのがめんどくさいのでその辺を書き直し。

(1..100).each{|n|
  print n unless (n%3 == 0 || n%5 == 0)
  print "Fizz" if (n%3 == 0)
  print "Buzz" if (n%5 == 0)
  print ","
}

最初ので2分くらいかな。ちゃんと時間見てはいないですが。プログラムをちゃんと書いた事の無い人は繰り返しの概念があやふやみたいな気がします。そういえばコンピュータサイエンスの試験でこういう問題が出たのを思い出しました。何の授業だったかなぁ。