綾小路龍之介の素人思考

[perl] Fizz Bizz 問題

ある数が3の倍数のときFizz、また5の倍数のときBizz、どちらでもない場合その数を出力する課題。これをperlの1行スクリプトでこなしてみる。

自分で3分で書いたやつ。

$ time perl -le 'for(1..10000000){$s="";$s.="Fizz" if !($_%3);$s.="Bizz" if !($_%5);$s=$_ if !$s;print $s}' > /dev/null

real    0m17.770s
user    0m17.701s
sys     0m0.008s

探し当てたやつ。

$ time perl -le 'print(($_%3?"":Fizz).($_%5?"":Buzz)||$_) for(1..10000000)' > /dev/null

real    0m21.733s
user    0m21.517s
sys     0m0.004s

自分で書いたものの方が早いのはなぜだ。余分な処理をたくさんやっているように思えるのだが。プロファイラがほしいな。

リファレンス

  1. anarchy golf - FizzBuzz
  2. fizz buzz - Google 検索
  3. Fizz Buzz - Wikipedia
  4. どうしてプログラマに・・・プログラムが書けないのか?
  5. ここギコ!: FizzBuzz問題
  6. Using FizzBuzz to Find Developers who Grok Coding « Imran On Tech

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-07-14T15:18:55+09:00
  2. Modified: 2009-07-14T15:18:55+09:00
  3. Generated: 2018-08-11T23:09:12+09:00