From ec694c32c74ee547e873898fa08e4dc0ba28109c Mon Sep 17 00:00:00 2001 From: bdnugget Date: Sun, 7 Dec 2025 22:21:26 +0100 Subject: [PATCH] Day 1 part 2 --- 01/poop.sh | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/01/poop.sh b/01/poop.sh index c42dad4..cf912df 100755 --- a/01/poop.sh +++ b/01/poop.sh @@ -9,17 +9,23 @@ main() { local dial=50 local count_exact_zero=0 local count_passed_zero=0 - local prev dir num line + local prev dir num line crossings while IFS= read -r line; do prev=$dial dir="${line:0:1}" num="${line:1}" - # apply rotation + # apply rotation and count zero crossings before modulo wrap if [[ "$dir" == L ]]; then + if (( prev == 0 )); then + crossings=$(( num / 100 )) + else + crossings=$(( (num - prev + 100) / 100 )) + fi dial=$(( dial - num )) else + crossings=$(( (prev + num) / 100 )) dial=$(( dial + num )) fi @@ -28,21 +34,11 @@ main() { # count zero hits (for part 1) if (( dial == 0 )); then - ((count_exact_zero+=1)) + count_exact_zero=$(( count_exact_zero + 1 )) fi - # check if we passed 0 (for part 2) - if [[ "$dir" == L ]]; then - # moving left: crossed 0 if new dial < prev - if (( dial > prev )); then - ((count_passed_zero+=1)) - fi - else - # moving right: crossed 0 if new dial < prev - if (( dial < prev )); then - ((count_passed_zero+=1)) - fi - fi + # count how many times we passed 0 (for part 2) + count_passed_zero=$(( count_passed_zero + crossings )) #done < example.txt done < input.txt