ICFP Programming Contest

わーいなんか2位らしい。第一報ありがとうございます。ずっと見間違いを疑ってましたがビデオ見たので間違いない。1日なんで勝ったのか不思議だったので考えてたので、勝てば官軍ということで、勝因について書いてみます。

いやこれは運だろう…正直なところ、最後のラウンドに残ってた、ってとこまでは、死亡する率を減らす的な意味でプログラムの良し悪しも影響したかなぁ、とか思うんですけど、最後のラウンドはまぁ、一発勝負っぽいんで運が強いでしょうねえ…最後のラウンドまで残っていた、という意味の方も、まぁ運悪く火星人三回連続当たった事件とかありえるでしょうし…

  • メタゲーム

これも運みたいなもんですが、なんかこう、詳しく見れてないですが、あまりに期待通りの問題だったんじゃないかなぁと思います。迷路はまぁややこしいのはだいたい無理、っていう感じで良しとしてたんですが、時間がかかるマップだと、たまたまそのマップだけ解ける子とか、みんな頑張って死んでいく中その場をぐるぐる回って死亡だけを避ける子とか、そういうのの要素で評価が運に強く依ってしまう、というような理由から、まぁとても複雑なのは来ないのではないか、そう読み切っていたのです!

いや、実装できなかっただけなわけですけど!!

でまぁ地道に配布された簡単なマップと、それをいくらか難しくしたようなマップ、あとちょっとした迷路、みたいな感じのアベレージを上げるように練習してたのはぴったりだったんじゃないかなぁと思います。やっぱメタゲームというか運。

あとまぁ最後のマップが、これもうモロに得意分野だよなーってマップだったと思います。これスイスイ解くために3日間コード書いてた感じだったように思う。そういう意味でOzyさんの予想とかはすごくあってたんじゃないですかね。どっかで見た、サンプルにあった spiral.wrld を3倍のサイズにするとだいぶ難しくなる、みたいな発言を見て、それで練習してたのもほどよい難易度だったように思います。

あと遅すぎると火星人に当たる可能性高くなるし、まぁあんま安全方向に倒しすぎるのも簡単なマップでヤバいよねー、ということで、まぁそのへんカンでバランス取ってたわけですけど、そのへんもたまたまうまいこといってたんじゃないかなぁと思う。レベル低くて勝てた的なのはどうしても否めず。

まぁこの2つがメインかと思います。

全然技術的な要因じゃないので、まぁなんか技術ぽいこと書いてみると、

  • rewind and replay

そういえば他の人の話を聞いていて、そいや他の人これ実装してるって話あんま聞かなかったなぁと思い出しました。ネトゲとかである以下のような話。

http://www.pyramid-inc.net/lab/archives/108#more-108

要はクライアントにサーバから状態が届く時には、サーバの状態って進んでるんだから、ちょっとリプレイしてやらないと up to date ではないよねーとかいう話。いかにも関係なさそうだなー。

  • latency

それと少し関係しますが、これ結構遅延発生するよなーというのがありました。ネットワーク越しは無いにしても、実行サーバのビジュアライザのオンオフで結構結果変わっていたので、ネットワーク越しかつビジュアライザつきとかいう感じで、結構 latency ある状態でやってたのは割と良かったかも知れないし、あんま関係なさそうだなぁ。

あそう、irori 先生の指摘で思い出したんですが、長いGCのある言語が不利そうだとは思った。 PFI のがえらい速い段階で危険を察知して減速開始してたりしたけど、そのへん関係して安全圏を余裕見すぎてたんじゃないかなぁ的な。ビジュアライザでは危険に見えてもまだまだ余裕だったりするしなぁ。将来は例のごとく夢いっぱいみたいですが、 Haskell の今の GC ってどうなんでしょね。

  • ビジュアライザ

これは良かった。ホント良かった。これ無しでたくさんあったバグとは戦えなかったと思う。必要だと感じたらさっさと書くべし。

  • ゲーム書いてた

やってる最中は俺結構ゲーム書いてたはずなのに、こういうのダメダメってダメだなぁ…とか思ってたんですが、まぁ他の人もほどほどにハマってたみたいですし、まぁ関係あるのかも。なんか他の人のを走らせてみると、なんかなんとなく穴に特攻するみたいなのが結構あったような。このへんに書いてた。

まぁとはいえ、技術的なのはどれもそんなに関係なさげに思う。

あとごく個人的な要因は重要なのがいくつかあって、

  • よく寝た

マイペースでよく寝たと思う。普段以上に寝てるくらいの勢いだったと思う。

  • ガソリン控えた

例年よりは呑んでなかったと思うよ…なんか大丈夫かって記述があるけど。まぁ有給取って一人デスマにゴーとか呑まずにやるもんじゃないよな。

  • 今日こそはアドホックな修正を楽しみすぎないこと > おれ

この自戒は我ながらとても正しいと思う。

  • きちんとバグ潰した

細かいとこで不審な動きを見たら何時間もかけて追ったりしたけど、そいうのは割と必要だったんじゃないかな。

  • 最初から最後までやる気をほどほどに持続させた

途中でめんどくさくなる瞬間があるよねという。どうせ勝てねーしやめるかみたいな。

このへんは来年も実践したい。

  • そのほか

ビデオで見るに、 kstm.org も 12 位くらいに読めました。おめでとうございます。

賞金や旅費 は今回の私に関しては無くても良かったのですが、偶然だろうとこんなことでも無きゃ偉い学会とか行けること無いから、せめて事前に来てもいいよと教えてくれてればなぁ…というようなことは思いました。万一、名前見てなんだコイツどこの人間やねん呼ぶ金ねーぞ、って感じで2位に連絡やーめた、とかだと結構悲しい。まぁ行けたかは知らんですけど。

まぁなんにせよ5年ほど一人で参加してて、どう考えても運ぽいとはいえ素直にとても嬉しいです。あちこちでおめでとう的なことを書いて下さった方々ありがとうございます。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h