0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Atcoder専用自動化ツール:

Last updated at Posted at 2022-01-03

Atcoder Contest の諸々を自動化するコマンドラインツールを作ってみました

対応言語:C++, Python

できること

  • コンテスト用ディレクトリとファイル(雛形)の自動生成
  • サンプル入出力のダウンロード
  • サンプル入出力を使った、コードの自動テスト
  • テスト結果の視覚化
  • コードの自動提出

この手のツールによくある機能は一通り備えていると思います

類似ツールとの差別化:シンプルな使い心地 を追求

  • ワンコマンドで完結するので、問題を解く以外の作業に頭を使いません。
  • テスト用コマンドを実行、テスト結果を判定、提出用コマンドを実行 といった本質的ではない作業をまとめて自動化します。
  • ヒューマンエラーが生じやすい作業 = 本質的ではない作業 を排除

実行例

実行コマンドと実行結果の画像をいくつか掲載しています。
以下、ABC232 A問題を題材としました。

テストも提出結果もうまくいったとき

image.png

テストが一部正解だったとき

image.png
ACのケースは回答を出力しません。優先度が低いため。
判定結果を色分けすることで視覚的に分かりやすくしています。

テストケース1だけチェックしたいとき

image.png
情報量を減らしたいときは特定のテストケースだけ確認できます

強制的に提出して不正解だったとき

image.png
提出してACではなかったら、提出結果のURLを出力します。vs code ではリンクを押すと飛べます。

導入方法

Ubuntu20lts on WSL環境を想定しています。ほかの環境の場合は適宜読み替えてください。
WSL環境の構築方法はほかの方の記事 に詳しくまとまっています。

github repositoryを好きな場所にクローン

git clone https://github.com/hiranoo/AtcoderContestTool

act_config.jsonを作成

cd hogehoge/AtcoderContestTool/sample
cp act_config.json.sample act_config.json
vi act_config.json

以下4項目について、'hogehoge' となっている部分をご自身の環境に合わせて書き換えてください
- username
- password
- basedir_path(コンテスト用の作業ディレクトリの絶対パス)
- app_path(git clone した場所の絶対パス)

main.py 15行目を書き換え

引数のパスを、本リポジトリをクローンした場所で書き換える

aliasを設定

vi ~/.bashrc

alias act='/hogehoge/AtcoderContestTool/sample/main.py'
  • ファイル末尾に追加
  • hogehogeは、AtcoderContestTool repository をクローンした場所の絶対パス

次のコマンドを実行して、設定を反映

source ~/.bashrc

python library を整備

適宜インストールしてください。インストールコマンド↓

sudo apt install -y LIBRARY

使用しているlibrary一覧(標準パッケージ含む)

  • abc
  • os
  • sys
  • glob
  • shutil
  • time
  • subprocess
  • bs4
  • multiprocessing
  • argparse
  • json
  • requests
  • pickle

templateファイルの変更(OPTIONAL)

雛形となるファイルをご自由に書き換えてください
言語は不問です。

  • 雛形ファイル:AtcoderContestTool/sample/template.cpp
  • ファイル名を変えた場合は、AtcoderContestTool/sample/act_conf.json の "env"."template_filename"を変更

使用方法

例として、Atcoder Beginner Contest 200 に参加する方法を説明します。
※ABC, ARC, AGC 以外の一部のコンテスト(PASTなど)では自動提出ができないことがあります(修正中)

参加したいコンテストのトップページに行き、コンテスト名を入手します。

https://atcoder.jp/contests/hogehoge
hogehoge をコンテスト名とみなします。

Atcoder Beginner Contest 200の場合は、abc200 がコンテスト名です。

コンテスト名を登録(登録作業は一度だけ)。スクレイピングのため時間がかかります。(問題数×1秒くらい)

act --init abc200

※ コンテスト開催前はAtcoderコンテストページの詳細にアクセスできないのでコマンドが失敗します。
※ コンテスト開催中なのにコマンドが失敗する場合は、コンテスト名が間違っている可能性があります。

好きな問題を解いてください

問題を解き終わったら以下コマンドを実行しましょう。提出まで自動で行ってくれます。

act

このコマンドを実行すると以下の処理が行われます。

  • 直前まであなたが作業していたファイルを特定
  • コンパイルが必要な言語で、コンパイルが終わっていない場合、コンパイル。コンパイル失敗時にはエラーメッセージを標準出力して終了。
  • テストでは、サンプルごとにAC, WA, RE, TLE の判定を行い、結果をファイルに保存。並列処理により高速化しているので、手動テストに比べてテスト時間を大幅に削減。
  • テスト結果を標準出力: AC, WA, RE, TLE を色文字で表示するので、ぱっと見で分かりやすくなっています。WA時には誤答と正答を表示。
  • すべてのサンプルをACすれば、そのまま提出されます。

その他の使用方法(抜粋)

  • とりあえずテストだけ行いたい、特定のサンプルだけ結果を見たい (提出はしない)
act -c サンプル番号
  • 解が一意に定まらない問題では、強制的に提出してください
act -s
  • より詳しいオプションの説明は次のコマンドで確認できます
act -h

最後に

ツールが欲しくなった理由

  • typoや、デバッグ用コードの消し忘れ、手動テスト漏れゆえのペナルティが頻発していたため
  • 出力が長いサンプルで、肉眼による正誤判定を間違えることが多かったから
  • コードの誤り と コード以外の提出作業のミス の判別に頭を使うのが不毛だと気付いたから

既存ツールを使わなかった理由

  • 100% 自分好みの機能が欲しかったから
  • そのために既存ツールのラッパーを作るくらいなら、まるごと作る方が勉強になると思ったから
  • オブジェクト指向とデザインパターンを勉強していて、そのアウトプットをしたかったから。

質問・バグ報告等ございましたら、コメント欄にお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?