ICFP2009 Programming Contest

http://www.icfpcontest.org/
年に一度のお祭り・ICFP Contestでしたよー。
が、けっこう心待ちにしていたはずなんだけども、あまり好きなタイプの課題じゃなく、どうも気分が乗りきらず途中で投げ出してしまった。へちょい。コンテスト72時間中の実働は15時間くらい?
以下やる気のない参加記を。

1日目

  • ねぼう
  • 問題を印刷して読む
  • 人工衛星を制御して、軌道に乗せたり他の衛星とランデブーさせたりスペースデブリを回収したりする課題らしい
  • でもシミュレータのVMがどうのとか問題文に書いてあることがよくわからない。何を作ったらいいかわからない
  • 2時間くらいじっくり読む
  • ああ、わかった。
    • 人工衛星軌道シミュレータの実装がバイナリ命令列で与えられる
    • まずそのバイナリを動かすVMを作る
    • VMと通信して人工衛星の現在位置や速度変化指示をやりとりする
    • アルゴリズム使ってうまく人工衛星を制御する命令を考えろ
  • ってことね
  • さくっとVMを実装。バイナリ仕様は問題文に書いてあるからまあ単純作業ですな
  • 単純作業とか言っている割にいろいろバグって2時間くらいかかってしまった
  • 一番簡単な1000番台の課題(円運動している人工衛星を他の円軌道に載せる)をやる
  • 解法は問題文にヒントが書いてあるからそのままやればOK
  • やっぱりバグって上手く動かない
  • 軌道のビジュアライザ作る
  • Swingが動かん。たまにしか書かないから書き方がよく分からないのだ
  • いろいろ調べて2時間くらいかけてなんとか動いた
  • 座標を逆さまに見てて逆噴射してた。なんとありがちな
  • それでもなんか変…?

2日目

  • なんか変だった原因は、目的の軌道をキープするのは900秒間でいいのをタイプミスで9000秒になってたせいであった
  • そこを直してようやく1000番台クリア
  • 次、2000番台を(円運動している人工衛星を、別の円軌道上にあるもう一つの衛星とランデブーさせる)
  • 相方がちょうどいい位置に来るのを待ってから、1000番台と同じ方法で円軌道間を遷移させればいいだけじゃないのか?
  • やってみた
  • 衛星の飛ぶスピードが数km/sあるから、シミュレータの時間分解能1秒じゃ1kmの精度(ランデブーの条件は1km以内の距離を保つこと)で制御できないじゃないか
  • けっこう誤差もあるし
  • まあ適当にスピード上げたり下げたり調整するコードを書けばいいんだろうけど
  • うおーめんどくせー
  • 手作業チューニングはなんか空しいしなぁ
  • スコアボードも上位20チームしか出てないのでモチベーションが上がらない
    • あとで全参加者分が見えるようになっていた
  • 打ち切り

感想

  • GUIむずい
  • 誤差嫌い
  • NASAすごい
  • せっかくだからビジュアライザにもっといろいろ機能を付けて遊べばよかった。アニメーションとか、拡大縮小とか

画像

こんな感じ。