day02
This commit is contained in:
parent
8fea880ef9
commit
3794911eef
58
day02.sh
Executable file
58
day02.sh
Executable 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 "$@"
|
Loading…
x
Reference in New Issue
Block a user