#!/usr/bin/bash set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" run_solution() { if [ -d "$solution" ]; then runfile=$solution/run.sh [ -f "$runfile" ] || { echo "Error: $runfile not found" >&2; exit 1; } "$runfile" "$input" 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 day in day*; do input=data/$day.input expected=data/$day.expected for solution in "$day"/*; 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