#!/usr/bin/bash set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" YEAR=2020 export COMMON_DIR="$(realpath common)" run_solution() { if [ -d "$solution" ]; then if [ -f "$solution/Cargo.toml" ]; then cargo run --quiet --manifest-path "$solution/Cargo.toml" < "$input" else runfile=$solution/run.sh [ -f "$runfile" ] || { echo "Error: $runfile not found" >&2; exit 1; } "$runfile" "$input" fi else case "$(basename "$solution")" in *.hs) runhaskell -icommon "$solution" < "$input" ;; *.py) python "$solution" < "$input" ;; *) echo "Error: Unknown solution type: $solution" >&2 exit 1 ;; esac fi } shopt -s dotglob nullglob for n in $(seq 1 25); do input=$YEAR/data/day$n.input expected=$YEAR/data/day$n.expected for solution in "$YEAR/day$n"/*; do echo -n "$solution... " case "${solution##*/}" in example*) echo SKIP continue esac solution_output=$(mktemp) trap "rm -f '$solution_output'" EXIT run_solution "$solution" > "$solution_output" if ! diff -u "$expected" "$solution_output"; then echo FAIL rv=$? case "$rv" in 1) exit 2 ;; *) exit 1 ;; esac else echo ok fi rm "$solution_output" done done