This commit is contained in:
Patrick Michl 2024-12-05 12:42:59 +01:00
parent 843f0211b6
commit 3844e5c87c
No known key found for this signature in database
GPG Key ID: BFE0ACEE21CD5EB0

76
day05.sh Executable file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env bash
unset PATH; readonly PATH
source ./utils/main.sh
p1() {
local input="$1" result=0 pages=() line
local -A rules=()
while read -r line; do
[[ -z "$line" ]] && continue
case "$line" in
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}");;
*) pages+=("$line");;
esac
done <<< "$input"
for page in "${pages[@]}"; do
local page_arr
IFS=, read -ra page_arr <<< "$page"
for ((i=0; i < ${#page_arr[@]}; i++)); do
local current_page="${page_arr[i]}"
local current_rules="${rules["$current_page"]:-}"
[[ -z "${current_rules:-}" ]] && continue
for ((j=0; j < ${#page_arr[@]}; j++)); do
[[ "$current_rules" =~ ${page_arr[j]} ]] && ((j < i)) && continue 3
done
done
result="$((result + ${page_arr[$(((${#page_arr[@]} - 1) / 2))]}))"
done
printf '%s' "$result"
}
p2() {
local input="$1" result=0 pages=() line
local -A rules=()
while read -r line; do
[[ -z "$line" ]] && continue
case "$line" in
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}");;
*) pages+=("$line");;
esac
done <<< "$input"
for page in "${pages[@]}"; do
local page_arr incorrect='false'
IFS=, read -ra page_arr <<< "$page"
for ((i=0; i < ${#page_arr[@]}; i++)); do
local current_page="${page_arr[i]}"
local current_rules="${rules["$current_page"]:-}"
[[ -z "${current_rules:-}" ]] && continue
for ((j=0; j < ${#page_arr[@]}; j++)); do
if [[ "$current_rules" =~ ${page_arr[j]} ]] && ((j < i)); then
local removed_elem="${page_arr[j]}"
read -ra page_arr <<< "${page_arr[*]/"$removed_elem"}"
page_arr=("${page_arr[@]:0:$i}" "$removed_elem" "${page_arr[@]:$i}")
incorrect='true'
((i--))
((j--))
fi
done
done
[[ "$incorrect" == 'true' ]] && result="$((result + ${page_arr[$(((${#page_arr[@]} - 1) / 2))]}))"
done
printf '%s' "$result"
}
main "$@"