はじめに
Rust で AtCoder に参加する際に役に立つ cargo-compete の導入方法と基本的な使い方についての解説を行います.新ジャッジ対応版です.
AtCoderがABC314(2023/08/13)から新ジャッジで行われるようになるとともに,cargo-competeでのコードの提出がうまくいかなくなったのでいい機会と思い記事を書いてみました.
以下のURLに示す以前の記事では rust-analyzer
を動作させるために cargo-member
を導入しました.こちらの記事で解説する方法ではcargo-member
を導入せず .vscode
フォルダをコンテストフォルダ(abc314
のような名前のフォルダ)を作成することで rust-analyzer
が動作させる方法を解説します.
注意
Rustのインストールは済んでいるものとします.
記事を書いてる人のOSはWindows,エディタはVSCodeです.環境が違うとうまくいかないことがあるかもしれません.
また,この記事にではcargo-competeでの提出のためにほかに,
のインストールを行います.もっと,スマートな方法もあるかもしれません.また,cargo-competeのアップデートに伴い一部手順が不要になることもあると思われますので最新情報にはご留意ください.
各種インストール
アップデート,インストールには時間がかかる場合があります.
Rustのバージョンが古いとインストール等うまくいかない場合があるので以下のコマンドで適宜アップデートしておきましょう.筆者の現在(23/08/20時点)のバージョンは russtup(1.26.0)
, rustc(1.71.1)
, cargo(1.71.1)
となっています.
> rustup update
次に,cargo-udeps
, cargo-equip
, cargo-compete
をインストールします.
> cargo install cargo-udeps
> cargo install cargo-equip
> cargo install cargo-compete
以上で必要なツールのインストールは終わりです.
環境構築
プロジェクト作成
各コンテスト用のコンテストフォルダを管理するためのプロジェクトフォルダrust-coder
を作成し,作成したフォルダに移動します.提出用フォルダの名前はrust-coder
としていますがフォルダ名はなんでも大丈夫です.
> mkdir rust-coder
> cd rust-coder
次に,作成したフォルダ内で以下のコマンドを入力します.
> cargo compete init atcoder
途中で出る選択肢は,自分の環境に合わせて選んでください.筆者は,2の選択肢を選びました.大抵は2で大丈夫だと思います.
これで,フォルダ内に以下に示すようなフォルダやファイルが作成されます(cargo-compete v0.10.6現在).
.cargo # フォルダ
compete.toml # ファイル
template-cargo-lock.toml # ファイル
ここに,手動でCargo.toml
を追加します.追加後は以下のようになります.
.cargo # フォルダ
Cargo.toml # ファイル
compete.toml # ファイル
template-cargo-lock.toml # ファイル
設定ファイル編集
compete.toml
の編集を行います.
[template]の項目を次のように編集します.
[template]
src = '''
use proconio::{
input,
fastout,
};
#[fastout]
fn main() {
input! {}
}
'''
以上の[template]はこの後出るcargo compete new practice
のコマンドを入力したときに生成される提出用のソースコードファイルのテンプレートとなります.
[test]の項目にあるtoolchainをコメントアウトします.編集後は以下のようになります.
[test]
# Toolchain for the test. (optional)
# toolchain = "1.42.0"
# Profile for `cargo build`. ("dev" | "release")
#
# Defaults to `"dev"`.
#profile = "dev"
[submit]の項目を次のように編集します.
[submit]
kind = "command"
args = ["cargo", "equip", "--exclude-atcoder-crates", "--remove", "docs", "--minify", "libs", "--bin", "{{ bin_name }}"]
language_id = "5054"
これで,環境構築は終了です.次は,practiceで提出,ACするまでの流れに沿って基本的な使い方を説明していきます.
cargo-competeの基本的な使い方 (コンテストフォルダ作成 ~ ACまで)
> cargo compete --help
のコマンドを入力してみてください.
コンテストフォルダの作成
ターミナルからのコマンド入力をしていきます.はじめに,以下のコマンドでコンテストフォルダの作成を行います.
> cargo compete new practice
次に,コンテストフォルダ内で.vscode
フォルダの作成を行い,さらにそのフォルダ内でsettings.json
ファイルを作成します.省略/practice/.vscode/settings.json
のようになっています.ファイルの内容は以下の通りです.
{
"rust-analyzer.checkOnSave.command": "clippy",
"rust-analyzer.checkOnSave.extraArgs": ["--", "-A", "clippy::needless_return"]
}
コード作成とテスト,提出
はじめにログインを行います.以下のコマンドを入力後表示されるプロンプトに従ってAtCoderのID,パスワードをそれぞれ入力して下さい.
> cargo compete login atcoder
コンテストフォルダ内の a.rs にてa問題用のコードを編集します.
use proconio::{
input,
fastout,
};
#[fastout]
fn main() {
input! {
a: usize,
(b, c): (usize, usize),
s: String,
}
println!("{} {}", a + b + c, s);
}
プログラムがかけたら,テストケースを試します.以下のpracice
フォルダに移動し,コマンドを実行することでテストケースを通過するかチェックすることができます.
> cd practice
> cargo compete test a
テスト確認後は次のコマンドから提出を行います.
cargo compete submit a
問題なければ,コードが提出されACするはずです.
お疲れ様でした.これで環境構築と基本的な使い方の説明は終わりです.
終わりに
以降コンテスト参加する際はプロジェクト作成のところで作成したrust-coder
フォルダ内で
> cargo compete new abc315
といったような形で,コンテストフォルダを追加し管理することができます.
もっと詳しく知りたい場合は,公式のリポジトリを参照してみてください.
おまけ
以下の記事で,よりcargo-competeを快適に使う方法が紹介されていました.私もこの記事を参考にして環境設定を行っています.こちらも見てみるといいかもしれません.ただし,Windowsではpowershellやデフォルトのコマンドプロンプトではシェルスクリプトは実行できなかった気がします.適宜バッチファイルに読み替えるか,必要なツールを導入するかしましょう.私は
GitBashを使っています.