« Multi-USB::MissileLauncher for Win32 | メイン | FizzBuzz x86 for バイナリアン »

FizzBuzz - Golf Challenge

FizzBuzzプログラムを書くのが流行っているみたいなので私も参加してみることに。

Perl部門

1. 目指せ最短 (perl -eも含めて56byte)

perl -e'die+map{(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/}1..1e2'

※ perl -lオプションを使わずに最短を目指す。標準エラー出力がNGの場合はprintを使って57byteに

perl -e'print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..1e2'

anarchy golf - FizzBuzz で換算すると48byteでPerl最短 (perl -eを含めない)

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..1e2

これだと perl FizzBuzz.pl と実行できて Code Golf に参加できます。

お約束の展開

2. ppencodeバージョンで

perl -e "print q q print q and print chr oct oct ord uc q map m and print chr oct oct oct ord uc q else and print chr ord uc qw q for q and print chr ord q tie gt and print chr length q x rename sethostent srand pack pipe setpwent syscall else eq split sleep endservent qw require symlink ne keys ord require x and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr oct oct oct ord uc q rmdir and print chr oct hex ord uc q dump and and print chr oct oct oct ord uc qw q binmode q and print chr oct hex ord uc q my m and print chr oct oct oct ord uc q oct no and print chr oct oct ord uc q rmdir and print chr oct hex ord uc qw q wait q and print chr oct oct ord uc qw q fcntl q and print chr oct hex ord q q eq and print chr ord uc qw q bind q and print chr ord q dump and and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr oct oct oct ord uc q rmdir and print chr oct hex ord uc q dump and and print chr oct oct oct ord uc qw q bless q and print chr oct hex ord uc q my m and print chr oct oct oct ord uc q lc eval and print chr oct ord uc q each ne and print chr oct hex ord uc qw q wait q and print chr oct oct hex ord qw q die q and print chr oct oct hex ord qw q die q and print chr oct oct oct ord uc qw q binmode q and print chr oct hex ord uc q my m and print chr oct oct ord uc qw q bind q and print chr oct oct oct ord uc qw q binmode q and print chr oct oct ord uc qw q gt q and print chr ord qw q for q and print chr ord q xor x and print chr ord q or no and print chr ord q q q and print chr oct oct oct ord q eq ne and print chr oct oct ord uc qw q fcntl q and print chr oct oct ord uc qw q for q and print chr oct oct oct ord q eq le and print chr ord q ne sin and print chr hex ord q m alarm" | perl

※ perlの予約語だけでプログラミングした場合

他の Perl Monger の解答

3. 404 Blog Not Found:ブクマゴルフってどうよ? (66byte)

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

※オーソドックスな実装

4. ひおにっき(2007-05-09) [Program] FizzBuzz (56byte)

perl -le'print+(Fizz)[$_%3].(Buzz)[$_%5]||$_ for 1..100'

※インスパイヤの元ネタ。おそらくこれが最短でスマートな実装かも。hioさんの実装よりも短くしようと頑張ったけど、結局抜けませんでした。

5. Golf Challenge: FizzBuzz (この中から面白い実装をピックアップ)

perl -le 'print+($_,Fizz,Buzz,FizzBuzz)[3&19142723>>2*$_%30]for 1..100'

※ あとでググって見つけたページ。自分の解答もかぶっててちょっと悔しかったです。(><)

6. YappoLogs: FizzBuzzのPerlさいたんきろくたっせい(34ばいと) (Yappoさんのwarn実装)

perl -le'warn((Fizz)[$_%3].(Buzz)[$_%5]||$_)for 1..100'

※ FizzBuzz at -e line 1. みたいな表示になるけど、hioさんの実装より1byte短くなる

7. Acme::FizzBuzz を使えば、これ最強

SET PERL5OPT=-MAcme::FizzBuzz # MS-DOSの場合
setenv PERL5OPT="-MAcme::FizzBuzz" # tcsh系の場合
PERL5OPT="-MAcme::FizzBuzz"; export PERL5OPT # bash系の場合

※ 環境変数PERL5OPTを使う方法はmiyagawaさんに教えてもらいました。

perl -e1

やっぱりPerl最強です。Ruby や Python でもこの最短記録を抜けるのかな?

anarchy golf - FizzBuzz #Language Ranking ではPerlを抜いてBashが1位で43byte、すげー。どんなコードなんだろうか。興味津々です。

トラックバック

この一覧は、次のエントリーを参照しています: FizzBuzz - Golf Challenge:

» ErlangでFizzBuss from Mi manca qualche giovedi`?
まあ Erlang 囓っちゃった以上、流行りものにはとことん乗っかっとけ!! ということで、とにかく一部巷界隈でとかく話題の FizzBuzz にチャレ... [詳しくはこちら]

» [ Python ] fizz-buzz テスト --- 邪悪編 --- from Fomalhaut of Piscis Australis
すさまじく邪悪なコードを追加しました。 それと、havana の突っ込みで最短のコードは 59bytes になりました。 たぶん、Python を使ったコ... [詳しくはこちら]

» FizzBuzz - Perl 使って50バイト from Kazuho@Cybozu Labs
1. 目指せ最短 (perl -eも含めて56byte) TAKESAKO @... [詳しくはこちら]

» FizzBuzzをPostScriptで ― コードゴルフに挑戦 from Project92 blog
なんか、すげー久々のエントリのようですが、気のせいでしょう……多分。 twitt... [詳しくはこちら]

» FizzBuzz - Golf Challenge(by harupiyo) from harupiyoの日記
FizzBuzz Golf Challenge という、Perl で如何に短く頑張れるか!というのがはやってるみたいです。 TAKESAKO @ Yet... [詳しくはこちら]

» FizzBuzzをPostScriptで ― コードゴルフに挑戦 from Project92 blog
なんか、すげー久々のエントリのようですが、気のせいでしょう……多分。 Twitt... [詳しくはこちら]

» FizzBuzzをPostScriptで ― コードゴルフに挑戦 from Project92 blog
なんか、すげー久々のエントリのようですが、気のせいでしょう……多分。 Twitt... [詳しくはこちら]

コメント

すみません。編集したときに複数トラックバックされてしまったようです。申し訳ありませんが、削除いただけると orz

Makoto Kagaさん、PostScript面白いですねー。トラックバックありがとうございました。

どうやら、これらしいですね~。

> seq 100|sed '5~5s/.*/Buzz/;3~3s/[^B]*/Fizz/'
http://jarp.does.notwork.org/diary/200705a.html#200705092

>yamagata21さん
おおおお。情報ありがとうございます!すげー。この発想はありませんでした。
awkじゃなくってGNU sedを使ってseqの結果を置換するのかー。目から鱗。

げげ、すみません、こちらのBlogの再構築中に余計なTrackback pingを2回も送信してしまいました。ごめんなさい、削除いただけると。

コメントを投稿