aoc2024/day07.sh
2024-12-07 18:42:37 +01:00

53 lines
967 B
Bash

#!/usr/bin/env bash
unset PATH
readonly PATH
source ./utils/main.sh
source ./utils/array.sh
NUM_JOBS="\j"
solve() {
local part="$1" target="$2" curr="$3" rest=("${@:4}")
((${#rest[@]} == 0)) && {
((curr == target)) && echo "$target" && return 0
return 1
}
solve "$part" "$target" "$((curr + rest[0]))" "${rest[@]:1}" ||
solve "$part" "$target" "$((curr * rest[0]))" "${rest[@]:1}" || {
((part == 1)) && return 1
solve "$part" "$target" "${curr}${rest[0]}" "${rest[@]:1}"
}
}
do_part() {
local part="$1" result=0
while read -r num; do
((result += num))
done < <(
while read -r line; do
while ((${NUM_JOBS@P} >= 16)); do wait -n; done
{
local nums=() target
read -ra nums <<<"${line#*: }"
target="${line%:*}"
solve "$part" "$target" "${nums[@]}"
} &
done
wait
)
printf '%d' "$result"
}
p1() {
do_part 1 <<<"$1"
}
p2() {
do_part 2 <<<"$1"
}
main "$@"