Not working part 2
This commit is contained in:
78
2024/day-8/solution-2.sh
Normal file
78
2024/day-8/solution-2.sh
Normal file
@ -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
|
Reference in New Issue
Block a user