Skip to content
Tools for online judge services. Downloading sample cases, Testing/Submitting your code, and various utilities.
Python
Branch: master
Clone or download
Latest commit 2e6d428 Nov 15, 2019

readme.md

Online Judge Tools

Travis AppVeyor Documentation Status PyPI Downloads PyPI Join the chat at https://gitter.im/online-judge-tools/community

Tools for online judge services. Downloading sample cases, Testing/Submitting your code, and various utilities.

Screencast

screencast

Features

  • Download sample cases
    • AtCoder
    • yukicoder
    • Anarchy Golf
    • Codeforces
    • HackerRank
    • Aizu Online Judge (including the Arena)
    • CS Academy
    • PKU JudgeOnline
    • Kattis
    • Toph (Problem Archive)
    • 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

How to install

using the compiled binary

The portable executables oj.exe for Windows are downloadable from GitHub releases.

from PyPI

The package is https://pypi.python.org/pypi/online-judge-tools PyPI.

$ pip3 install online-judge-tools

It requires Python 3.5 or later.

from this repository

$ git clone https://github.com/kmyk/online-judge-tools
$ cd online-judge-tools
$ pip3 install -e .

How to use

$ oj [download,login] URL
$ oj submit URL FILE [-l LANGUAGE]
$ oj test [-c COMMAND] [TEST...]

For details, see --help.

Example

$ 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

How to use as a library

Read the documents: https://online-judge-tools.readthedocs.io/en/master/ Documentation Status

Example to use as a library

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))
...

FAQ

  • 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?
  • 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.
  • 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.

For other questions, use Gitter Join the chat at https://gitter.im/online-judge-tools/community or other SNSs.

Related Tools

conflicted:

not conflicted:

projects depending on kmyk/online-judge-tools:

  1. wrappers:
  2. libraries using this for CI:
  3. others:

Contributing

See CONTRIBUTING.md

Hall-Of-Fame

For the full list of contibutors, see CHANGELOG.md or the contributors page of GitHub.

maintainers

License

MIT License

You can’t perform that action at this time.