Saturday, October 23, 2010

コードの短い人

Project eulerで、他の人のコードを見ていると感心することがあります。

私がC++で30行ばかり消費していることろで、この人は10行くらいでやっているのですな。

まず、数字ばかりからなる集合の操作をしたい箇所。私はC++のsetをつかって
a.insert(x); 

として、後でaの要素をカウントしているところを、配列で
b[x] = y;

とするのです。yはゼロでない適当な数字。集合集合と思っていると頭が固くなるのかもしれないなあ。頻度のグラフを作るようなときにはこうしますからね。b[i]がゼロでないものを集めれば、これが求める集合。

もう1つ、私が
for(i=10;i>=0;i--)

とやるようなところで
for(i=10;i--;)

と言っている。これは嫌だなあ。でも短い。しかも正しい。

a[i] = b;
if (b > 0) {
r += 1;
}


と言うようなところを
r += (a[i] = b) > 0;

と言っている。これも嫌だなあ。しかし、なるほどねと感心。

「線形代数とその応用」

学生のころ、つまり20年くらい前、赤門の前の古本屋で見つけた本。工学部の学生の私としては、抽象的な説明に辟易していた線形代数が具体的で楽しかった。

誰が書いたかなんて考えたこともなかったけど、ホームページがあるのね。
http://www-math.mit.edu/~gs/

この本です。まだ売っているんだと感心。