好奇心の赴くままに

好奇心の赴くままに

やりたいことを書いています。

atcoder-cli,online-judge-toolsを入れてAtCoderのローカル自動テスト環境を構築した

※2022/1/9 ojにPATHが通らない場合の手順追加

きっかけ

最近コーディングテスト対策で毎日AtCoderの問題を解いているのですが、 毎回のサンプルテスト実行が面倒でした。
そこで、ローカル環境で自動テストを実行できるツールを インストールして自動テスト環境を構築してみました。

検証環境

  • WSL2(Ubuntu20.04)

  • VSCode

  • Python 3.8.5

  • pip 20.0.2

  • npm 8.1.4

種類

調べたところどうやら以下の2強みたいです。

これさえインストールすれば、対象の問題情報ダウンロードからSubmitまでやってくれるので便利

github.com

二つ入れる必要があるが、コマンド名も短く、使いやすい

github.com github.com

手順

最初は使うツールの少ないatcoder-toolsを試したのですが、

バグ(https://github.com/kyuridenamida/atcoder-tools/issues/204)でsubmitできなかったのであきらめて atcoder-cli,online-judge-toolsを使って環境構築を進めました。

環境構築

# atcoder-cliのインストール
$ npm install -g atcoder-cli

# online-judge-toolsのインストール
$ pip3 install online-judge-tools

# atcoder-cliのインストール確認(ヘルプ一覧が表示されればOK)
$ acc -h

# online-judge-toolsのインストール確認(ヘルプ一覧が表示されればOK)
※`Command 'oj' not found`と出る場合は以下のサイトの手順7を参照してPATHを通す。
[https://github.com/online-judge-tools/oj/blob/master/docs/INSTALL.ja.md]
$ oj -h

# accとojが連携できているか確認( availableならOK)
$ acc check-oj

# accでatcoderにログイン
$ acc login

? username: xxxxxxx
? password: [hidden]
OK

# ojでatcoderにログイン(Seleniumが入ってない場合、エラーが出ますが、無視してOK)
$ oj login https://beta.atcoder.jp/

(省略)

Username: xxxxxx
Password: 

(省略)

[SUCCESS] You have already signed in.

実際に使ってみる

今回は実際にローカル上で以下の問題をコード作成、テスト実行、提出までやってみます。

atcoder.jp

まず、問題一式をダウンロードします。

f:id:kamada-math:20211216000615p:plain

acc new の後にatcoder.jp/contest/の後にくるコンテストIDを入れて実行してください。(今回だとabs)

acc new abs

※途中ダウンロードする問題を選択場面があるので、今回はPracticeAを選んでください。

次に実際に今回の提出するコードを書きます。

testsディレクトリと同じ階層にpractice.pyとして今回の提出コードを作成します。

# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

作成後、以下のようなディレクトリ構成になっています。

$ tree

.
└── abs
    ├── contest.acc.json
    └── practicea
        ├── practice.py←今回の提出コード
        └── tests←テストケースの入ったディレクトリ
            ├── sample-1.in
            ├── sample-1.out
            ├── sample-2.in
            └── sample-2.out

ここで、実際にテストを実行してみます。

# 提出コードのある階層まで移動
$ cd ./abs/practicea/

# 実際にテスト実行(cオプションでpython実行のコマンド、dオプションでtestケースディレクトリを指定します。)
$ oj t -c "python3 ./practice.py" -d ./tests/

[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.0)
[INFO] 2 cases found

[INFO] sample-1
[INFO] time: 0.047150 sec
[SUCCESS] AC

[INFO] sample-2
[INFO] time: 0.046449 sec
[SUCCESS] AC

[INFO] slowest: 0.047150 sec  (for sample-1)
[INFO] max memory: 9.120000 MB  (for sample-1)
[SUCCESS] test success: 2 cases

問題ないので、実際に提出します。

acc submit (提出ファイル名)で提出できます。

途中で確認のため、typeする必要があるので、言われた通りにtypeします。

$ acc submit practice.py 

(省略)

Are you sure? Please type "pra1" pra1 

(省略)

提出後、自動でブラウザが開いて提出結果を確認できます。

f:id:kamada-math:20211216000650p:plain

参考

hamukichi.hatenablog.jp

atcoder初心者こそ環境構築しよう!(atcoder-cli,online-judge-toolsのインストール、使い方) - Qiita