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;

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

No comments: