ICFP Programming Contest 2011

http://www.icfpcontest.org/
今年も出てました.binzumeとkstm.orgの後輩二人と出てました.
僕の書いたものほぼ全部: http://f13g.com/icfp2011/
チームが提出した物は
http://www.binzume.net/diary/
にupされるはず?

前日

夜にsang0が到着.交通費が往復で3万とからしいので,食事代は払うよとかそんな話を酒を飲みながらしてた.

初日

寝坊した.
とりあえず急いで問題を読んでシャワーを浴びていたらbinzumeとgoto君も着たので皆で分担を話しあう.

チームで出るのは2回目で,1回目は僕がメインでコードを書いた感じだったので,今回はサブっぽい感じでいいかなとか.
結局はplayer同士の対戦をしてratingのグラフを書くcgiとかを担当.
終わってから考えると,このcgiを書いていた時間は相当無駄だった気がする.
実装も簡単すぎて,気持ちも盛り上がらないし...

で,binzumeとsang0が頑張ってplayerを実装しながら,goto君がLTGのシミュレータの実装を始める.
cgiの基本的な実装が終わったので,binzumeとsang0と一緒にコンビネータわからんとか言いながら色々考えていた.
S(K(f))(g)(a)とかを見つけたのもこの辺だったけれど,問題文に書いてあったことに大会終了後に気付いた.まぁ,他にも色々.

夕飯後シミュレータがどんな実装か気になったので,後ろから覗いていたら怪しかったので色々質問してみたら,ちょっと怪しい気配が...
シミュレータはどう考えても必須なので,僕も別に実装することに.
終電前にbinzumeとgotoくんは家に帰った.
シミュレータは深夜にはほぼ完成したので,sang0とbind2ndを作ったりしてた.
あと,対戦スクリプトのログが50GBとかを超えてて,vmware用のディスクがいっぱいになった.ひどい.

二日目

思ったよりも早く目が覚めた.2度寝しようかとも思ったけど起きることに.
Windows UpdateにWindowsマシンが殺されたので,vmwareも止まっていたけれど自動リジュームか何かが働いたらしく,screenのセッションとかが残っていてすごいと思った.
binzumeが来る前にはほぼ./ltg only相当のものと

cout << (succ(succ(zero)) << endl;  // 2

が動くようになっていたので,binzumeが来てからはPlayerの開発に使えるようにいじくっていた.
一仕事終わった感を満喫しながら,cgiへの要望を消化するヌルい仕事をしつつ,またSKコンビネータと戯れる.

C++が恋しくなった辺りでS(K(f))(g)(a)を毎回書くのが面倒な問題を解くために,コードを書く作業に戻る.
gotoくんは夜は帰った.僕は3時過ぎくらいに寝た.

三日目

めっちゃ早く目が覚めた.みんな寝てたので玄関でコーディング.
昼前にはslotに入っている関数へ任意の引数を渡すコードが書けたので

replaceSlot(0, get)
callSlot(0, 100)  // get(100)
// とか
replaceSlot(0, attack(0)(1)(10000));  // attack(0)(1)(10000)をslot0で実行

ができるようになった.あと,スロットに入っている関数を任意の関数の結果を引数として呼べるようになったので

replaceSlot(0, addTrigger(attack(0)(get(1))(10000))  // トリガ付ける
 // 
callSLot(0, zero) // トリガ付き関数にzeroを入れて発動

とかも簡単にライブラリを使って書けるようになった.
色々簡単になったので,この時点でPlayerを一つも書いてなかった僕も簡単に

for(int i = 0; i < 128; i++) {
  replaceSlot(i*2, i, 8192);
  replaceSlot(i*2 + 1, i, 8192);
}

とか作れて嬉しかったです.

この後は大会終了までずっと対binzume用のPlayerの実装をしていたけれど,残念ながらあまり強いplayerは実装できなかったです
あまり凝ったことを考えずに,シンプルにやったほうがよかったかな.

9時まで起きていられなかったので,8時すぎ位に寝た. 起きたあとに夕飯で焼肉.

まとめ

今年の問題はすごく面白かった! 去年みたいに難しすぎることもなかったし,昔作ろうとしていたゲームのうまくいかなかったコンセプトが,すごくよくデザインされてて,ちょっと悔しかった.
あと,ltgのバイナリが提供されていたのは,処理系の実装めんどい...という人達も一応遊べるけれど,がんばりたければ自分でも実装しなきゃいけないという感じで,バランスがいいなぁとか.
ただ,vmwareとかDebianのインストールはめんどうだったかな(Windowsの環境だと #!/usr/bin/ruby とか書いても当然動かないし...)

あと,ほとんどの時間を裏方っぽい仕事をずっとやっていたけれど,こういうのも楽しかった.
全然チームの提出したplayerの動きを知らないとかは悲しいですが.

反省

  • cgiとか書かずにシミュレータをいきなり書くべきだった.
  • もっとチームメンバの間で知識やライブラリの共有とかをがんばるべきだった.
    みんな自宅のリポジトリにコード入れるとかひどすぎた.
    ただ,一人でICFPに出ると後半のことを考えずに,しょぼい最適化を繰り返す悪い癖があるのだけれど
    今回はbinzumeがplayerの実装をしている間に,地道な作業ができたのでよかった.
    一人だったら,シミュレータが必要とわかっていても,それ無しで1日しょぼいPlayerを作り続けたんじゃないかな.
  • 本気でコードを書くのは楽しいなぁとか感じてしまったので,日頃の生活を見直すべき.
  • 友達用の机とか布団が必要
  • おー生きてたんだねえ(^^; -- 岡本智博 2011-06-21 21:04:38 (火)
  • いきてるよー 鯖は死んでた -- Naoki 2011-09-03 15:45:45 (土)

お名前: