綾小路龍之介の素人思考

[perl] FizzBuzz問題(64bytes)

某Y!社では新卒に65bytesでFizzBuzz問題を解かせるらしい。どう考えてもこれが見やすいコードとは思えないのだが。。。

このコードはFizzBuzzの定義をそのままコードにしてあり、かつ比較的わかりやすいコードだと思う。

$ perl -e'print $_%15?$_%5?$_%3?$_:Fizz:Buzz:FizzBuzz for(1..100)'
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz26Fizz2829FizzBuzz3132Fizz34BuzzFizz3738FizzBuzz41Fizz4344FizzBuzz4647Fizz49BuzzFizz5253FizzBuzz56Fizz5859FizzBuzz6162Fizz64BuzzFizz6768FizzBuzz71Fizz7374FizzBuzz7677Fizz79BuzzFizz8283FizzBuzz86Fizz8889FizzBuzz9192Fizz94BuzzFizz9798FizzBuzz

ちょっと考えると、以下のように書き下せることがわかる。評価は15で割り切れる(3で割り切れ、かつ、5で割り切れる)ところから始まり、割り切れなければ次に5で割り切れるか、3で割り切れるかチェックする。それぞれの場合において割り切れればそのときは文字列を返し、それれらはそれぞれFizzBuzz、Buzz、Fizzである。

$ perl -e'print $_%15 ? ($_%5 ? ($_%3 ? $_ : Fizz) : Buzz) : FizzBuzz for(1..100)'
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz26Fizz2829FizzBuzz3132Fizz34BuzzFizz3738FizzBuzz41Fizz4344FizzBuzz4647Fizz49BuzzFizz5253FizzBuzz56Fizz5859FizzBuzz6162Fizz64BuzzFizz6768FizzBuzz71Fizz7374FizzBuzz7677Fizz79BuzzFizz8283FizzBuzz86Fizz8889FizzBuzz9192Fizz94BuzzFizz9798FizzBuzz

短さの探求は単純な問題だから面白いのであって、大規模な問題では止めて欲しい。

リファレンス

  1. Kazuho@Cybozu Labs: FizzBuzz - Perl 使って50バイト
  2. FizzBuzz - shtaxxx weblog
  3. TAKESAKO @ Yet another Cybozu Labs: FizzBuzz - Golf Challenge
  4. anarchy golf - FizzBuzz
  5. どうしてプログラマに・・・プログラムが書けないのか?

ソーシャルブックマーク

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

ChangeLog

  1. Posted: 2009-09-14T17:14:48+09:00
  2. Modified: 2009-09-14T17:14:48+09:00
  3. Generated: 2017-08-17T23:09:53+09:00