atcoder-cli,online-judge-toolsを入れてAtCoderのローカル自動テスト環境を構築した
※2022/1/9 ojにPATHが通らない場合の手順追加
きっかけ
最近コーディングテスト対策で毎日AtCoderの問題を解いているのですが、
毎回のサンプルテスト実行が面倒でした。
そこで、ローカル環境で自動テストを実行できるツールを
インストールして自動テスト環境を構築してみました。
検証環境
種類
調べたところどうやら以下の2強みたいです。
- atcoder-tools
これさえインストールすれば、対象の問題情報ダウンロードからSubmitまでやってくれるので便利
二つ入れる必要があるが、コマンド名も短く、使いやすい
手順
最初は使うツールの少ない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.
実際に使ってみる
今回は実際にローカル上で以下の問題をコード作成、テスト実行、提出までやってみます。
まず、問題一式をダウンロードします。
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 (省略)
提出後、自動でブラウザが開いて提出結果を確認できます。
参考
atcoder初心者こそ環境構築しよう!(atcoder-cli,online-judge-toolsのインストール、使い方) - Qiita