oj
コマンドは様々なオンラインジャッジの問題を解くことを助けるツールです。
このコマンドは、サンプルケースの取得、追加のテストケースの生成、テストの実行、コードの提出などを自動化します。
- サンプルケースを取得
- システムケースを取得
- ログイン
- コードを提出
- テストを実行
- リアクティブ問題のテストを実行
- テストケース生成器からテストケースの入力を生成
- テストケースの入力と愚直解からテストケースの出力を生成
詳しいドキュメントは docs/getting-started.ja.md にあります。
様々なオンラインジャッジ (Codeforces, AtCoder, HackerRank など) をサポートしています。 その完全なリストには the table of online-judge-tools/api-client を見てください。
Python package は https://pypi.python.org/pypi/online-judge-tools です。
$ pip3 install online-judge-tools
より詳しい説明には docs/INSTALL.ja.md を読んでください。
$ oj download [--system] URL
$ oj login URL
$ oj submit [URL] FILE
$ oj test [-c COMMAND] [TEST...]
$ oj test-reactive [-c COMMAND] JUDGE_COMMAND
$ oj generate-input GENERATOR_COMMAND
$ oj generate-output [-c COMMAND] [TEST...]
詳細は $ oj --help
を見てください。
$ oj download http://agc001.contest.atcoder.jp/tasks/agc001_a
[INFO] online-judge-tools 11.2.0 (+ online-judge-api-client 10.8.0)
[INFO] load cookie from: /home/user/.local/share/online-judge-tools/cookie.jar
[NETWORK] GET: https://atcoder.jp/contests/agc001/tasks/agc001_a
[NETWORK] 200 OK
[INFO] sample 0
[INFO] input: sample-1
2
1 3 1 2
[SUCCESS] saved to: test/sample-1.in
[INFO] output: sample-1
3
[SUCCESS] saved to: test/sample-1.out
[INFO] sample 1
[INFO] input: sample-2
5
100 1 2 3 14 15 58 58 58 29
[SUCCESS] saved to: test/sample-2.in
[INFO] output: sample-2
135
[SUCCESS] saved to: test/sample-2.out
$ cat <<EOF > main.py
#!/usr/bin/env python3
n = int(input())
a = list(map(int, input().split()))
ans = max(a)
print(ans)
EOF
$ oj t -c "python3 main.py"
[INFO] online-judge-tools 11.2.0 (+ online-judge-api-client 10.8.0)
[INFO] 2 cases found
[INFO] sample-1
[INFO] time: 0.043601 sec
[SUCCESS] AC
[INFO] sample-2
[INFO] time: 0.043763 sec
[FAILURE] WA
input:
5
100 1 2 3 14 15 58 58 58 29
output:
3
expected:
135
[INFO] slowest: 0.043763 sec (for sample-2)
[INFO] max memory: 10.064000 MB (for sample-2)
[FAILURE] test failed: 1 AC / 2 cases
- 私は C++ でなく Python (あるいは Rust, D, Java, F#, Haskell など) を使っています。それでも利用できますか?
- はい。必要なら
--command
(-c
) オプションを利用してください。たとえば Python なら$ oj t -c "python3 main.py"
のようにします。
- はい。必要なら
- 私はいつもひとつのコンテストごとにひとつのディレクトリを使っています。このスタイルのままでも利用できますか?
- はい。
--directory
(-d
) オプションや$ rm -rf test/
コマンドを利用してください。しかし、レートの最大化のためには追加のテストケースを自分で生成するべきであり、それをする上ではひとつの問題ごとにひとつのディレクトリを使う方がよいでしょう。
- はい。
- コンテストごとに一括でサンプルケースを取得できませんか?
- いいえ、
oj
コマンドではできません。代わりに kmyk/online-judge-template-generator のoj-prepare
コマンドを利用してください。
- いいえ、
- テストの前に自動でコードをコンパイルするようにはできますか?
- はい。シェルの機能を使ってください。
$ g++ main.cpp && oj t
のように実行してください。
- はい。シェルの機能を使ってください。
- テストが通ったら自動で提出するようにはできますか?
- はい。シェルの機能を使ってください。
$ oj t && oj s main.cpp
のように実行してください。ところで、サンプルケースがあまり強くない問題の存在には注意が必要です。
- はい。シェルの機能を使ってください。
- 提出の際のディレイや
[y/N]
の確認をなしにできますか?- はい。
--wait=0
オプションや--yes
オプションを利用してください。しかしこれは推奨されません。これらの機能は安全性のためにあるものです。たとえば、もし 3 秒速く提出できていれば順位が 3 位上がるような状況を考えてみましょう。そのような状況で提出ミスをして 5 分のペナルティを受ければ、順位は 300 位は下がるでしょう。
- はい。
- 入力したパスワードは保存されますか?
- いいえ。パスワードはどのファイルにも保存されません。セッショントークンなど (ただしこれも機密情報です) のみを保存します。必要であれば
onlinejudge/_implementation/command/login.py
などを読んで確認してください。
- いいえ。パスワードはどのファイルにも保存されません。セッショントークンなど (ただしこれも機密情報です) のみを保存します。必要であれば
- 設定ファイルはありますか?
- いいえ。シェルの
.bashrc
(あるいはそれに相当するファイル) を利用してください。man bash を読み、シェル alias やシェル関数を書いてください。たとえば、もしテストの実行の際に Python をデフォルトで使いたいのならalias oj-test-python='oj t -c "python3 main.py"'
と.bashrc
に書いて$ oj-test-python
と実行してください。
- いいえ。シェルの
ここにない質問には Gitter やその他の SNS を使ってください。
- online-judge-toolsを導入しよう! · ますぐれメモ
- online-judge-toolsをVimから呼んで楽をする - Leverage Copy
- VSCodeでAtCoderのサンプルケースをサクッとテストする - Qiita
競合:
非競合:
- shivawu/topcoder-greed for Topcoder Single Round Match
kmyk/online-judge-tools と連携するツール:
- kmyk/online-judge-template-generator は競プロの問題を解析して解法コードの入出力部分などを自動生成します
- kmyk/online-judge-verify-helper は競プロライブラリの verify とドキュメントの生成を自動化します
- Tatamo/atcoder-cli は AtCoder に特化した
oj
コマンドの薄い wrapper です - kjnh10/pcm は内部で
oj
コマンドを利用しています - fukatani/rujaion は Rust で競プロをすることに特化した IDE です
- current maintainers
- maintainers who are not working now
- @fukatani (AtCoder: ryoryoryo111)
- @kawacchu (AtCoder: kawacchu)
MIT License