online-judge-tools/oj
oj is a command to help solving problems on various online judges. This command automates downloading sample cases, generating additional test cases, testing for your code, and submitting it.
Screencast
Features
- Download sample cases
- Download system test cases
- Login
- Submit your code
- Test your code
- Test your code for reactive problems
- Generate input files from generators
- Generate output files from input and reference implementation
For the detailed documentation, read docs/getting-started.md.
Many online judges (Codeforces, AtCoder, HackerRank, etc.) are supported. For the full list, see the table of online-judge-tools/api-client.
How to install
The package is https://pypi.python.org/pypi/online-judge-tools .
$ pip3 install online-judge-tools
For detailed instructions, read docs/INSTALL.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...]
For details, see $ 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
- Can I use Python (or Rust, D, Java, F#, Haskell, etc.) instead of C++?
- Yes. Please use
--command(-c) option if needed. For example, for Python, you can run$ oj t -c "python3 main.py".
- Yes. Please use
- I usually make one directory per one contest (or, site). Can I keep using this style?
- Yes, you can use the
--directory(-d) option or$ rm -rf test/. However, we don't recommend this style, because you should make additional test cases by yourself and run stress tests to maximize your rating.
- Yes, you can use the
- Can I download all sample cases of all problems at once?
- No, but you can use
oj-preparecommand in kmyk/online-judge-template-generator.
- No, but you can use
- Can I automatically compile my source code before testing?
- Yes, use your shell. Run
$ g++ main.cpp && oj t.
- Yes, use your shell. Run
- Can I automatically submit code after it passes tests?
- Yes, use your shell. Run
$ oj t && oj s main.cpp. By the way, you need to take care of problems whose sample cases are not so strong.
- Yes, use your shell. Run
- Can I remove the delays and the
[y/N]confirmation before submitting code?- Yes, put
--wait=0option and--yesoption tooj ssubcommand. Of course, we don't recommend this. They exist for failsafe. For example, please consider a situation where if you save 3 seconds, you will move up 3 places on the standings. In such a case, if you get a penalty of 5 minutes, then you will move down at least 300 places on the standings.
- Yes, put
- Is my password stored?
- No, your password is not stored into any files. This program stores only your session tokens (but of course, it's still credentials). Please read
onlinejudge/_implementation/command/login.py.
- No, your password is not stored into any files. This program stores only your session tokens (but of course, it's still credentials). Please read
- Does the config file exist?
- No. You can use your
.bashrc(or similar files) instead. It's a config file of your shell. Read man bash and write shell aliases or shell functions. For example, if you want to use Python code for tests by default, writealias oj-test-python='oj t -c "python3 main.py"'to.bashrcand use$ oj-test-python.
- No. You can use your
For other questions, use Gitter or other SNSs.
Resources
Related Tools
conflicted:
not conflicted:
- shivawu/topcoder-greed for Topcoder Single Round Match
projects collaborating with kmyk/online-judge-tools:
- kmyk/online-judge-template-generator analyzes problems and generates templates including auto-generated input/output parts
- kmyk/online-judge-verify-helper automates testing your library for competitive programming and generate documents
- Tatamo/atcoder-cli is a thin wrapper optimized for AtCoder
- kjnh10/pcm is a tool which internally uses online-judge-tools
- fukatani/rujaion is an IDE for competitive-programming with Rust
Maintainers
- current maintainers
- maintainers who are not working now
- @fukatani (AtCoder: ryoryoryo111)
- @kawacchu (AtCoder: kawacchu)
License
MIT License
Metadata
Release files for online-judge-tools 11.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| online_judge_tools-11.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Release files / online_judge_tools-11.5.1-py3-none-any.whl
| Download URL | online_judge_tools-11.5.1-py3-none-any.whl |
|---|---|
| Size | 47.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
209ff413b430715fa672fc9e94e96dcad7e2627817ae8aa6edf574c5a2d95ba1
|
|
BLAKE2b-256 checksum How to use checksums |
469b3e8571dba16237df224cf948b738efbe5dc11bdfe15268b933a14bca045c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7
|
Security for online-judge-tools 11.5.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.