トップ «前の日記(2006-10-15 (Sun)) 最新 次の日記(2006-10-17 (Tue))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2006-10-16 (Mon)

[Ruby] 99 bottles つづき

ぱっとしないんで、恥ずかしいんですが、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 バイト。局所最適の罠につかまっているのは知っている。

  • 'downto(1)' はいかにも長い。
  • $, に空白をいれたらいろいろ削れないか?
  • ループの切れ目を変えたいのだが。
  • 関数定義 (def ... end) は本当に不利かなぁ。

しかし局所最適から抜け出す気力がない。 200 バイト切っているコードがどうなっているのか見たい。 (Perl でなら職場の先輩が、あっというまに 200 切ってしまった)

はじめに書いたコードから、何のひらめきもなく、 ただ、だらだらと等価書き換えを重ねてきただけですが、 それでも良い経験になった気がする。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声