TopCoderやってみた

topcoderのSingleRoundMatch(SRM)という週1回、1.5時間ぐらいの小さなプログラミングコンテストに参加してみました。得点が違う3題が出され、それらにそった関数を作ることで時間に応じた得点(rating)がもらえます。賞金はあるらしいですが、多分かなり上位じゃないと無理っぽいです。

TopCoderの様子

頭の体操のために参加してみたなーと1月ぐらいから思っていました。でもC++やったことなかったので、躊躇していて、この前のg86合宿でC++本をざーっと読んだので参戦してみました。気づいた事をメモ。

  • コンテストで使える言語はC++, Java, C#, VBだけど、C++を使う人が圧倒的に多い。今回の部屋では20人中Javaが1,2人しかいなくて、あとはみんなC++だった。
  • C++はCだと思って書いてもなんとなく書ける。
  • 開催時間が固定されていない。例えば今回は日本時間の火曜夜20時だったけど、来週は木曜朝10時から。授業あるじゃん...
  • 英語が苦手でもSRM用のJavaAppletを動かしてろいろクリックしてみれば、過去問の見方とかだいたいわかる。TopCoderのウェブサイトをうろうろしてもだめ。
  • ひとつのSRMでDIV1とDIV2がある。みんな最初はDIV2からはじまってRatingが1200を超えるとDIV1問題に取り組めるらしい。*1
  • TopCoderへの参加を躊躇しているひとはとりあえずJavaAppletを動かして、先人が問題を解いたソースコードが思いのほか短いことに気づけると思う。
  • 先人の書いたファイルを参考に、#includeするやつを作っておくと便利。
  • CodeProcessor, FileEdit, TZTesterなどのエディタ支援は必須。emacsvimでできたり、ひな形が容易されるとめちゃくちゃ便利。テストコードをemacs上のgdb走らせることもできる。Gulfweedさんのエントリを読んでやったら簡単にできた。
  • Challenging Phaseという他人のコードを読んでバグを見つけるPhaseがあるけど、むずい。ミスりそうな所を決めてからいろんな人のコードを見まくるのかなぁ。
  • とあるtopcoderIRCチャットに参加してみたら、そこでの最低ratingでも1300の人でびっくりした。すっげ。
  • 当たり前だけど、英語読めないとこまる。

いろいろ教えてくれた@mootohさん、kentanjpさん、arkさんありがとうございます。
一回目のSRMに参加してRating:1096。DIV1に進めるようになりたいが、はじめのうちはRatingがころころかわるとのことなのであまり気にしないでおく。

得点

*1:僕はDIV1のほうが難しいと知らずに、DIV1問題を読んでなんでみんなこんなのを簡単に解けるのか、とびっくりしたことがある