TopCoderのSRM(SingleRoundMatch)に参加するまでの導入方法メモ

TopCoderに参加したのだけどその導入が意外と面倒だったのでメモ.

TopCoderとは?

  • TopCoderとは週1,2回くらいに開催されるオンラインのプログラミングコンテスト(の企業の名前(?))
    • コンテストは世界中からたくさんの人が参加する.
    • 言語はC++,C#,Java,VBが使える模様.
    • レーティングにより自分が世界でどのくらいの実力なのかが分かってよいかも.
    • ☆☆ネットゲーム感覚でどなたでも気軽に参加できます☆☆(多分)

導入

  1. ここの左のメニューバーにAlgorithmという項目があるのでそれをクリック→Lauch Area→javaアプレットをダウンロードして保存.それを開く.
  2. TopCoderでは基本的にこのjavaアプレット上で操作を行うことになる.
    • とりあえずユーザー登録しないといけないので,下の方ある「Click here to Register」で登録画面に移る.
  3. 登録する.
    • 項目が多くて結構面倒くさい.
    • 以前,項目をちゃんと書いてても登録できない不具合とかもあったので注意が必要かも..
  4. 登録できたらjavaアプレットに戻る.User名とPasswordを入力してログイン.
  5. とりあえず過去のSRMの問題を眺めてみる.
    • 上部バーのPractice Rooms → SRMs → ** - SRM *** DIV * → 部屋移動 → Select oneと書いてあるタブをクリック → 250とか500とかクリック → でSRMの過去問が表示される.
    • SRMはSingle Round Matchの略で,TopCoderにおけるコンテストのことを表す.
    • SRMxxx でxxxは第何回目のSRMなのかを表す.またSRMには初級者向けの問題セットと中級者以上向けの問題セットの2種類が用意されており,DIV2が初級者向け,DIV1が中級者以上向けとなっている.
    • 問題には250,500,1000などの数字が割り当てられており,それぞれ問題を解いたときに得られる得点を表す.数字が大きいほど難しい.
  6. デフォルトではコーディングの環境が良くないので拡張機能プラグイン)をインストールする.
    • これまた結構面倒くさい.
    • ここを参考にして,CodeProcessor+TZTester+FileEditという3つのプラグインを導入する.*1
      • これにより外部で自分の好きなエディターを使って編集して,javaアプレットコンパイルやsubmitする,といったことができるようになる.
    • プラグイン環境を入れると快適になるが,デフォルトのFileEditの設定が多少良くないので次のように変更するといい.かも.
      • ``Backup existing file ...'' の項目にチェックが入っているが,これだと問題を開くたびに過去に書いたコードが消されてしまうので,オフにする.(上書きされなくなる)
      • デフォルトではtxtで問題文がアウトプットされるが,たまに問題文に画像が使われていることがあり,txtだと画像が表示されないので,``Write the problem description using HTML''にチェックを入れ,``File extension''をtxtからhtmlにする.
  7. 実際にコードを書いてコンパイル,テストしてみる
    • javaアプレット内のCOMPILEボタンを押すとコードがコンパイルされ,コンパイル結果が表示される
    • TESTボタンを押すとサンプルのテストケースでテストできる.自分でテストケースを作ることも出来る.
  8. submitし,System Judgeに通してみる
    • SUBMITボタンでコードをsubmitできる.
    • 本番だとここまででいいのだが,practiceだとこれだけではシステムテストがされないので実際にコードが正しいのか分からない.
    • Practice Option→Run System Test でシステムテストが実行される.
    • Wrong AnswerやTime Limit Exceededを喰らった場合,どのケースで喰らったのかが表示されて便利.

コンテストに参加してみる

  • コンテストの開催は上に述べたように不定期である.
  • 開催数時間前になったらSRMにRegisterする.
    • 開催5分前になると対戦部屋にEnterできるようになるのでEnterしてみる.
  • コンテストのシステムは以下のようになっている.
  1. Coding Phase(75分)
    • コードを書く.全3問.
    • 250,500,1000とかが問題.数字が大きいほど難しい.
    • 解ければコードをSubmitできる.
    • ただ,よくあるオンラインジャッジサイトやICPC本選と違って,SubmitしてすぐにはAcceptedかWrongAnswerか分からない.というか最後まで分からない.
    • 「最後まで結果が分からない気持ち悪さを味わうが良い.」
  2. Intermission(5分)
    • 休憩.
  3. Challenge Phase(20分)
    • 他人の書いたソースコードの「穴」を探し,攻撃するフェーズ.
    • WrongAnswerやTimeLimitExceededを誘発するようなインプットを他人のソースコードに送りつける.
    • 成功すれば相手の得点をゼロにできるし,自分の得点が増える.
    • 失敗するとマイナス得点.
    • 攻撃は早いもの勝ちなので早めにやりたい.
  4. System Testing(?分)
    • 最終フェーズ.ソースコードTopCoderの中の人が作成したインプットを食わせる.
    • ここでAcceptedと認められれば,ようやく得点が入る.
    • 得点は問題の難易度とsubmitした時間に基づく.早い時間にsubmitすればするほど高得点に.
  5. 終了.

レートについて

  • SRMの成績に応じてレーティングが付く.
  • の順で強い.ちなみに緑以下がDIV2,青以上がDIV1という風に住み分けされているそうです.
  • 初参加の人は白になります.


以上.良いTopCoder生活をお楽しみください.(?)

*1:ただしTZTesterはC++のみ対応で,他の言語の場合はExampleBuilderなどを使うと良い…かも.