コマンドラインで AtCoder のテストケース取得、テスト、提出までを行う

はじめに

atcoder-cli, online-judge-tools でターミナル上 (Mac) でテストケース取得、テスト、提出まで行う手順です。

事前準備

必要なツールのインストール

$ pip3 install online-judge-tools
$ npm install -g atcoder-cli
$ pip3 install selenium

ツールで AtCoder へログイン

$ acc login
$ oj login https://atcoder.jp/

設定

全部の問題ディレクトリが作られるようにする。例えば、AtCoder Begginer Contest の場合、acc new abcXXX コマンドで a ~ f の問題が作成されるようにする

$ acc config default-task-choice all

config ディレクトリの場所を表示

$ acc config-dir

テンプレート設定を行う。config ディレクトリに template 名のフォルダを作成し、その中にテンプレートのソースコード (例:main.py)と、テンプレートの設定ファイル(template.json)を作成する。

# config ディレクトリへ移動
$ cd /Users/xxxxxxxxxx/Library/Preferences/atcoder-cli-nodejs
$ mkdir py
$ cd py
$ touch main.py template.json
# 問題のディレクトリを作った時に、main.py が作成され、提出対象も main.py とする
$ vim template.json
$ cat template.json 
{
  "task":{
    "program": ["main.py"],
    "submit": "main.py"
  }
}

# main.py が作成された時のデフォルト設定を編集する。
# `#!/usr/bin/env python3` は必要。自分の場合はよくある入力パターンをデフォルトで書き込んでいる。
$ vim main.py
$ cat main.py 
#!/usr/bin/env python3
S = input()
N = int(input()) 
S = input().split()
A, B, C = input().split()
L = list(map(int, input().split()))
H, N = map(int, input().split())

# デフォルトのテンプレートの設定を py にする (py ディレクトリで設定したファイルが適用)
$ acc config default-template py

# テンプレートの確認
$ acc templates
search template directories in /Users/xxxxxxxxxx/Library/Preferences/atcoder-cli-nodejs
NAME  SUBMIT-PROGRAM
py    main.py

ディレクトリ作成

下記の例は、AtCoder Bergginer Contest 154 のディレクトリを作成する場合。main.py とテストの入力と出力のファイルが作成される。

$ acc new abc154
$ tree
.
├── a
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       └── sample-2.out
├── b
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── c
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── contest.acc.json
├── d
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       └── sample-3.out
├── e
│   ├── main.py
│   └── tests
│       ├── sample-1.in
│       ├── sample-1.out
│       ├── sample-2.in
│       ├── sample-2.out
│       ├── sample-3.in
│       ├── sample-3.out
│       ├── sample-4.in
│       └── sample-4.out
└── f
    ├── main.py
    └── tests
        ├── sample-1.in
        ├── sample-1.out
        ├── sample-2.in
        └── sample-2.out

12 directories, 41 files

テスト

プログラムが完成したら online-judge-tools にてテストを行う (atcoder-cli にはテストのコマンドは無い)

$ oj t -c "python3 main.py" -d ./tests/

提出

問題のディレクトリにて下記コマンドを行うことで自動で AtCoder のページに飛んで提出する。

$ acc s

参考