From 3794911eef902a6d153d31c4b467d37adcc27e32 Mon Sep 17 00:00:00 2001 From: Patrick Michl Date: Mon, 2 Dec 2024 11:25:39 +0100 Subject: [PATCH] day02 --- day02.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 day02.sh diff --git a/day02.sh b/day02.sh new file mode 100755 index 0000000..3a1d95e --- /dev/null +++ b/day02.sh @@ -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 "$@"