This commit is contained in:
Patrick Michl 2024-12-02 11:25:39 +01:00
parent 8fea880ef9
commit 3794911eef
No known key found for this signature in database
GPG Key ID: BFE0ACEE21CD5EB0

58
day02.sh Executable file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env bash
unset PATH; readonly PATH
source ./utils/main.sh
source ./utils/array.sh
is_report_valid() {
local report=() current_sign='' i=0
read -ra report <<< "$1"
for (( i = 0; i < ${#report[@]} - 1; i++ )); do
local a="${report[i]}" b="${report[i+1]}" diff='' sign=''
diff="$((a - b))"
((${diff#-} >= 1 && ${diff#-} <= 3)) || return 1
if ((diff > 0)); then
sign='+'
else
sign='-'
fi
[[ -z "${current_sign:-}" ]] && current_sign="$sign"
[[ "$sign" != "$current_sign" ]] && return 1
done
return 0
}
p1() {
local input="$1" result=0 line=''
while read -r line; do
is_report_valid "$line" && ((result++))
done <<< "$input"
printf '%d' "$result"
}
p2() {
local input="$1" result=0 line=''
while read -r line; do
local original_report
read -ra original_report <<< "$line"
is_report_valid "$line" && ((result++)) && continue
for (( i = 0; i < ${#original_report[@]}; i++ )); do
local report
report=("${original_report[@]::"$i"}" "${original_report[@]:"$((i+1))"}")
is_report_valid "${report[*]}" && ((result++)) && continue 2
done
done <<< "$input"
printf '%d' "$result"
}
main "$@"