Excess3 & binary increment
Excess3
not さん作の問題。not さんは、いつもいい問題をつくるな。
C
C は 65B でトップを取れた。以下のコード。
i;main(c){for(;read(i%=4,&c,1);)putchar(c<11?c:c+3>>i--+3&1|48);} i;main(c){for(;read(i%=4,&c,1);)putchar(c<11?c:c+3>>3-i++&1|48);} i;main(c){for(;read(i&3,&c,1);)putchar(c<11?c:c+3>>--i%4u&1|48);}
read() に渡すファイルディスクリプタが、0, -1, -2, -3 を繰り返し、4 回に 1 回、0 の時だけ読めるというもの。今までも、何度か出てきた変態テクニックだ。ただ、このおかげで、上記 65B のコードは、妙にきれいで読みやすくなっている。2つめと3つめはバリエーション。もう 1B くらい行きそうでいろいろ試してみたがだめだった。
JavaScript
xulapp さん@67B。xulapp さんは、かなり強い。かなわない。
for(;;print(t))for(s=readline(t=i='');n=+s[i>>2]+3;)t+=n>>3-i++%4&1
この解も、s[i>>2] として、1 文字を 4 回ずつ処理しているところが絶妙。
7/26追記
s[i>>2] の部分は、文字列をすべて処理しきると、undefined となる。それに、+ をつけると、NaN になり、さらに、+3 しても、NaN なので for ループが終了するということか。このへんって、なかなか思いつけないな。すごい。
binary increment
C
だいぶ考えて、inaniwa さん@69B に追いつくことができた。この問題は、読み込んだ文字列の末尾から、順に最下位ビットを反転していき、最下位ビットが立ったら終了すればよい。しかしながら、この条件が短く書きにくい。
for(;!((*--p^=1)&1);) for(;(*--p^=1)&1<1;) for(;(*--p^=1)==48;) // 48 は '0' の文字コード
などが考えられるが、ちょっと長い。しかも、問題の中にはいくつか、全すべての数字が 1 のものがあり、そのケースでは、buffer overrun (underrun) をおこしてしてしまうため、
for(;(*--p^=1)-49;) // 49 は '1' の文字コード
と書くこともできない。結局、たどり着いた答えは、
for(;(*--p^=1)%7;) // '1' の文字コード 49 が 7 の倍数のため
だ。ただ、これは、かなりきわどい動きだと思う。特に、buffer underrun が起こるケースでは、最下位ビットを反転した結果が 7 の倍数であるような数(バイト)が無いと for ループが止まらない。当初、私は、buffer を bss に取っていたので、underrun すると 0x00 しかなく、最下位ビットを反転しても 7 の倍数にならないため、うまくいかなかったが、buffer をスタックに取るように変えたら、最下位ビットを反転すると 7 の倍数になるバイトが適度にあり、うまくいった。スタックはアドレス値が入っている可能性が高いので、適当なバイトがたぶん 1/7 程度の確率で存在しているのだと思う。
しかし、こんなきわどいロジック、inaniwa さんよく思いつくなぁ、と思っていたが、解答が公開になってみたら、上位4人はみなこのロジックを使っていた。ある意味、おかしい(変態的)と思う。
sed
sed はあまり本気でやるつもりはないのだが、奥が深く面白い。以下、トップ narb さんの 33B 解だが(若干見やすく変えてある)、一番後尾に 'a' を付け加えて、0a なら、1 に、1a なら、a0 に置き換えることを繰り返している。
s/$/a/ : s/0a/1/ s/1a/a0/ t s/a//
例で見てみると、
10111a 1011a0 101a00 10a000 11000
となる。見事なアイデアだな。
〜〜〜〜〜
さて、問題を2つ作成した。Output Sequence と IQ Test。
IQ Test はちょっと難しすぎたかな。でも、すでに、xulapp さんが、JavaScript で 99B をたたき出している。この問題は、問題・解答を作るのも、それなりに手間がかかった。
Output Sequence は、not さんが、113B@C か。なかなか追いつけないな。JavaScript はもう少し縮むだろう。たぶん、95B はいくと思う。
〜〜〜〜〜
ところで、最近、wikipedia に Code Golf が載ったようだ。そのうち、anarchy golf 場もリンクされるだろうか。