TopCoder SRM入門

TopCoderとはなんぞやというとプログラミングのコンテストで、いろんな競技をやっている。とっつきやすいのが週一回開催されるAlgorithm部門のSRM(Single Round Match)で、1時間ほどでアルゴリズムに関する問題を解く。使用可能言語はjava/C#/C++/VB。実務的だねー。
面白いんだけど、とにかく開始するまでが面倒。
参加にはjavaによる専用クライアントを使用する。サイドバーのCompetitions→Algorithm→Launch Arenaのリンクから起動。port 5001が開いてないと接続できない(HTTPプロキシも選択可能なようだが当方の環境ではつながらなかった)。
実際の雰囲気については西尾先生のとこなどを見るといいと思います。

ユーザ登録

めんどくさかったということしか覚えてない。

SRMの流れ

参加登録

クライアントのメニューからregister選ぶだけ。
開始3時間前から登録可能。人数制限もあるらしい。なるべく早めに登録しといたほうがいいです。

Coding phase

問題を解く時間。全部で3問あり、点数が違う。どれから解いてもいい。
問題を選んだらコード作成→save(コードがリモートに送られる)→compile→test(テストケースを選んで結果のチェックができる)→submit。
submitが早ければ早いほどもらえる点数が高くなるが、何度もsubmitすると点数にペナルティがある。もらえる点数は問題閲覧開始からsubmitまでの時間で決まるので、むやみに問題を開かないほうがいいかも。
デフォルトの状態では専用クライアント内の低機能エディタでコーディングすることになり、さらに動作チェックするたびに15回くらいクリックすることになって精神が破滅してしまうのでプラグインを入れる。外部のエディタでコードを編集可能にするプラグインプリプロセッサ、問題のテストケースを自動で生成してくれるプラグイン。など。プラグインの入れ方は大変わかりにくいので解説サイトを参考に。C++な人はTopCoderでCodeProcessor+TZTester+FileEdit - Gulfweedjava/C#な人はTopCoder で CodeProcessor + ExampleBuilder + FileEdit: ymatsu雑記帳あたりを参考に。これらのプラグインを入れればローカルで簡単にテストできるため効率がたいへん向上する。
追記(2010-02-01): Eclipseな人はEclipseCoderプラグインをどうぞ。導入簡単。

Challange phase

休憩を挟んで、Challange phaseへ。この段階では他の参加者のコードを見ることができて、他人のバグを顕在化させるテストケースを送りつけることで自分に得点が入る。
ただしチャレンジに失敗すると自分にペナルティ。

System testing phase

システムが各参加者のコードをテスト。テストに失敗したら得点は没収される。しばらく待つと最終的な成績が出る。

練習

クライアントのPractice roomsメニューから過去の大会にアクセスできるのでそこで練習するといいです。

Rating/Division

大会の得点によってratingが変化する。1200点を超えるとDiv1、それ以下はDiv2で戦うことになる。Div1は問題の難易度が一段階上がるかんじ。

Challange/System testで落とされた場合の詳細を見る

Summaryから自分の名前を右クリック→History

その他

  • FileEditプラグイン、「問題を開くたびに」ファイルを生成するため、問題を一度閉じて再度開くとソースが初期化されて大変なことになったりする。エディタ側で自動バックアップ設定するなどの対策が必要。
  • 問題文をソースとは別に保存するオプションをonにしないと、問題文がコメントアウトされずソースファイルに入って大変だるいことに。コメントアウトするオプションがなぜか機能しない。
  • 新規参加直後に一番簡単な問題を高速で解くといきなりDiv1に行ける。
  • 問題を解くのにかかった時間とスコアの関係