〜2007年9月中旬〜
昨日が164、今日が177。結構見てるんだなと思った。
Gmailだのfastladder等は含まれないから実際はもっと多いけど。
実際問題ローカル変数fooってのはありえないよね。
foo = (foo == nil ? 1 : foo + 1)
というのが気に入らないらしいが、
これはあらかじめfoo = nilとしないと初出のfooの参照でNameErrorになるはず。
と思ったら先にfoo =があるから初出にならないのか。おもしろい。
いやいややっぱ変だな。インクリメントするのはループの中とか、
メソッドが呼ばれるたびにとかそういう使い方になるはずで、
ループだったら先にfoo = 1しとけばいいし、
メソッドだったらそもそも
それならinitializeで= 1しとけばいいわけで、
やっぱどういうとこで使われるのかよくわからないな。
initializeが面倒ってのはあるかもしれないが。
どうでもいい話ではあるが
foo = foo + 1 rescue 1
なんてのを思いついた。rescueは値を持つというのは意外と知られていない。
なひさんにそそのかされてmeeboを使ってみる。
会社からはぶちぶち接続が切れてsignupもままならず、
家に帰ってやっと使えるようになった。
ここまで作り込むかー。
自分で出題しておいてなんだが、やっと250Bを切ったくらい。
あと1週間あるしのんびり縮めていこう。
牛乳を買うの忘れて思い出したので登録。
なかなか面白いUIだなあ。
とりあえずヘルプを読むタスクを追加した。
1バイト追い付けないなあとずっと思っていたが、改行がこんなとこに。
231Bまで来たがもう縮みそうもないので、別解を考えたらすぐに縮んだ。
世の中こんなもんか。
サビは本物よりもいいと思った。
考えれば縮まるもんだな。200Bを切るには時間がもうないか。
1.8でもそりゃ動くよねってはいいとして、golfなら
new = arr.enum_slice(2).to_a
でもまだまだで
new = *arr.enum_slice(2)
のように*を使う。
% irb >> require 'enumerator' => true >> arr = [1, 2, 3, 4, 5, 6, 7, 8] => [1, 2, 3, 4, 5, 6, 7, 8] >> new = *arr.enum_slice(2) => [[1, 2], [3, 4], [5, 6], [7, 8]]
つまりa.to_aよりもa.mapやa.zipなんだが、さらに[*a]のほうが短い。
毎日飽きもせず縮めてるわけだが、今日はmapじゃだめだということがわかった。
いや、
さっき書いたのとは別の話ではあるんだが。
なんとなくputsとmapだろうと思ったらやっぱりそんな解が上位に。
そうだよなあ。nilをはさめばいいんだよな。
あと思い込むと単純なことに気づかないもんだなと。
今回の収穫はmapよりも*でjoinのほうが短い。
Fedora 7ならyum install bsd-gamesで。numberは数を英語で教えてくれる。
ちょっと余計なもんが多いんだけど、
% number 0 1 99 100 zero. ... one. ... ninety-nine. ... one hundred.
という表示結果になる。
いろいろうささんとやりとりしてるうちに
% number {0..100}|sed -n 'y/-/ /;/^[a-z]/s/\.//gp' % number -l {0..100}|sed -n 'y/-/ /;/^[a-z]/p' % number -l {0..100}|sed -n 'y/-/ /;/^\./!p' % number -l {0..100}|sed 'y/-/ /;/^\./d' % number -l {0..100}|sed 'y/-/ /;/\./d'
こんな感じで短くなっていった。
最終解はさらに2B短い35Bだが、
微妙に
odd linesの解なので自重。
実はゴルフ場にnumberがなくて泣いた。
あればCommon LISPに余裕で勝てたのにー。