AtCoder用コンテストのプログラムをローカルで実行するためのプロジェクト作成方法。 cargo-generateを使う方法と、Rustの通常のプロジェクトを使う方法があります。
cargo-generate
cargo-generateを使うと、AtCoder用のプロジェクトを簡単に生成することができます。
参考 プロジェクトを生成する・AtCoderコンテストにRustで参加するためのガイドブック
問題ごとに以下を実行してプロジェクトを作成します。
cargo generate --git https://github.com/rust-lang-ja/atcoder-rust-base --branch ja
実行すると、プロジェクト名を求められるので、プロジェクト名を入力します。
cargo install cargo-generate Project Name:入力した名前のディレクトリが作成されますので、そのディレクトリに移動します。 作成された main.rs を編集して、cargo run で実行できます。
通常プロジェクト
Rustの通常プロジェクトを使う場合は、cargoコマンドで新規プロジェクトを作成します。 そこにbinディレクトリを作成して、コンテスト用ファイルを作成します。 ファイルは複数作成できます。ここではA問題用 a.rs、B問題用 b.rs、 ... f.rs とします。
作成したファイルの実行は、以下のようになります。
cargo run --bin [ファイル名]
例 [プロジェクトディレクトリ]/src/bin/a.rs (ABC問題のA問題用)
cargo run --bin a
プロジェクト作成
プロジェクト用ディレクトリを作成する場合は、以下を実行します。
cargo new [プロジェクト名]
成功するとプロジェクト名のディレクトリが作成されるので、その中に bin ディレクトリを作成します。
例
$ cargo new abc377
Creating binary (application) `abc377` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
$ cd abc377
$ mkdir bin
src/bin ディレクトリに a.rs b.rs ... f.rs のようなコンテスト用ファイルを作成します。
abcXXX --- src --bin --- a.rs
| |- b.rs
| |...
| |- f.rs
|
|
-- Cargo.toml
ライブラリやマクロの設定
プロジェクト作成後に、必要なライブラリやマクロを追加します。
標準入力に proconio を使用する場合は、以下を実行して追加します。
cargo add proconio
AtCoder用ライブラリ ac-library-rs を使う場合は、 プロジェクトディレクトリで以下を実行して追加します。
cargo add ac-library-r
例 今回のプロジェクト作成直後
[package] name = "abc377" version = "0.1.0" edition = "2021" [dependencies]
例 標準入力用のproconio と ac-library-rs を追加した場合
[package] name = "abc377" version = "0.1.0" edition = "2021" [dependencies] ac-library-rs = "0.1.1" proconio = "0.4.5"
実行
以下で実行します。
cargo --bin [拡張子を除いたファイル名]
例 src/bin/a.rs を実行した場合
$ cargo run --bin a
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/a`
正常に実行されると、上記のような入力待ち状態になります。
参考 実行したABC377・A問題用の a.rs のサンプル
use proconio::input;
fn main() {
input! {
s: String,
};
let mut v: Vec<u8> = s.into_bytes();
v.sort();
let t: String = String::from_utf8(v).unwrap();
let ans = if t == "ABC" {
"Yes"
} else {
"No"
};
println!("{}", ans);
}