今回のコンテストのメンバー画像?

ちゃんとプレイした2チームくらいによると、この画像は見てなかったらしい。どうやったら出てくるのかしら。

http://shinh.skr.jp/dat_dir/icfpc_members.png

ちなみに私はヒントはバギーなプレフィックス喰わせて、 RNA の bitmap 関係の命令を全部殺して結果を眺めて探してたとかいう噂。上記のは ICFP とか喰わしたら出てきた。

ICFPC2007

終わり。うーん疲れた。点数は 608964 。答えのサイズは 97984 。生存率 30% ちょいだと。守れなくてごめんよ遠藤さん。余裕で 15 位入りおめでとう俺。 15位入りした他の人々もおめでとうございます。まぁ実は今日ほっとらかしておいたとしても 16位だったらしい。

最後の絵。どう見ても遠藤さん生きてない。

http://shinh.skr.jp/dat_dir/endo.png

一致してる部分は黒くなる。電車と吹き出しは難しいんだよ…遠藤さんのわっかは時間があればできたはず。やるべきだった。これは心残り。

http://shinh.skr.jp/dat_dir/score.png

えーとなんか初日は DNA がバグりまくっててメゲてて。二日目は DNA がバグっててさらに遅くてめげてて。あまりに 28B が見つからんから、 DNA の実行待ち時間中に与えられた DNA は全て無視して RNA をそのまま書くようなコードを書いていった。そのままガリガリ絵を描きつつ DNA のバグフィックスしたりしてた。したらまぁ DNA が動くようになって適当に拾ったヒントをかけつつ絵を描いてたら、ちょうど 28B の記録を破れた時に 28B を見つけた。

28B の方を解析するのが正着なんだろうなーと思いつつ何していいかよくわからんかったのでもうそのまま手作業で突っ走ることに。だいたい DNA インタプリタが 2時間とかかかる非常にダメなできだったし。 RNA インタプリタはうちのデータに対して当時 1分くらいで最後は 4秒くらい。

で、ひたすら突っ走った。最初の方に書いた DNA で RNA を圧縮するコードがよく働いてくれた。最近 Quine 書いてたのが役に立った感じ。

Brainstuck

スタック言語の最小言語ってどんな感じかなぁと考えていて以下のような言語を考えました。

+ => スタックトップに 1 を足す
- => スタックトップに 1 を引く
0 => スタックに 0 を積む
: => スタックトップを取り除き、その値の深さの値をスタックに積む
. => スタックトップを取り除き、その値を標準出力に吐く
, => 標準入力から 1Byte 受け取り、スタックに積む
[ => スタックトップを取り除き、その値が 0 なら対応する ] の次にジャンプ
] => 対応する [ にジャンプ

説明が必要なのは : だけでしょうか。 0: がスタックの一番上をコピー、 0+: でスタックから二番目の値をコピー、です。

実装はほとんど BFI.c です。

http://shinh.skr.jp/obf/BSI.c

diff はこれだけ。

--- BFI.c       2007-07-14 09:15:25.000000000 +0900
+++ BSI.c       2007-07-14 09:15:07.000000000 +0900
@@ -76,20 +76,20 @@
       else if (p[pc] == 45) x[xc]--;

       // '.'
-      else if (p[pc] == 46) putchar(x[xc]);
+      else if (p[pc] == 46) putchar(x[xc--]);

       // ','
-      else if (p[pc] == 44) x[xc] = getchar();
+      else if (p[pc] == 44) x[++xc] = getchar();

-      // '>'
-      else if (p[pc] == 62) xc++;
+      // '0'
+      else if (p[pc] == 48) x[++xc] = 0;

-      // '<'
-      else if (p[pc] == 60) xc--;
+      // ':'
+      else if (p[pc] == 58) x[xc] = x[xc-x[xc]-1];

       // '['
       else if (p[pc] == 91) {
-        if (x[xc] == 0) {
+        if (x[xc--] == 0) {
           pc++;
           while (l > 0 || p[pc] != 93) {
             if (p[pc] == 91) l++;

たぶんチューリングコンプリートですよね。しばらく少し考えてみようかと思います。

あまりやる気のない Hello, world!

++++++++++++++++++++++++++++++++0:++++++++++++0:++++++++++++++++++++++++++++0:.
+++++++++++++++++++++++++++++0:.
+++++++0:.
0:.
+++..
0:.
+0:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0:++++++++0:+++0:++++++++.
0:.
+++.
.
.
.

echo

0+[,0:.+]

都内有数のゴルフ場は復活してます

http://golf.shinh.org/

アナウンスしろと言われたので アナウンスしました。

Have ふぁん。

あと昨日の w3mcooksrv は微妙におかしいぽいので修正する。

あと時差ボケ対応のコツはどうせほっときゃなおるので気にしないことだと思う。

w3mcooksrv

なんか複数w3m でクッキーの情報を共有したいと思うことが多々あります。特にブラウザ終了時に expire する種類のクッキーが。で、 w3mcookie 情報を保持しておくサーバを書きました。

http://shinh.skr.jp/dat_dir/cooksrv.patch.gz

えーとパッチあてて ./configure して make して make w3mcooksrv して、あとは w3mcooksrv を適当にどっかで起動しとけばいい気がします。なんかライブラリオプション足りない気もします。適当。あとソースコードがすんごい適当なのは仕様です。

通信手段は Unix domain socket です。普通の socket だと他のユーザーがクッキー見れちゃってイヤンだと気付いたので。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h