oj

Tools for various online judges. Downloading sample cases, generating additional test cases, testing your code, and submitting it.

MIT License

Downloads
8K
Stars
1K
Committers
30

online-judge-tools/oj

English version of README.md

oj コマンドは様々なオンラインジャッジの問題を解くことを助けるツールです。 このコマンドは、サンプルケースの取得、追加のテストケースの生成、テストの実行、コードの提出などを自動化します。

Screencast

Features

  • サンプルケースを取得
  • システムケースを取得
  • ログイン
  • コードを提出
  • テストを実行
  • リアクティブ問題のテストを実行
  • テストケース生成器からテストケースの入力を生成
  • テストケースの入力と愚直解からテストケースの出力を生成

詳しいドキュメントは docs/getting-started.ja.md にあります。

様々なオンラインジャッジ (Codeforces, AtCoder, HackerRank など) をサポートしています。 その完全なリストには the table of online-judge-tools/api-client を見てください。

How to install

Python package は https://pypi.python.org/pypi/online-judge-tools です。

$ pip3 install online-judge-tools

より詳しい説明には docs/INSTALL.ja.md を読んでください。

How to use

$ 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 を見てください。

Example

$ 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

FAQ

  • 私は C++ でなく Python (あるいは Rust, D, Java, F#, Haskell など) を使っています。それでも利用できますか?
    • はい。必要なら --command (-c) オプションを利用してください。たとえば Python なら $ oj t -c "python3 main.py" のようにします。
  • 私はいつもひとつのコンテストごとにひとつのディレクトリを使っています。このスタイルのままでも利用できますか?
    • はい。--directory (-d) オプションや $ rm -rf test/ コマンドを利用してください。しかし、レートの最大化のためには追加のテストケースを自分で生成するべきであり、それをする上ではひとつの問題ごとにひとつのディレクトリを使う方がよいでしょう。
  • コンテストごとに一括でサンプルケースを取得できませんか?
  • テストの前に自動でコードをコンパイルするようにはできますか?
    • はい。シェルの機能を使ってください。$ 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 を使ってください。

Resources

Articles

Related Tools

競合:

非競合:

kmyk/online-judge-tools と連携するツール:

Maintainers

License

MIT License