詳細
https://github.com/kik/ICFPC2011
インタープリタ
ゲーム中に存在する全ての値を
type value = | ValNum of int | ValI | ValSucc | ValDbl | ValGet | ValPut | ValS | ValSf of value | ValSfg of value * value | ValK | ValKx of value | ValInc | ValDec | ValAttack | ValAttacki of value | ValAttackij of value * value | ValHelp | ValHelpi of value | ValHelpij of value * value | ValCopy | ValRevive | ValZombie | ValZombiei of value
といった感じで、完全に記述できる型を用意するのが常識だと思っていたんだけど、まわりのコード眺めてるとそうなってなくてびっくりした。
最初のAI
https://github.com/kik/ICFPC2011/blob/d67edcf101921b1fe72f449799b479cc9c6d8a1a/src/kamaboko.ml
まず、全力で5000と10000を作る。5000で三回攻撃して255を倒す。
次に、255をゾンビ化して0を速攻で倒す。
ゾンビ化のコードを引数つき永続化版にする。
succ zombieを繰り返す
何もしないAIは650ターンで死ぬ。動くこと優先で書いたのだが、この時点ではかなり速かったらしい。
helpで倒すようにすれば256ターン減らせるので、すでに最速の2倍ちょいくらいにはなっていたらしい。