Rust で AtCoder やるときのフォルダ構成決まった

前提

  • 基本的に ABC しかやっていない
  • ABC 以外の問題が出たときに同じような構成で楽がしたい

Tree

  • 1 以外にもあるがでかいので割愛
    .
    ├── ABC
    │   └── 1
    │       ├── Cargo.toml
    │       └── src
    │           ├── a.rs
    │           ├── b.rs
    │           ├── c.rs
    │           ├── d.rs
    │           ├── e.rs
    │           ├── ex.rs
    │           ├── f.rs
    │           └── g.rs
    ├── Cargo.lock
    ├── Cargo.toml
    change_abc_target.sh
    └── abc_prepare.sh

abc_prepare.sh の中身

if [ -z "" ]; then
    echo "You should set contest number"
    exit 1
fi
mkdir -p ABC/\
mkdir -p ABC/\/src
touch ABC/\/Cargo.toml
echo "[package]
name = \"abc_$1\"
version = \"0.1.0\"
authors = [\"root\"]
edition = \"2018\"

[dependencies]
proconio = \"0.4.5\"
itertools = \"0.10.5\"
ac-library-rs = \"0.1.1\"" > ABC/\/Cargo.toml

alphabet=(A B C D E F G Ex)
for abc in ${alphabet[@]}; do
    lower_case=$(echo $abc | tr 'A-Z' 'a-z')
    touch ABC/\/src/$lower_case.rs

    echo "
[[bin]]
name = \"$lower_case\"
path = \"src/$lower_case.rs\"" >> ABC/\/Cargo.toml

    echo "use proconio::input;

fn main(){
    input!{

    };
}" > ABC/\/src/$lower_case.rs
done

echo "[workspace]
members = [
    \"ABC/\\",
    \"ironclad_rule\"
]" > Cargo.toml;

ルートの Cargo.toml の中身

[workspace]
members = [
    "ABC/1",
    "ironclad_rule"
]
  • ironclad_rule については鉄則本を進めていく中でいちいちルートの Cargo.toml が変更されるのが嫌だったためここだけ指定
  • ABC/1 で番号を指定している理由は不要に rust-analyzer が動かないでほしかったため

change_abc_target.sh の中身

if [ -z "" ]; then
    echo "You should set contest number"
    exit 1
fi

echo "[workspace]
members = [
    \"ABC/\\",
    \"ironclad_rule\"
]

resolver = \"2\"" > Cargo.toml;
  • target の ABC の番号だけ変えるためにつかってる

コンテスト参加時に以下を実行

bash abc_prepare.sh 1(コンテストの番号)
  • ここでその回のコンテストの a ~ g の .rs を作成して proconio::input を書き込む

実行時

  • 該当のコンテストナンバーに移動
  • それぞれの問題のファイルを指定して実行
    cd ABC/1
    cargo run --bin a

TODO

  • テストいい感じに書けるようにしてぇ~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA