blog.takuyan.com

Ruby & Javascript & Hack

RubyにおけるFizzBuzz

ブラウジングしてたら、ひさびさに読んだ。
どうしてプログラマに・・・プログラムが書けないのか?

かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、単に大きな問題に対して苦労しているのではないことがわかった。やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。彼らはまったくちっぽけな問題に苦労しているのだ。


それで、そういった類の開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。Fizz-Buzz問題の例はこんな感じだ。


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


ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。


で、やってみた。記録は2分ジャストくらい。
「ちゃんとしたプログラマ」認定は頂けませんでしたww

for i in 1..100
  str = ""
  str << "Fizz" if i % 3 == 0
  str << "Buzz" if i % 5 == 0
  str << i.to_s unless i % 3 == 0 || i % 5 == 0
  puts str
end

もっとスマートに書けないかなぁ、と思ってググッたら、
こんな感じのワンライナーを発見。
Rubyの最短FizzBuzzの解説、の補足 - バリケンのRuby日記 - Rubyist

1.upto(?d){|i|i%3<1&&x=:Fizz;puts i%5<1?"#{x}Buzz":x||i}


うはは。
いまの俺じゃさすがに2分以内にここまではできねぇや。


精進が足らないみたい。


にほんブログ村 ベンチャーブログへ