terraformer's blog

By terraformer, history, 4 years ago, In English

Do you use online-judge-tools? If not, I believe it is valuable tool to try.

Your operation in competitive programming will become automated and the competition programming experience will be comfortable.

Good tutorial is here.

online-judge-tool seems simple. It is consists of just 4 subcommands (login, download, test and submit). But if you execute oj test --help, you can find about 20 command line options for oj test. Other subcommand (login, download and etc.) also have many command line options. Actually, these are many features.

Therefore, today I want to introduce my favorite online-judge-tools features.

1. Side-by-Side diff

This is very new feature for oj test. Sometimes, finding differences between your answer and expectation is cumbersome task.

For example,

$ oj test -c './a.out'
[*] 1 cases found

[*] sample-1
[x] time: 0.054696 sec
[-] WA
output:
7
1 5 1 3
7 7 89 9 2 2 6 5
2 4 6 1 8 5
9 10 0 29 56

expected:
7
1 5 1 3
7 7 89 9 2 2 6 5
2 4 6 1 3 5
9 10 0 29 56

Can you find where difference is between output and expected?

If you uses side-by-side display option(-S),

Great! You can find "3" in expect was replaced to "8" in output in a moment.

2. MLE and TLE checking

Since almost all of problems are limits computation time and memory consumption, it's natural that you want to confirm not only that the output matches the expected value, but also these limitations.

You only have to add --tle or --mle options for checking these limitations.

ex.

$ oj t -c './a.out' --tle 2.5  # 2.5sec
[*] 1 cases found

[*] sample-1
[x] time: 2.503372 sec
[-] TLE
$ oj t -c './a.out' --mle 56  # 56MB

Note: Currently, this feature requires gnu time. Therefore, unfortunately, Windows users can't access this feature.

3. Floating point error judge

Some problem requires floating point output. (ex. 2.500000) In many situation, relational and absolute error is allowed for these problems.

oj test can handle these errors by -e option.

If problem expectation 3 and your program outputs 3.00000001

$ oj t -c 'echo 3.00000001'
[*] 1 cases found

[*] sample-1
[x] time: 0.004793 sec
[-] WA
output:
3.00000001

expected:
3

In this situation, oj recognize your output as "Wrong Answer". But if you indicated allowed error by -e option, result will become changed.

$ oj t -c 'echo 3.00000001' -e 0.000001
[*] 1 cases found

[*] sample-1
[x] time: 0.004088 sec
[+] AC

Good, oj result becomes "All Correct". Here, oj t -c 'echo 3.00000001' -e 1e-5 is equivalent with oj t -c 'echo 3.00000001' -e 0.000001.

4. API

This is feature for tool developers.

You can access online-judge-tools inner functions via Python and you can construct powerful your own contest helper.

For example, I implemented "go to next problem" function for my IDE.

Snippet to get next problem URL is here.

from onlinejudge import dispatch
from onlinejudge._implementation.utils import (
    default_cookie_path,
    with_cookiejar,
    new_session_with_our_user_agent,
)

def get_next_problem(cur_problem_url: str) -> str:
    cur_problem = dispatch.problem_from_url(cur_problem_url)
    contest = cur_problem.get_contest()
    with with_cookiejar(new_session_with_our_user_agent(), path=default_cookie_path) as sess:
        problems = contest.list_problems(session=sess)
        for i, problem in enumerate(problems):
            if problem == cur_problem:
                next = problems[(i + 1) % len(problems)].get_url()
                return next

next_url = get_next_problem("https://codeforces.com/contest/1312/problem/B")
print(next_url)

If you logged in Codeforce via online-judge-tools, you will get "https://codeforces.com/contest/1312/problem/C". I hope there are more great features will be developed by you!

Thanks,

Full text and comments »

  • Vote: I like it
  • +38
  • Vote: I do not like it

By terraformer, history, 5 years ago, In English

Today, I want to introduce my IDE specialized in programming contest. https://github.com/fukatani/rujaion

online-judge-tools and Qt browser are combined with this IDE, so you can do whole contest task with minimal operations.

Screen shot

Main feature

Contest Task Automation

In browser widget, you can login to contest and if you access the contest problem page, input and output example of the problem is downloaded automatically in the background.

If you want to test your code, you only have to click test button. The test result will be displayed in bottom console widget. (See screen shot.)

Debugging with testcases and submitting are also enable with one click.

Simplicity

Since this project is optimized on programming contest only, the functions supported by a general IDE those unnecessary for the programming contest are omitted.

For example, this IDE supports one file project only. You don't have to write makefile or other build configuration.

Pythonic

This IDE is written by Python and this is smaller project than other IDE, customizing for yourself is easy.

Supported OS:

Currently, Linux only.

Supported Language:

Currently, Rust / C++ / Python is supported.

Supported Contest:

Depends on online-judge-tools. Codeforces, AtCoder, HackerRank, CS Academy, etc.

Installation and detail is here.

https://github.com/fukatani/rujaion#install-to-linux

Thanks!

Full text and comments »

  • Vote: I like it
  • +31
  • Vote: I do not like it