diff options
author | mhsn <mail@mhsn.net> | 2025-04-30 21:40:41 +0100 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2025-04-30 21:40:41 +0100 |
commit | 4f9faaa646ba63cb4b6aa29738bbae7a6b4ff132 (patch) | |
tree | 8db96109abe69242a8a4fecf638a3b39f4993e20 | |
parent | 07b66483fbb762209d645b5aa406145b9ede0b2c (diff) | |
download | aoc-4f9faaa646ba63cb4b6aa29738bbae7a6b4ff132.tar.gz aoc-4f9faaa646ba63cb4b6aa29738bbae7a6b4ff132.zip |
clean up shell scripts
-rwxr-xr-x | bench | 52 | ||||
-rwxr-xr-x | check | 40 | ||||
-rwxr-xr-x | init | 23 |
3 files changed, 77 insertions, 38 deletions
@@ -1,30 +1,48 @@ #!/usr/bin/env sh -year=$1 -day=$2 -lang=$3 -input=$4 +usage="usage: bench <year> <day> <language> <testfile> [<warmups>]" +year=${1?$usage} +day=${2?$usage} +lang=${3?$usage} +input=${4?$usage} warmups=${5:-0} +# get directory of this script script=$(readlink -f "$0") script_path=$(dirname "$script") -aoc_path=$script_path/$1/$2 -data_path="$aoc_path/data/$4.txt" +# find aoc and data paths +aoc_path=$script_path/$year/$day +data_path="$aoc_path/data/$input.txt" -# Check it is correct -$script_path/check $1 $2 $3 $4 >/dev/null +# check solution is correct for this input +$script_path/check $year $day $lang $input >/dev/null [ ! $? ] && echo "Incorrect solution" && exit 1 -if [ $lang = "python" ]; then - exec="python $aoc_path/python/main.py" -elif [ $lang = "rust" ]; then - # Compile first - cargo build --release --target-dir /tmp/aoc_rust --manifest-path $aoc_path/rust/Cargo.toml +case $lang in +"python") + # Sync to create venv + uv sync \ + --directory $aoc_path/python + # Bypass any `uv run` overhead and run .venv directly + exec="$aoc_path/python/.venv/bin/python $aoc_path/python/main.py" + ;; +"rust") + # Compile to /tmp/aoc_rust and run binary + cargo build \ + --release \ + --target-dir /tmp/aoc_rust \ + --manifest-path $aoc_path/rust/Cargo.toml exec="/tmp/aoc_rust/release/aoc_$year-$day" -else - echo "Unknown lang: $lang" + ;; +*) + echo "unknown lang: $lang" exit 1 -fi + ;; +esac -hyperfine --shell=none --warmup=$warmups --input=$data_path "$exec" +hyperfine \ + --shell none \ + --warmup $warmups \ + --input $data_path \ + "$exec" @@ -1,24 +1,34 @@ #!/usr/bin/env sh -year=$1 -day=$2 -lang=$3 -input=$4 +usage="usage: check <year> <day> <language> <testfile>" +year=${1?$usage} +day=${2?$usage} +lang=${3?$usage} +input=${4?$usage} +# get directory of this script script=$(readlink -f "$0") script_path=$(dirname "$script") -aoc_path=$script_path/$1/$2 -data_path="$aoc_path/data/$4.txt" +# find aoc and data paths +aoc_path=$script_path/$year/$day +data_path="$aoc_path/data/$input.txt" -if [ $lang = "python" ]; then - got=$(cat $data_path | python $aoc_path/python/main.py) -elif [ $lang = "rust" ]; then - got=$(cat $data_path | cargo run --manifest-path $aoc_path/rust/Cargo.toml --) -else - echo "Unknown lang: $lang" +case $lang in +"python") + cmd="uv run --directory $aoc_path/python main.py" + ;; +"rust") + cmd="cargo run --manifest-path $aoc_path/rust/Cargo.toml --" + ;; +"*") + echo "unknown lang: $lang" exit 1 -fi + ;; +esac -echo "$got" | diff $aoc_path/data/$4.ans - && echo Solved wtih $lang! -echo $got +result=$(cat $data_path | $cmd) + +echo "$result" | diff $aoc_path/data/$4.ans - && echo Solved wtih $lang! +echo -e "\n---stdout---" +echo "$result" @@ -1,17 +1,19 @@ #!/usr/bin/env sh -year=$1 -day=$2 +usage="usage: init <year> <day>" +year=${1?$usage} +day=${2?$usage} +# get directory of this script script=$(readlink -f "$0") script_path=$(dirname "$script") -aoc_path=$script_path/$1/$2 +aoc_path=$script_path/$year/$day mkdir --parents $aoc_path +# Data directory if [ ! -d $aoc_path/data ]; then - # Data directory mkdir --parents $aoc_path/data for f in "test" "aoc"; do touch "$aoc_path/puzzle.txt" @@ -22,14 +24,23 @@ fi # Python if [ ! -d $aoc_path/python ]; then - mkdir --parents $aoc_path/python + uv init \ + --vcs none \ + --name "aoc_$year-$day" \ + --no-pin-python \ + --no-readme \ + --description "advent of code $year-$day" \ + "$aoc_path/python" cp "$script_path/template/main.py" "$aoc_path/python/main.py" echo "*" >"$aoc_path/python/.gitignore" fi # Rust if [ ! -d $aoc_path/rust ]; then - cargo new "$aoc_path/rust" --vcs none --name "aoc_$year-$day" + cargo new \ + --vcs none \ + --name "aoc_$year-$day" \ + "$aoc_path/rust" cp "$script_path/template/main.rs" "$aoc_path/rust/src/main.rs" echo "*" >"$aoc_path/rust/.gitignore" fi |