2010-06-18 (金)
*ICFP Programming Contest 2010 0日目
今日のGMT12:00(日本時間だと21時)から72時間のICFPのコンテストが始まります.
数年間やってみて感じたICFPのコンテストの特徴を書くと,
- 問題が公開されたから,72時間でより良い物を作る
- チームでやってもいい.今年は人数制限無し
- 最初に見えている問題の説明が全てだと思わない方が良い
- 速度自体は求められないが,遅いコードは試行錯誤するためには致命的
- 英語
な感じです.
関数型言語の学会が,「最強の言語」を決めるために開催しているコンテストなので,優勝すると,その時使った言語が一部界隈で「最強の言語」として認められます.
ICFPは関数型言語の学会ですが,使用言語は何でも良いので,好きな言語で参加すれば良いとお見ます.ただ,若干Haskellとか有利な問題が出たりもしますし,スクリプト言語だと,結構頑張って書いても1回の試行に数時間かかってしまいそうできついかも.
検索すればすぐ出てきますが,過去のコンテストの内容を以下に.
2009
去年は有休取れなかったので2日だけの参加でした.
人工衛星を制御して,なるべく少ない燃料,時間で指定された軌道に乗せたり,軌道上を回っている物体にランデブーするためのエンジンの噴射パターンを求める問題.
まず,与えられた人工衛星のプログラムを動かすためのVMを作るところからスタート.ある時間の色々な座標が分かるので,そこから軌道を予測したり,試行錯誤.最初は物理の問題で,その後は誤差と戦い.最終的には時間との戦い.
途中で,月の重力の影響も受けることが分かった….
2008
火星上の車(ローバー)を制御して障害物と火星人(!?)を避けて目的地にいかに早く到達するか.
近くしか見れないので,地図を作りながら安全で最短な経路を予想する.socket経由でサーバに接続してローバーを制御.なのでレイテンシがある.
迷路みたいな入り組んだ地形にも対応できるように作ったけど,結果発表で公開されたマップ見たらそんな地形は無かった.
2007
DNAを維持ってEndoさんを救う.
EndoさんのDNAである文字列をプログラムに見立てて処理するとRNAが作れる.RNAは画像を生成する描画データになっているので,処理すると瀕死のEndoさん.DNAになるべく少ない修正をして,Endoさんが生存できるようにする.
C++で普通に書くとRNA生成に数時間かかるので,適したデータ構造を考える問題.線形時間未満で実行できる文字列のsubstrとappendが必要.Haskellずるい.
2007
umix.
VMを作って実行するとunixもどきが立ち上がる.ギリシャ数字を使ったBASICとか,見たこと無い言語のソースとかが入っているので実行してヒントを得て,アカウントをクラックしたりする.真面目にクリアしたくない,難解なアドベンチャーゲームとかも入っている.