7
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?

AtCoderの問題を指定してサンプルテストを自動実行できるツールを作った(Rust)

Posted at

はじめに・動機

普段自分はRustでAtCoderを遊んでいます。
Rustだとサードパーティ製のツールも結構充実していて、ローカルでのテストができるツールはすでに、cargo-competeやcargo-atcoderなど様々あります。

これらは本当に素晴らしいツールで自分もコンテスト参加時にはこれらを活用させてもらっているのですが、
これらのツールははじめにコンテスト名のプロジェクトをnewして作らなければならないのがちょっと大変です。

というのも、自分は普段E~F問題を中心に練習しており、1つのRustプロジェクト内でコードを書いては削除するスタイルを取っています。しかし、上記ツールは事前にコンテスト名ごとの新規プロジェクト作成が必要です。

このような状況でもローカルでサンプルテストの自動実行はやりたいと思い、自分用に問題を指定してテストを実行できるcliツール(cargo-acj)を作りました。

ソースコード

以下大したことはしていないソースコードです。

挙動

cargo acj <contestName> <problemId> を実行すると以下のような感じで動きます。
不正解の時は入力(input)、想定出力(expected)、実際の出力(actual)を表示します。
また、おおよその実行時間を計測しており、実行が一定時間終了しなければTLEとして実行を打ち消すようにもしています。

gif.gif

インストール、オプション

興味本位で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秒が指定される)

終わりに

これで普段の精進が捗りそうです。
もしよければお使いください。
やる気がでたら他の言語への対応もできたらなと思っています...!

7
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
7
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?