海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
ぱっとしないんで、恥ずかしいんですが、puts 使うより print にリスト喰わせた方が短いのではないかと。
b,c=' bottle',' of beer' 99.downto(1){|i|print i,a=i>1?b+'s':b,g=c+' on the wall',', ',i,a+c,".\n",i>1?['Take one down and pass it around, ',i-1,i>2?a:b,g,".\n\n"]:"Go to the store and buy some more, 99#{b+'s'+g}.\n"}
217 バイト。
あと、激しく既出っぽい 感じもしますが、カンニングで 103 バイトというやつ。 ただし、これは反則としてはじかれるみたいだ。
require"open-uri";puts open("http://codegolf.com/competition/output/99-bottles-of-beer").read[5,11750]
プログラムの構造を変えないと、もう大幅には縮まないと思っているのですが、それでもちっとは削れたりする。
b,c=' bottle',' of beer' 99.downto(1){|i|print i,a=i>1?b+'s':b,g=c+' on the wall',', ',i,a+c,n=".\n",i>1?['Take one down and pass it around, ',i-1,i>2?a:b,g,n]:"Go to the store and buy some more, 99#{b}s#{g}.",$/}
213 バイト。局所最適の罠につかまっているのは知っている。
しかし局所最適から抜け出す気力がない。 200 バイト切っているコードがどうなっているのか見たい。 (Perl でなら職場の先輩が、あっというまに 200 切ってしまった)
はじめに書いたコードから、何のひらめきもなく、 ただ、だらだらと等価書き換えを重ねてきただけですが、 それでも良い経験になった気がする。