hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

Fizz-Buzz問題をRubyでやってみた。


スポンサーリンク


ネットを巡回していたら、Fizz-Buzz問題ってのがあったのでやってみた。
言語は当然自分の中で盛り上がっているRubyで。ちなみに問題文は以下ね。

1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに 'Fizz' と、
5の倍数のときは 'Buzz' とプリントし、3と5両方の倍数の
場合には 'FizzBuzz' とプリントすること
どうしてプログラマに・・・プログラムが書けないのか?


2分でやれれば、まぁ、それなりってことでスタート。

100.times do |n|
  nn = n + 1
  str = ""
  str << "Fizz" if (nn % 3) == 0
  str << "Buzz" if (nn % 5) == 0
  if str == "" then
    p nn
  else
   p str
  end
end


えーと、5分くらいかかったorz
irbで初めやろうとして100.eachとか意味不明な記述をしたりthenを忘れたり散々だった。でもまぁ、ロジック自体はすぐに思いついたからいいだろう*1。そんなに長いコードにもならなかったし・・・。ワンライナーな方々を除けば大体こんな書き方になると思います。
でも、さすがに・・・nn = n + 1ってカッコ悪すぎだろ・・・というわけで、この部分を消せる他の書き方がないか調べてみたら、いくつか見つかった。
まず、1.upto(100)っていう書き方。

1.upto(100) do |n|
  str = ""
  str << "Fizz" if (n % 3) == 0
  str << "Buzz" if (n % 5) == 0
  if str == "" then
    p n
  else
    p str
  end
end


もう一つは、(1..100)を使う書き方。

(1..100).each do |n|
  # 中身は上と同じ
end


やっぱり簡単な問題でも、実際に書いて調べる必要あるね*2
で、ここまで書いておいて、そういえば、昔ブログに書いたような記憶があるな・・・と思って検索してみたら実は2年前にやっていたw
Fizz-Buzz問題とやらをやってみる - hellkite 日記と雑記とメモ。


言語はPythonだったけど。そうか、2年前はPythonだったか。setとか全然忘れているんですけど。うーん、使わないとやっぱり忘却の彼方、ですね。Rubyはそんなことにならないように精進せねば。

*1:ロジックが間違っていたらガクブルなんですけど・・・

*2:普段、Cとかアセンブラとかばかりだから、便利な使い方はすぐ忘れてしまうので・・・