はじめに・動機
普段自分はRustでAtCoderを遊んでいます。
Rustだとサードパーティ製のツールも結構充実していて、ローカルでのテストができるツールはすでに、cargo-competeやcargo-atcoderなど様々あります。
これらは本当に素晴らしいツールで自分もコンテスト参加時にはこれらを活用させてもらっているのですが、
これらのツールははじめにコンテスト名のプロジェクトをnewして作らなければならないのがちょっと大変です。
というのも、自分は普段E~F問題を中心に練習しており、1つのRustプロジェクト内でコードを書いては削除するスタイルを取っています。しかし、上記ツールは事前にコンテスト名ごとの新規プロジェクト作成が必要です。
このような状況でもローカルでサンプルテストの自動実行はやりたいと思い、自分用に問題を指定してテストを実行できるcliツール(cargo-acj)を作りました。
ソースコード
以下大したことはしていないソースコードです。
挙動
cargo acj <contestName> <problemId>
を実行すると以下のような感じで動きます。
不正解の時は入力(input)、想定出力(expected)、実際の出力(actual)を表示します。
また、おおよその実行時間を計測しており、実行が一定時間終了しなければTLEとして実行を打ち消すようにもしています。
インストール、オプション
興味本位でcrate.ioにpublishしたので、cargo installで入ります。
cargo install cargo-acj
オプションは以下の通りです。(readmeからのコピペです)
arg | 概要 |
---|---|
contestName | コンテスト名 (abc123, typical90など) |
problemId | 問題のID(A問題だったらa, Ex問題だったらhなど) |
bin(任意) | 実行するbin(指定しなければmainで実行) |
tle(任意) | 実行を打ち切る時間(指定しなければ2秒が指定される) |
終わりに
これで普段の精進が捗りそうです。
もしよければお使いください。
やる気がでたら他の言語への対応もできたらなと思っています...!