ICFPC2014

http://icfpcontest.org/


いつも疲れてるからあとで書こうと思って結局書かないので今日のうちに書いておこう。

コードは、


何故か会社の人で毎年参加するという文化があったので@foota, @nabesan_tofu, @tomerun, @logicmachine, 私の5人で参加した。(その文化は公認になって宿泊費とかが会社から出るようになっている(宣伝))


なんかCPU仕様があって、そのCPUの上でパックマン + 敵のゴーストのAIを作れとかいう問題っだった。

まあ昔は趣味コンパイラとかしょっちゅう作っていたので序盤は完全に得意分野だった。ある程度動いたあとのAIつくりはほぼ@logicmachineまかせだった。

しかし感想とか見てると一日でコンパイラ書くのは普通のレベルに見えるな…


マシン仕様のめんどうな点としては、

  • ヒープメモリがconsしかない
  • consに対して破壊的代入ができない

で、cons/car/cdr だけで全部プログラム書くみたいな内容。


朝になるころには @logicmachine がアセンブリで二分木の読み書きを作っていた。破壊的代入無しの二分木のかきかえってそんな簡単に実装できるんだっけ…コード見たが読めなかった(今見てもよくわからない)。


lightning は…

https://onedrive.live.com/redir.aspx?cid=ecb59e566c2d71f1&page=self&resid=ECB59E566C2D71F1!4174&parId=ECB59E566C2D71F1!3550&authkey=!Alp6E3GNPHKNM7k&Bpub=SDX.SkyDrive&Bsrc=Share

だが、あんま覚えてない。



3日目(日本時間で)は…あんま覚えてないな…@tomerun がシミュレータを作ったのでそれに表示を付けて遊んでいたと思う。


@foota が作ったghostが強いという話になったので、僕もghost作りたくなって少し触ったが、レジスタとか考えるのが嫌になってコンパイラを作った。3日で二回 parse.y を書く機会は多分二度と無いだろうな…(まあ半分くらいコピペだけど)


さすがにコンパイラを作るのに飽きたのでシミュレータに人間入力機能を付けて遊んでいた。



4日目(今日)は…@logicmachine が作ったJavaScriptのシミュレータでは動くプログラムをジャッジシステムに投稿すると、動かないという話題になって、まあ、もうあのコードは僕には読めないようになっていて、あまり手伝える状態でもなかったので、かわりのAIでも作ろうかと思って少し手を出したが難しいと思いました。(こなみかん)

ジャッジシステムは出力がスコアしか無いので、@logicmachineは右に動いてスコアが入るか入らないかだけで判定してデバッグしていたらしい。結果はジャッジシステムのバグで、2 * (1<<31) が、0 ではなくて、INT_MAXになるという挙動だったらしい。あれHaskellってバグらないのではなかったの?

http://icfpcontest.org/game.htmlHaskellJavaScriptに変換するghcjsで実装されているのだが、これがクッソ遅いのとあわせて、今後Haskellerを煽る素材として使っていきたいと思った。


まあ問題はわかったので(結局ジャッジシステムは修正されなかったけど)、自作lambdaman AIは捨ててGhostを書いていた。それなりに良い結果になって最終提出物になったので、ゴーストコンパイラはこの一回しか使わなかったけど作った甲斐があった。


多少調整してたら時間終わった。最後の調整は、なんか、良くなったか悪くなったかよくわからない感じになって、手応えとしては、なんかふわふわした感じの手応えで終わってしまった。


まあ問題はゲームっぽい見た目だったし、前半は得意分野だったから、楽しかったかなと思う。


あといつもと違って3日目も生きていた。