Files
advent-of-code/2024/day-6/solution-1.sh

57 lines
1.4 KiB
Bash
Raw Normal View History

2024-12-06 19:36:11 +08:00
#!/usr/bin/env bash
2024-12-06 19:37:02 +08:00
ARRAY_SHAPE=130 # It's a square
FILENAME=input
2024-12-06 19:36:11 +08:00
read -r -a MAP_ARRAY <<< "$( paste -s -d '' "$FILENAME" | sed -E 's/(.)/\1\ /g' )"
# Get initial position
POSITION=$(( ( $( grep -n '\^' "$FILENAME" | cut -f1 -d: ) -1 ) * ARRAY_SHAPE -1 + $( grep -o '.*\^' "$FILENAME" | wc -c ) -1 ))
MAP_ARRAY[POSITION]=X # Remove position after save
# up = 0, right = 1, down = 2, left = 3, following 90 degree turn
TURNS=0
while true
do
EXIT=1
# Get direction and travel
DIRECTION=$(( TURNS % 4 ))
if [[ $DIRECTION -eq 0 ]] # up
then
TRAVEL=-$ARRAY_SHAPE
LIMIT=$(( POSITION % ARRAY_SHAPE ))
elif [[ $DIRECTION -eq 1 ]] # right
then
TRAVEL=1
LIMIT=$(( (POSITION / ARRAY_SHAPE + 1) * ARRAY_SHAPE )) # Never verified
elif [[ $DIRECTION -eq 2 ]] # down
then
TRAVEL=$ARRAY_SHAPE
LIMIT=$(( (POSITION % ARRAY_SHAPE) + (ARRAY_SHAPE * ARRAY_SHAPE) ))
elif [[ $DIRECTION -eq 3 ]] # left
then
TRAVEL=-1
LIMIT=$(( (POSITION / ARRAY_SHAPE) * ARRAY_SHAPE )) # Never verified
fi
while [[ ${MAP_ARRAY[$POSITION+$TRAVEL]} != '#' ]]
do
if [[ $POSITION -eq $LIMIT ]] # Walked out
then
EXIT=0
break
fi
MAP_ARRAY[POSITION]=X # Mark walking path
(( POSITION+=TRAVEL ))
done
if [[ $EXIT -eq 0 ]] ; then break ; fi # Walked out
(( TURNS++ ))
done
# Count all coordinates
printf "%s" "${MAP_ARRAY[@]}" | tee travel-path | sed 's/[^X]//g' | wc -c
< travel-path fold -w $ARRAY_SHAPE