Tools for online judge services. Downloading sample cases, Testing/Submitting your code, and various utilities.
- Download sample cases
- AtCoder
- yukicoder
- Anarchy Golf
- Codeforces
- HackerRank
- Aizu Online Judge (including the Arena)
- CS Academy
- PKU JudgeOnline
- Kattis
- Toph (Problem Archive)
- CodeChef
- Sphere online judge
- Facebook Hacker Cup
- Library Checker (https://judge.yosupo.jp)
- Download system test cases
- yukicoder
- Aizu Online Judge
- Login (with CUI and/or GUI)
- AtCoder
- yukicoder
- Codeforces
- HackerRank
Topcoder- Toph
- Submit your solution
- AtCoder
- yukicoder
- Codeforces
- HackerRank
Topcoder (Marathon Match)- Toph (Problem Archive)
Generate scanner for input(removed, use kyuridenamida/atcoder-tools)- AtCoder
- yukicoder
- Test your solution
- Test your solution for reactive problem
- Generate input files from generators
- Generate output files from input and reference implementation
Split an input file with many cases to files(removed)
The portable executables oj.exe
for Windows are downloadable from GitHub releases.
The package is https://pypi.python.org/pypi/online-judge-tools .
$ pip3 install online-judge-tools
It requires Python 3.5 or later.
$ git clone https://github.com/kmyk/online-judge-tools
$ cd online-judge-tools
$ pip3 install -e .
$ oj [download,login] URL
$ oj submit URL FILE [-l LANGUAGE]
$ oj test [-c COMMAND] [TEST...]
For details, see --help
.
$ oj download http://agc001.contest.atcoder.jp/tasks/agc001_a
[+] problem recognized: <onlinejudge.atcoder.AtCoder object at 0x7f2925a5df60>
[x] GET: http://agc001.contest.atcoder.jp/tasks/agc001_a
[+] 200 OK
[*] sample 0
[x] input: 入力例 1
2
1 3 1 2
[+] saved to: test/sample-1.in
[x] output: 出力例 1
3
[+] saved to: test/sample-1.out
[*] sample 1
[x] input: 入力例 2
5
100 1 2 3 14 15 58 58 58 29
[+] saved to: test/sample-2.in
[x] output: 出力例 2
135
[+] saved to: test/sample-2.out
[*] sample 2
[x] input: Sample Input 1
2
1 3 1 2
[+] saved to: test/sample-3.in
[x] output: Sample Output 1
3
[+] saved to: test/sample-3.out
[*] sample 3
[x] input: Sample Input 2
5
100 1 2 3 14 15 58 58 58 29
[+] saved to: test/sample-4.in
[x] output: Sample Output 2
135
[+] saved to: test/sample-4.out
Read the documents: https://online-judge-tools.readthedocs.io/en/master/
The next code lists the shortest submissions for problems of AtCoder Beginner Contest XXX.
#!/usr/bin/env python3
from onlinejudge.service.atcoder import *
for contest in AtCoderService().iterate_contests():
if not contest.contest_id.startswith('abc'):
for problem in contest.list_problems():
submission = next(problem.iterate_submissions_where(status='AC', order='source_length'))
problem_full_name = '{}: {} - {}'.format(contest.get_name(), problem.get_alphabet(), problem.get_name())
shortest_info = '({} byte, {})'.format(submission.get_code_size(), submission.get_language_name())
print(problem_full_name.ljust(60), submission.get_user_id().ljust(12), shortest_info)
Example output:
AtCoder Beginner Contest 121: A - White Cells kotatsugame (26 byte, Perl6 (rakudo-star 2016.01))
AtCoder Beginner Contest 121: B - Can you solve this? kotatsugame (49 byte, Octave (4.0.2))
AtCoder Beginner Contest 121: C - Energy Drink Collector x20 (54 byte, Perl (v5.18.2))
AtCoder Beginner Contest 121: D - XOR World climpet (40 byte, Perl (v5.18.2))
AtCoder Beginner Contest 120: A - Favorite Sound kotatsugame (25 byte, Awk (mawk 1.3.3))
AtCoder Beginner Contest 120: B - K-th Common Divisor n4o847 (35 byte, Awk (mawk 1.3.3))
AtCoder Beginner Contest 120: C - Unification kotatsugame (32 byte, Octave (4.0.2))
AtCoder Beginner Contest 120: D - Decayed Bridges x20 (154 byte, Perl (v5.18.2))
AtCoder Beginner Contest 119: A - Still TBD morio__ (22 byte, Sed (GNU sed 4.2.2))
AtCoder Beginner Contest 119: B - Digital Gifts n4o847 (31 byte, Perl (v5.18.2))
AtCoder Beginner Contest 119: C - Synthetic Kadomatsu kotatsugame (135 byte, Perl (v5.18.2))
AtCoder Beginner Contest 119: D - Lazy Faith kotatsugame (179 byte, Octave (4.0.2))
AtCoder Beginner Contest 118: A - B +/- A n4o847 (19 byte, Awk (mawk 1.3.3))
AtCoder Beginner Contest 118: B - Foods Loved by Everyone kotatsugame (37 byte, Perl6 (rakudo-star 2016.01))
...
- I cannot install this tool. How should I do it?
- Check versions of your Python. Also, consider the use of Windows Subsystem for Linux (WSL) if you use the Windows environment.
- Are there features to manage templates or snippets?
- No. They are not the responsibility of this tool. You should use plugins of your editor, like thinca/vim-template or Shougo/deoplete.nvim.
- I usually make one directory per one contest (or, site). Is there support for this style?
- Yes. You can use the
--directory
(-d
) option. However, I recommend making one directory per problem.
- Yes. You can use the
- Can I specify problems by their IDs or names, instead of URLs?
- No. I have tried it once, but it is actually not so convenient and only increases the maintenance cost.
- I don't want to give my password to this program.
- This program stores only your session tokens. Use
oj login --use-brower=always ...
and read onlinejudge/_implementation/command/login.py.
- This program stores only your session tokens. Use
For other questions, use Gitter or other SNSs.
conflicted:
not conflicted:
- shivawu/topcoder-greed for Topcoder Single Round Match
- FakePsyho/mmstats for Topcoder Marathon Match
- https://community.topcoder.com/tc?module=Static&d1=applet&d2=plugins
projects depending on kmyk/online-judge-tools:
- wrappers:
- Tatamo/atcoder-cli is a thin wrapper optimized for AtCoder
- kjnh10/pcm is a tool which internally uses online-judge-tools
- some people use
oj
via Visual Studio Code
- libraries using this for CI:
- kmyk/competitive-programming-library is my library for competitive programming, which uses
oj
via kmyk/online-judge-verify-helper - beet-aizu/library also uses kmyk/online-judge-verify-helper
- blue-jam/ProconLibrary uses
oj
for CI from their own scripts
- kmyk/competitive-programming-library is my library for competitive programming, which uses
- others:
- kmyk/online-judge-verify-helper automates testing your library for competitive programming and generate documents
- fukatani/rujaion is an IDE for competitive-programming with Rust
See CONTRIBUTING.md
For the full list of contibutors, see CHANGELOG.md or the contributors page of GitHub.
- owner: @kmyk (AtCoder: kimiyuki, Codeforces: kimiyuki)
- collaborator: @fukatani (AtCoder: ryoryoryo111)
- collaborator: @kawacchu (AtCoder: kawacchu)
MIT License