From ec2c4a97c97a31ad9dddfe489b9c2f20bc2cbb48 Mon Sep 17 00:00:00 2001 From: Clement Date: Mon, 9 Dec 2024 00:53:38 +0800 Subject: [PATCH] Not working part 2 --- 2024/day-8/solution-2.sh | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 2024/day-8/solution-2.sh diff --git a/2024/day-8/solution-2.sh b/2024/day-8/solution-2.sh new file mode 100644 index 0000000..b52af9a --- /dev/null +++ b/2024/day-8/solution-2.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +FILE=input +LEN=$( head -1 "$FILE" | sed -E 's/(.)/\1\ /g' | awk '{printf NF}' ) + +read -r -a MAP_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )" +read -r -a SHADOW_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )" +#printf "MAP_LEN: %s, NF: %s\n" "${#MAP_ARRAY[@]}" "$LEN" >&2 + +for CHAR in $( < "$FILE" grep -Eo '[^\.]' | sort -u | paste -s -d' ' ) +do + # Get indices for antennae + LINE="$( + for (( i=0; i<${#MAP_ARRAY[@]}; i++ )) + do + if [[ ${MAP_ARRAY[i]} == "$CHAR" ]] + then + printf "%s " "$i" + fi + done + )" + #printf "%s\n" "$LINE" >&2 + read -r -a IDX_ARRAY <<< "$LINE" + #printf "idx: %s " "${IDX_ARRAY[@]}" >&2 + #printf "\n" >&2 + + # Get all combinations + for (( i=0; i<${#IDX_ARRAY[@]}-1; i++ )) + do + A=${IDX_ARRAY[i]} + for (( j=i+1; j<${#IDX_ARRAY[@]}; j++ )) + do + B=${IDX_ARRAY[j]} + DIFF=$(( B - A )) + VDIFF=$(( (B / LEN) - (A / LEN) )) + # Assign heads + HEADC=1 + while true + do + HEAD=$(( A - DIFF * HEADC )) + HEADVDIFF=$(( ( (A / LEN) - (HEAD / LEN) ) / HEADC )) + # Check if out of bounds + if [[ $HEAD -lt ${#MAP_ARRAY[@]} ]] && \ + [[ $HEAD -ge 0 ]] && \ + [[ $HEADVDIFF -eq $VDIFF ]] + then + SHADOW_ARRAY[HEAD]=X # Mark on shadow map + (( HEADC++ )) + else + break + fi + done + # Assign tails + TAILC=1 + while true + do + TAIL=$(( B + DIFF * TAILC )) + TAILVDIFF=$(( ( (TAIL / LEN) - (B / LEN) ) / TAILC )) + # Check if out of bounds + if [[ $TAIL -lt ${#MAP_ARRAY[@]} ]] && \ + [[ $TAIL -ge 0 ]] && \ + [[ $TAILVDIFF -eq $VDIFF ]] + then + SHADOW_ARRAY[TAIL]=X # Mark on shadow map + (( TAILC++ )) + else + break + fi + done + #printf "char: %s, A: %s, B: %s, DIFF: %s, VDIFF: %s, HEAD: %s, HEADVDIFF: %s, TAIL: %s, TAILVDIFF: %s\n" "$CHAR" "$A" "$B" "$DIFF" "$VDIFF" "$HEAD" "$HEADVDIFF" "$TAIL" "$TAILVDIFF" >&2 + done + done + unset IDX_ARRAY + +done +printf "%s" "${SHADOW_ARRAY[@]}" | fold -w "$LEN" | sed -E 's/(.)/\1\ /g' +printf "\n" +printf "%s" "${SHADOW_ARRAY[@]}" | grep -o 'X' | wc -l