60 lines
1.2 KiB
Bash
Executable File
60 lines
1.2 KiB
Bash
Executable File
#!/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 "$@"
|