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); }