💭
Dockerを使ったRustのAtCoder環境構築
RustでAtCoderを始めようと思い環境構築をしたので、そのメモ。
DockerでRustの環境を構築する手順
cargo-competeが便利そうだったので導入しました。
Docerfileの作成
RustのバージョンはAtCoderと合わせました。
Dockerfile
FROM rust:bullseye
RUN cargo install cargo-compete \
&& rustup install 1.42.0 \
&& rustup default 1.42.0
composeファイルの作成
composeファイルは無くてもいいのですが、volumeやコンテナの中に入って作業しやすいように書きました。
compose.yaml
services:
abc:
build: .
tty: true
volumes:
- ./:/work
working_dir: /work
Dockerイメージのビルドと起動
docker compose up -d
AtCoderの問題を解くための設定
cargo-competeを使うための設定をします。
初期化
cargo compete init atcoder
選択肢が出てきたら2を選択します。
login
cargo compete login atcoder
usernameとpasswordを入力。
テンプレートの編集
ファイルを生成するときのテンプレートを設定できます。
compete.tomlの23行目あたりに書いてあります。
compete.toml
[template]
src = '''
fn main() {
todo!();
}
'''
最初はこの様になっているので適宜変更しましょう。
よく使うコマンド
プロジェクトを作成してAtCoderのページを開く
--openとつけることで問題のページも開いてくれるようになります。
cargo compete new --open abc081
以下のようなディレクトリ構造になっています。
abc163
├── src
│ └── bin
│ ├── a.rs
│ ├── b.rs
│ ├── c.rs
│ └── d.rs
├── testcases
├── Cargo.lock
└── Cargo.toml
特定の問題だけのプロジェクトにしたい時は --problemsとつけます。
以下の例ではaとbの問題だけです。
cargo compete new --problems a b --open abc081
テストを実行
cargo compete test a
テストして提出する
cargo compete submit a
addコマンドを使えるようにする(追記)
プロジェクトを作成する際に問題を指定したとき(--problems)に、あとから問題を追加できるようにします。
compete.tomlを開いて以下を追加してください。
compete.toml
[add]
url = 'https://atcoder.jp/contests/{{ args[0] }}/tasks/{{ args[0] }}_{{ args[1] }}'
bin-name = '{{ args[0] }}-{{ args[1] }}'
bin-alias = '{{ args[1] }}'
bin-src-path = 'src/bin/{{ bin_alias }}.rs'
問題を追加する
追加したいプロジェクトに移動して一問ずつ追加してください。
cd abc081
cargo compete add abc081 c
Discussion