ICFP PC 2009

ICFPコンテストに某チームで参加しました。

ある種のVMの仕様とそのVMで動く軌道シミュレーターのバイナリが与えられてて、人工衛星を操作してある軌道に乗せる等の問題を解いてく。VMの仕様にプログラムカウンタ操作命令なしのSSA形式っぽい仕様で軌道計算してるのは結構面白い。

100xと200xと3003を除く300xまでクリアしたところで力尽きた。
資料にあったとおりに100xは2インパルスのホーマン遷移、200xは3インパルスのホーマン遷移でさくっと。
300xは悩んだけどスマートなやりかたはわからなかったんでとりあえず力技。まず円軌道に遷移して、さらに200xの方法でターゲットの近日点を通る円軌道に遷移、そっから1週した後ターゲットと近日点でランデブーできる楕円軌道が見つかるタイミングまでぐるぐる。
400xは月を回ってるデブリがあった時点で折れたんだけどどうすればよかったんだろう?

スコアボード止まってるけど順位二桁に食い込めるといいな。
後半のスコアの配点が大きかったんで途中で止めたけど、100xのスコア計算あれでいいのか?残り燃料0に近いほどスコア高いよね。

チームの5人がそれぞれ各自でVMC++版*2 OCamlSchemeJava版をつくるというすばらしすぎるチームワークを発揮した。さすがUTMC、手段のためには目的選ばない。
情報共有しつつ各自それぞれやってる感じだったけど、まじめに高スコアめざすならVMとツールとユーティリティとロジック分けるべきだな。

VM部分は数時間くらいですんで、後はひたすら軌道計算ってコンテストだった雰囲気が。あまりよく知らないけどBLASみたいなの使えるようになっとくべきなのかも。