はじめに
競技プログラミングをはじめると多くの本やWebサイトで名前を見かけるTopCoderはシステムと問題文の癖が強く、試しに過去問を1問submitするのも敷居が高いです。この記事で紹介するのは以下の3点です。
-
- ArenaにJava版を使ってアクセスする。このためのJavaの準備。
-
- SRM過去問へのアクセスとsubmitをして、システムテストを行う。
-
- Arenaで"Editor"の設定をする。
(Python) はじめに: Python2.7をインストールする
TopCoderのPythonのバージョンは2.7です.以降の手順に進む前に必ずPython2.7をインストールしましょう.
(C++) はじめに: C++11であることに注意する
TopCoderのC++は(ほぼ)C++11です。
以下のように、2021年2月現在、SRMのCコンパイラは4.8.1です。C++14,17は以下のGNUCバージョンからサポートされています。
- C++14: GNUC 4.9以上。一部の機能は4.8以下で実装されているが使えない機能が多い。
- C++17: GNUC 5.0.0以上からサポート
このため、TopCoderの環境はC++11だと思うのがよさそうです。詳しくは以下を参照してください。
https://cpprefjp.github.io/implementation-status.html#cpp14
(C++/Python共通)Java版でArenaにアクセスする.
TopCoderでSRMに参加するにはArenaと呼ばれるSRM専用のコンテストシステムにアクセスする必要があります。
アカウントの作成は省略します。このページにアクセスした方の中にはTopCoderの"Community -> Compete -> Competitive Programming" からArena Web版と呼ばれるツールにアクセスしたことがある方も多いと思います。しかし,Web版は動作が遅く,また過去問へのアクセス性もとても悪く非常に使いにくいです(2020/8現在)
そこでJavaアプレット版のArenaを使います。Java版Arenaインストールは以下のURLに従って行います。
https://www.topcoder.com/community/arena?ref=navb
-
Java JREをインストールします.設定の変更は不要です。(注意:かつてはJavaのセキュリティ設定変更が必要でしたがこの記事の通り、最新のアプレットでこの変更は不要です)
-
先ほどのページからTopCoderのJavaアプレットへのリンクにアクセスします.このアプレットは保存しておき,デスクトップなどに置いておくことも可能です.ただし、Appletが更新されることもあると思うのでリンクのほうが好ましいのかもしれません。
-
TopCoderのユーザ名とパスワードを入力しログインします.
(C++/Python共通) Arenaの使い方: 過去問題にアクセスしてSubmitの流れ
TopCoderは他のコンテストサイトと比べて特異なインタフェースを持ちます。過去問題へのCommitを通して流れを確認します。
- ArenaのPractice Room -> SRMsから見たい過去問題を選択します
コンテストが始まる数時間前は,一時的にSRMの過去問へのアクセスができません.コンテスト終了後に試しましょう.
- SRMは基本的に3問構成です.
Coding Phase
からアクセスしたい問題を選択します.
- 問題が出るので解きます.
- コードを書いたら,
Compile -> Batch Test -> Submit
の順で実行します.(PythonでもCompileは必要です)
- Submitし,TestにPASSすると以下のような表示になり,ポイントが付与されます.しかし,で終わってはいけません.これは提出が終わった,というだけで,各BatchTestが通ったかは確認しませんし,Codeforcesと違って,もう少し強いpre-testが行われるわけではありません.
- 一度,このウィンドウを閉じ,SRMのトップ画面に遷移し,
Practice Option -> Run System Test
を選択します.
- 結果を確認します.例では,2つのSystemテストに失敗しました.ダブルクリックするとinput/outputが確認できます.
(C++/Python共通)Editorをgreedに設定する
-
githubのGreedのページにアクセスします.Quick Startの通りですが,以下説明します.
-
このページのDownloadsから2.0RCのjarをダウンロードし適当なディレクトリに入れます.
-
Arenaのログイン後のロビーページで
Options -> Editor -> Add
を選択します.次の通り入力します.(ClassPathはBrowseをクリックして,2でダウンロードしたjarを選択します)
(githubより転載) -
DefaultとAt Startupにチェックを入れます.続けて,Configureを選択します.
- ここで,問題のテンプレートが作成される親ディレクトリをフルパスで入れます.
- 後の工程で問題にアクセスすると,このディレクトリに,SRMごとのディレクトリが下の図のように切られます.
(Python/C++共通) Python か C++ かの設定
この設定は初回のみ必要です。
問題を開いたら、以下の画面で、C++かPython(2.7)かのラジオボックスを押してください。
(Python/C++共通)実際に問題を解く
以下、拡張子がpyなところをcppに読み替えれば C++でも一緒です
- Greedの導入が終わったら、先ほど解説したSRMの問題を開きます.すると,先ほどまで画面下部にテキストエディタが表示されていましたが,以下の通りとなり,コードを入力することが出来なくなっています.
- この状態で,
項番5
で指定したフォルダを開くと,(この問題の場合は)Scissors.py
とScissors.html
が作成されています.Arenaの説明文は見ずにこちらのHTMLを問題文として参照します.
一覧性が段違いですし,一気にコピーアンドペーストできるので,全文を機械翻訳に突っ込むときにも便利です. - 作成されたpyにはテストが含まれています.今回の場合は以下の部分の
return 0
を要件に合うようにコーディングしていきます.
class Scissors:
def openingTime(self, N):
return 0
(以下は自動生成されたコード)
- Pythonの人はPython2.7, C++の人はC++11であることを注意して実行します.以下のようにPASS/FAILが表示されます.すべてPASSになるまでコードを直しましょう.
Testcase #0 ... PASSED! (0.000 seconds)
Testcase #1 ... FAILED! (0.000 seconds)
Expected: 40
Received: 20
Testcase #2 ... FAILED! (0.000 seconds)
Expected: 110
Received: 20
Passed : 1 / 3 cases
- すべてPASSするようになったら,その状態(ソースコードが保存されている状態)で
Compile -> Batch Test -> Submit
をします.Compileを実行すると,Getting source code from SRM ~
といってソースコードを取得していることが分かります.(内部的には# CUT beginまでのソースコードが渡されています)
【超重要】Success: True と出ていますが、見るべきは"Correct example"です。これがTrueなことを確認しましょう。
FAQ: サンプルしかジャッジされない! (再掲:システムテストの仕方)
まず、コンテストの直前や直後は以下のUIが存在しないことがあります。コンテストが行われていない時間にアクセスしましょう。
なんでシステムテストがこんなにわかりにくい場所に・・と思いますよね。Practice Options -> Run System Testします。めでたく、すべて通っていればOKです!
FAQ: どうしてもアプレットの起動ができない!(Java キャッシュクリア)
ダウンロードしたアプレットが壊れているかもしれません。Windowsの場合、コントロールパネルのJavaの設定から、
0. Appletを終了します。
- まず、【一般】タブ -> 【インターネット一時ファイル】の【表示】-> TopCoderアプリを選んで【選択された項目を削除】します。
- 次に、同じく【インターネット一時ファイル】の【表示】から【ファイルの削除】を選択します。
- Appletを再度起動します!
gl, hf!
その他情報
- テンプレートを変える日本語の記事: https://minus9d.hatenablog.com/entry/2019/05/01/222914