ICFP Programming Contest 2009 終了

ref: http://icfpcontest.org/
今回の課題はなかなか面白かったんですが、やっぱりやる気が足りなくなって脱落しました。
一応やったことの記録。思い出しながらなので適当。

  • 1 日目 3 時。起きて問題読み始める。物理だー。円軌道の問題までを自分内目標にする。
  • 1 日目 4 時半。とりあえず VM 作り始める。速度が重要そうなので C で書く。
  • 1 日目 7 時。どうしてもうまく動かない。
  • 1 日目 8 時。問題文に間違いがあった知る。うおおーそれだー。
  • 1 日目 8 時半。問題を解き始める。コントローラは Ruby で書く。VM とはパイプで通信。
  • 1 日目 9 時半。予想通り遅すぎたので VMRuby の拡張ライブラリにする。多少は速くなる。
  • 1 日目 10 時半。100x 。指定された軌道に乗せる問題。ホーマン遷移軌道で目標軌道に到達はするのだけど微妙に静止しない。確かこのころに飛廉さんのビューアがもらえる。
  • 1 日目 12 時半。100x は解けるようになった。
  • 1 日目 13 時半。200x 。円軌道の衛星にランデブーする問題。どう解くのか全然わからない。同じ方向に回転してればできそうだけど、逆回転はどうするんだろう、と悩む。
  • 1 日目 14 時半。与えられたサンプルステージに逆回転は無いと知る……。先に見ればよかった。
  • 1 日目 16 時。VM が遅いのが気になってしょうがないので、Scala に移植したり OCaml に移植したりして遊び始める。今思えばここが最大のタイムロスだったなあ。
  • 1 日目 18 時。Scalaコンパイラ遅すぎで試行錯誤できないし、OCaml はあんま覚えてないのと文法がうっとうしいので結局 C + Ruby に戻る。
  • 1 日目 21 時半。今更だけど 200x を解く。ホーマン遷移した先にちょうど目標衛星がいるようなタイミングを待ち続けるだけ。とにかく自分内目標は達成。
  • 1 日目 23 時。大会の Web サーバが落ちる。楕円軌道はさっぱりわからないので寝る。
  • 2 日目 9 時。よく寝たら楕円軌道の解き方を思いつく。いったんどこかの円軌道 Rb に一瞬だけ遷移して、それから目標衛星の軌道の近地点に遷移して、ちょうどそのとき目標衛星が近地点にいるように Rb を選べばいいんだ。もっといい方法があるかもしらんけど。
  • 2 日目 9 時半。現在の焦点までの距離と速度から近地点を求める方法がわからない。しょうがないのでシミュレーションして実際に回して調べることにした。遅い。
  • 2 日目 10 時。Rb を二分探索で求められるようになる。
  • 2 日目 11 時。3003 以外が解けたー。うれしい。
  • 2 日目 11 時半。3003 がどうしても微妙にずれて解けないし、一回走らせるのに 90 秒もかかって調べる気がしないので、一番目標衛星に近づいたところでホーミングするようにした。これで一応 300x が解けた。絶対無理だと思ってただけ嬉しい。大満足。
  • 2 日目 13 時。300x まで解けて気が抜けちゃって、遊びに出かけた。そのままフェードアウト。結局 400x (12 個くらいの衛星を回収しまくる問題) は全然取り組まなかった。


以下は感想。

  • 今年は飛廉さんと 2 人だったので、まったり。結果としてわかったことは、気合入れてやってもまったりやっても結果はあまり変わらないということ。
  • 今回の問題は、とにかく速い処理系 (C/C++ とか Java とか OCaml とか) で全部書くことが重要そうだったので、それはちょっとやる気しなかった。
  • それでも 300x くらいまでは楽しく参加できたので、いい問題だったと思う。
  • スコアボードの上位を見ると ICFPc 常連が多い気がする。軌道計算の専門家たちはどうした。ICFPc なんか見てないのか。
  • 400x 勝負になると思い込んでて、100x にのびしろがあるとは夢にも思わなかった。というか今でもやり方がわかってない。どうやんのー。
  • 元 kuma- のメンバーの pepusiso がとても健闘したようで、嬉しい一方でちょっぴり悔しい。でも入賞 (= 1 位) できるといいですね。


一応スクリーンショットを撮ってみた。

赤が自分。緑の衛星に 900 秒間ランデブー (1 km 以内に居続ける) すれば OK 。

ほぼ一周してからスラストして追いかける。

ひゅーん

遠地点で減速方向にスラスト。縮尺が小さいのでほとんど寄り添ってるように見えるけど、まだ結構離れてる。

近地点でまた減速して、若干ホーミングして緑の衛星と同じ軌道に乗せて終わり。