Compare commits
10 Commits
415f757054
...
main
Author | SHA1 | Date | |
---|---|---|---|
0134815002 | |||
fd78069221 | |||
ce0033c6f5 | |||
0d518e1691 | |||
de2fd03c3c | |||
e02ee993c6 | |||
ac940aad0e | |||
f17b7f75d2 | |||
f6e91fa1fa | |||
37667c0990 |
250
2024/day-15/solution-2.sh
Normal file
250
2024/day-15/solution-2.sh
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FUNCNEST=99999
|
||||||
|
MAP_FILE=input-map
|
||||||
|
DIRECTIONS_FILE=input-movements
|
||||||
|
MAP_WIDTH=$(( ( $( head -1 "$MAP_FILE" | wc -c ) -1 ) * 2 ))
|
||||||
|
|
||||||
|
# Move the robot
|
||||||
|
move_robot() {
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=.
|
||||||
|
ROBOT_POSITION=$NEXT_POSITION
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=@
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to move box in n direction
|
||||||
|
vertical_move_box () {
|
||||||
|
local BOX_COORDINATE=$1
|
||||||
|
local BOX_MOVE_DIRECTION=$2
|
||||||
|
|
||||||
|
# Normalise coordinates
|
||||||
|
if [[ ${MAP_ARRAY[$BOX_COORDINATE]} == "[" ]]
|
||||||
|
then
|
||||||
|
local L_SIDE=$BOX_COORDINATE
|
||||||
|
local R_SIDE=$(( BOX_COORDINATE +1 ))
|
||||||
|
elif [[ ${MAP_ARRAY[$BOX_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
local L_SIDE=$(( BOX_COORDINATE -1 ))
|
||||||
|
local R_SIDE=$BOX_COORDINATE
|
||||||
|
fi
|
||||||
|
local L_SIDE_MOVE_COORDINATE=$(( L_SIDE + BOX_MOVE_DIRECTION ))
|
||||||
|
local R_SIDE_MOVE_COORDINATE=$(( R_SIDE + BOX_MOVE_DIRECTION ))
|
||||||
|
|
||||||
|
# Recurse if there are more boxes
|
||||||
|
if [[ ${MAP_ARRAY[L_SIDE_MOVE_COORDINATE]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[L_SIDE_MOVE_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
vertical_move_box "$L_SIDE_MOVE_COORDINATE" "$BOX_MOVE_DIRECTION"
|
||||||
|
fi
|
||||||
|
if [[ ${MAP_ARRAY[R_SIDE_MOVE_COORDINATE]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[R_SIDE_MOVE_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
vertical_move_box "$R_SIDE_MOVE_COORDINATE" "$BOX_MOVE_DIRECTION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
MAP_ARRAY[L_SIDE_MOVE_COORDINATE]="["
|
||||||
|
MAP_ARRAY[R_SIDE_MOVE_COORDINATE]="]"
|
||||||
|
MAP_ARRAY[L_SIDE]="."
|
||||||
|
MAP_ARRAY[R_SIDE]="."
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Function to check if box can be moved in n direction
|
||||||
|
vertical_check_move_box () {
|
||||||
|
local BOX_COORDINATE=$1
|
||||||
|
local BOX_MOVE_DIRECTION=$2
|
||||||
|
|
||||||
|
# Normalise coordinates
|
||||||
|
if [[ ${MAP_ARRAY[$BOX_COORDINATE]} == "[" ]]
|
||||||
|
then
|
||||||
|
local L_SIDE=$BOX_COORDINATE
|
||||||
|
local R_SIDE=$(( BOX_COORDINATE +1 ))
|
||||||
|
elif [[ ${MAP_ARRAY[$BOX_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
L_SIDE=$(( BOX_COORDINATE -1 ))
|
||||||
|
R_SIDE=$BOX_COORDINATE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if boxes are movable
|
||||||
|
local L_SIDE_MOVE_COORDINATE=$(( L_SIDE + BOX_MOVE_DIRECTION ))
|
||||||
|
local R_SIDE_MOVE_COORDINATE=$(( R_SIDE + BOX_MOVE_DIRECTION ))
|
||||||
|
if [[ ${MAP_ARRAY[$L_SIDE_MOVE_COORDINATE]} == '.' ]] && \
|
||||||
|
[[ ${MAP_ARRAY[$R_SIDE_MOVE_COORDINATE]} == '.' ]] # Can move
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
elif [[ ${MAP_ARRAY[$L_SIDE_MOVE_COORDINATE]} == '#' ]] || \
|
||||||
|
[[ ${MAP_ARRAY[$R_SIDE_MOVE_COORDINATE]} == '#' ]] # Blocked by wall
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recurse if there are more boxes
|
||||||
|
if [[ ${MAP_ARRAY[L_SIDE_MOVE_COORDINATE]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[L_SIDE_MOVE_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
vertical_check_move_box "$L_SIDE_MOVE_COORDINATE" "$BOX_MOVE_DIRECTION"
|
||||||
|
if [[ $? -eq 1 ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ ${MAP_ARRAY[R_SIDE_MOVE_COORDINATE]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[R_SIDE_MOVE_COORDINATE]} == "]" ]]
|
||||||
|
then
|
||||||
|
vertical_check_move_box "$R_SIDE_MOVE_COORDINATE" "$BOX_MOVE_DIRECTION"
|
||||||
|
if [[ $? -eq 1 ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
horizontal_move_box () {
|
||||||
|
|
||||||
|
local BOX_COOR=$1
|
||||||
|
local BOX_MOVE_DIRECTION=$2
|
||||||
|
|
||||||
|
local NEXT_SPOT=$(( BOX_COOR + BOX_MOVE_DIRECTION * 2 ))
|
||||||
|
if [[ ${MAP_ARRAY[$NEXT_SPOT]} == "#" ]]
|
||||||
|
then
|
||||||
|
return 1 # Failed to move box
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_SPOT]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[$NEXT_SPOT]} == "]" ]]
|
||||||
|
then
|
||||||
|
horizontal_move_box "$NEXT_SPOT" "$BOX_MOVE_DIRECTION"
|
||||||
|
if [[ $? -eq 1 ]] ; then return 1 ; fi
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_SPOT]} != "." ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Move the box
|
||||||
|
if [[ $NEXT_SPOT -lt $(( BOX_COOR + BOX_MOVE_DIRECTION )) ]]
|
||||||
|
then
|
||||||
|
MAP_ARRAY[NEXT_SPOT]="["
|
||||||
|
MAP_ARRAY[BOX_COOR + BOX_MOVE_DIRECTION]="]"
|
||||||
|
else
|
||||||
|
MAP_ARRAY[BOX_COOR + BOX_MOVE_DIRECTION]="["
|
||||||
|
MAP_ARRAY[NEXT_SPOT]="]"
|
||||||
|
fi
|
||||||
|
MAP_ARRAY[BOX_COOR]="."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load map
|
||||||
|
read -r -a MAP_ARRAY <<< "$(
|
||||||
|
< "$MAP_FILE" paste -s -d "" |
|
||||||
|
sed -E '
|
||||||
|
s/#/##/g;
|
||||||
|
s/\./../g;
|
||||||
|
s/@/@./g;
|
||||||
|
s/O/[]/g;
|
||||||
|
s/(.)(.)/\1 \2 /g'
|
||||||
|
)"
|
||||||
|
MAP_LEN=${#MAP_ARRAY[@]}
|
||||||
|
|
||||||
|
print_map () {
|
||||||
|
printf "%s " "${MAP_ARRAY[@]}" |
|
||||||
|
fold -w $(( MAP_WIDTH * 2 ))
|
||||||
|
printf "\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get robot position
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} == "@" ]]
|
||||||
|
then
|
||||||
|
ROBOT_POSITION=$i
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Robot position : %s\n" "$ROBOT_POSITION"
|
||||||
|
|
||||||
|
# Hardcode direction values
|
||||||
|
UP=$(( - MAP_WIDTH ))
|
||||||
|
DOWN=$MAP_WIDTH
|
||||||
|
LEFT=-1
|
||||||
|
RIGHT=1
|
||||||
|
|
||||||
|
# Iterate through directions
|
||||||
|
MOVES=0
|
||||||
|
print_map
|
||||||
|
while read -r DIRECTION
|
||||||
|
do
|
||||||
|
|
||||||
|
# Interpret directions
|
||||||
|
if [[ $DIRECTION == "^" ]]
|
||||||
|
then
|
||||||
|
DIRECTION_VALUE=$UP
|
||||||
|
elif [[ $DIRECTION == "v" ]]
|
||||||
|
then
|
||||||
|
DIRECTION_VALUE=$DOWN
|
||||||
|
elif [[ $DIRECTION == "<" ]]
|
||||||
|
then
|
||||||
|
DIRECTION_VALUE=$LEFT
|
||||||
|
elif [[ $DIRECTION == ">" ]]
|
||||||
|
then
|
||||||
|
DIRECTION_VALUE=$RIGHT
|
||||||
|
fi
|
||||||
|
|
||||||
|
NEXT_POSITION=$(( ROBOT_POSITION + DIRECTION_VALUE ))
|
||||||
|
|
||||||
|
# Box in front
|
||||||
|
if [[ ${MAP_ARRAY[$NEXT_POSITION]} == "[" ]] || \
|
||||||
|
[[ ${MAP_ARRAY[$NEXT_POSITION]} == "]" ]]
|
||||||
|
then
|
||||||
|
#printf "Hit box.\n"
|
||||||
|
if [[ $DIRECTION_VALUE -eq $LEFT ]] || \
|
||||||
|
[[ $DIRECTION_VALUE -eq $RIGHT ]]
|
||||||
|
then
|
||||||
|
#printf "Left right box movement.\n"
|
||||||
|
if horizontal_move_box "$NEXT_POSITION" "$DIRECTION_VALUE"
|
||||||
|
then
|
||||||
|
move_robot
|
||||||
|
fi
|
||||||
|
elif [[ $DIRECTION_VALUE -eq $UP ]] || \
|
||||||
|
[[ $DIRECTION_VALUE -eq $DOWN ]]
|
||||||
|
then
|
||||||
|
#printf "Up down box movement.\n"
|
||||||
|
if vertical_check_move_box "$NEXT_POSITION" "$DIRECTION_VALUE"
|
||||||
|
then
|
||||||
|
vertical_move_box "$NEXT_POSITION" "$DIRECTION_VALUE"
|
||||||
|
move_robot
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Wall in front, do nothing
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_POSITION]} == "#" ]]
|
||||||
|
then
|
||||||
|
#printf "Next: %s Skipping\n" "${MAP_ARRAY[$NEXT_POSITION]}"
|
||||||
|
:
|
||||||
|
# Empty space, move forward
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_POSITION]} == "." ]]
|
||||||
|
then
|
||||||
|
#printf "Next: %s Move robot forward\n" "${MAP_ARRAY[$NEXT_POSITION]}"
|
||||||
|
move_robot
|
||||||
|
fi
|
||||||
|
(( MOVES++ ))
|
||||||
|
|
||||||
|
#print_map
|
||||||
|
done <<< "$( < "$DIRECTIONS_FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' | tr ' ' '\n' )"
|
||||||
|
printf "Moves: %s\n" "$MOVES"
|
||||||
|
|
||||||
|
print_map
|
||||||
|
|
||||||
|
# Calculate GPS values for boxes
|
||||||
|
SUM=0
|
||||||
|
BOX_COUNT=0
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} == "[" ]]
|
||||||
|
then
|
||||||
|
(( BOX_COUNT++ ))
|
||||||
|
X=$(( i % MAP_WIDTH ))
|
||||||
|
Y=$(( i / MAP_WIDTH * 100 ))
|
||||||
|
GPS=$(( X + Y ))
|
||||||
|
#printf "Box %s X: %s Y: %s GPS: %s\n" "$i" "$X" "$Y" "$GPS"
|
||||||
|
(( SUM+=GPS ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Sum: %s\n" "$SUM"
|
||||||
|
printf "Box count: %s\n" "$BOX_COUNT"
|
141
2024/day-16/input
Normal file
141
2024/day-16/input
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
#############################################################################################################################################
|
||||||
|
#.....#.........#.......#.....................#.....#...#.........#.#.....#.......#.........#.........#.......#...#.........#...#.....#...#E#
|
||||||
|
#.#.#.#.#####.###.#.#####.###.#.#.#.#.#######.#.###.#.#.###.#.###.#.#.#.###.###.#.###.#.###.#.#######.###.###.#.#.#.#.#####.#.#.#.#.#.#.#.#.#
|
||||||
|
#.#.#.#.....#...#.#.#.......#.#.#.#.#.#.....#...#.#...#...#.................#...#.....#.#...#.#.....#...#...#.#.#...#.#.....#.#...#.#...#...#
|
||||||
|
#.#.#######.###.#.#.#.#######.#.#.#.#.#.###.#.###.#######.###.#.#.###########.#######.#.#.###.#.#######.###.#.#######.#.#####.#####.#######.#
|
||||||
|
#.#.#.....#...#...#.......#...#...#...#...#.......#.....#.....#.#.....#.......#.......#.#.#...#.......#.....#.#.......#...#.#.#...#.....#...#
|
||||||
|
###.#.#.#####.#############.###############.#.###.#.###.#######.###.#.#.###########.###.#.###.#####.#########.#.#########.#.#.#.#.#.###.#.#.#
|
||||||
|
#...#.#...........................#...#...#...................#.....#.#...........#.....#.#...#.....#.......#...#.....#...#...#.#.#...#...#.#
|
||||||
|
#.#.#.###.#.#.#.#####.#.#####.###.#.#.#.#.#.#.#####.#####.#.#.#.###.#.#########.#.#.#####.#.###.#####.#.#########.#####.#######.#.#########.#
|
||||||
|
#...................#.#.#...#.#...#.#...#...#.....#.....#.#.#...#.#...#.......#.#.#.....#...#...#...#.#.....................................#
|
||||||
|
#.###.#.#.###.###.#.#.###.#.#.#.###.###.#####.###.#.###.###.###.#.#####.#####.###.#.###.#####.###.#.#.###############.#######.#.###########.#
|
||||||
|
#.#...#.#.....#...#...#...#...#...#.......................#.......#.....#...#...............#.....#...#.....#.....#.#.................#.....#
|
||||||
|
#.#.#.#.###.###.#####.#.#########.#.#.###.###.#.#.#######.#####.#.#####.###.#.#.#.###.#####.#.###########.#.###.#.#.#######.#.#.#.#####.###.#
|
||||||
|
#...#.#.......#.....#.#.#.....#...#.#.....#.....#...........#...#.......#...#.#.#.#...#.......#.....#...#.#.....#.......#...#...#.....#.....#
|
||||||
|
#.###.#.#.#.#.#####.###.###.###.#####.#####.#.#############.#.#.#########.###.#.###.###.#####.#.###.#.#.#.#####.#########.#######.###.#####.#
|
||||||
|
#.#.....#.#...#...#...#...#.#...#...#.....#.........#.......#.....#...#.....#.#.....#...#.....#...#...#...#.#...#.........#.........#.#.....#
|
||||||
|
#.#.#.###.#.###.#.###.###.#.#.#.#.#.#####.#########.#.#######.###.#.#.###.#.#.#.#####.###.#######.#########.#.###.#########.#########.#.###.#
|
||||||
|
#.#.......#.....#.#.....#.....#.#.#.#.........#.....#.........#.#...#...#.#.#.#...#...#...#.......#.......#.....#.........#.#...#.....#.....#
|
||||||
|
#.#.#.#####.#######.###.###.#.#.#.#.###.#######.###############.#######.###.#.#####.###.###.###.###.###.#.#.#############.#.###.#.###.#.###.#
|
||||||
|
#.#.#.......#.......#.#.#.#.#.#.#.#...#.#.......#...............#.....#.....#.#.....#...#...#...#.....#.#.#.#...........#.#...........#...#.#
|
||||||
|
#.#.#.#####.#.#######.#.#.#.#.###.###.###.#######.#######.#.#####.###.#.#####.#.#####.###.###.###.###.#.###.#.#########.#.###.#.#.#.###.#.#.#
|
||||||
|
#...#.#.....#.....#.......#.#.......#.#...#.......#.......#.#.......#...#.....#...#...#...#...#.#...#.#...#.#.....#.#...#.#...#.............#
|
||||||
|
###.#.#.###.#####.#.#######.#########.#.#.#.#######.###.#.###.###########.#######.#.#######.###.###.#.###.#.#####.#.#.###.#.###.#.#.#.#.#####
|
||||||
|
#.............#...#.#.......#...#.#...#...#...#...#.#.#.#.....#.#.........#...#...#.#.....#.#.......#...#...#.....#.#.....#.#...#.#...#.#...#
|
||||||
|
###.#.#.###.#.#.#.#.#.#######.#.#.#.#####.#####.#.#.#.#.###.###.#.#########.#.#.#.#.#.###.#.#.#########.#####.#####.#.###.#.#.#.#.#####.#.#.#
|
||||||
|
#...#.....#.#.#.#...#.......#.....#.....#.......#.....#...#.....#.#.........#...#.#...#.#...#...#.............#.....#.#...#.#.#.#.......#.#.#
|
||||||
|
#.#.#.###.#.#.#.###########.#.#.#.#####.#.###########.###.#####.#.###.#.#########.#####.#######.#.#######.#.#######.#.#.#.#.#.###.#####.#.#.#
|
||||||
|
#.#.#...#.#...#.#...#...#...#.#...#.....#.#.....#...#...#...#...#.#...#.#...........#.......#.....#.....#.#...#...#.#.#.#...#.............#.#
|
||||||
|
#.#.#.#.#.#####.#.#.#.#.#.###.#####.#####.#.###.#.#.#######.#####.#.###.#.#######.#.#.###.###.#####.###.#####.#.#.#.#.#.#.#####.###########.#
|
||||||
|
#.#.#.#.#.......#.#...#...#.....#...#.#...#.#.#...#.......#.#.....#...#.#.#.#.....#...#.#.#.....#...#.#...#...#.#...#...#.......#.........#.#
|
||||||
|
#.#.###.#######.#.###.#########.#.###.#.###.#.###########.#.#.#######.#.#.#.#.#####.###.#.#.#####.###.###.#.###.#######.#.#######.#########.#
|
||||||
|
#.#.....#.......#...#...........#.#...#...#.#...#.......#.#.#...#...........#.#.......#...#.#.#...#.#...#...#.#...........#.........#.......#
|
||||||
|
#.#.###############.#.#########.#.###.###.#.#.###.#.#####.#.###.#.#.#######.#.###.#.###.###.#.#.###.#.#.#####.#.###########.#######.#.#######
|
||||||
|
#...#.............#...#.....#...#...#.#...#.#.....#.....#.#.#...#.#.......#.#...#.#...#.#.#.....#.....#.........#.....#...#.#.....#.#...#...#
|
||||||
|
###.#.#########.#.#####.#.###.#####.#.#.###.###.#######.#.#.#.###.###.###.###.#.#####.#.#.###.#.#.#######.#######.###.#.#.#.#####.#.###.#.#.#
|
||||||
|
#...#.#.....#...#...#...#.#...#.#...#...#.#...#.#.....#.....#.....#...#.#...#.#.#.....#...#.#.#.#.#.....#.#.....#...#...#...#...#.#...#...#.#
|
||||||
|
#.#.#.#.#####.#####.#.#####.###.#.###.###.###.###.###.#############.###.###.###.#.#######.#.#.#.###.###.###.###.###.#########.#.#.###.#####.#
|
||||||
|
#.#...#.....#...#.....#.....#...#.#.#.#.....#...#.#.#.......#.......#.......#...#.......#...#.#.......#.#...#.#.....#.........#.#...#.....#.#
|
||||||
|
#.#.###.###.###.#####.#.#.#####.#.#.#.#.#######.#.#.#######.#.#.#####.#######.###.###.#####.#.#########.#.###.#######.###.#####.#.#.###.#.#.#
|
||||||
|
#.#...#...#...#.....#.#.#...#.......#.#.......#.#.#.......#...#.#...#...#.....#.....#.#.....#.....#.....#.#.....#.......#...#...#.#...#.#.#.#
|
||||||
|
#.###.###.#.#.#####.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.###.#####.###.###.#.###.#####.#.#.#########.#.#.###.#.#.#.#.#####.###.#.###.###.#.#.#.#
|
||||||
|
#...#...#.#.....#.#.#.#...#...#...#.#...#.#.#.#.#.#.#.#...#...#...#...#...#...#...#.#.#.....#.#...#.#.#...#...#...#.....#...#.#...#.#.#.#...#
|
||||||
|
###.###.#.###.#.#.#.#.#####.###.###.###.#.#.#.#.#.###.#.#####.###.#.#.#####.#.#.#.###.#####.#.#.###.###.###.#.#####.#.###.###.###.#.#.#.###.#
|
||||||
|
#...#.....#.#.#...#.#.#.....#...#...#...#.#.#.#...#...#.#.......#.#.#.........#.#...#.........#...#...#...#.#...#...#.....#.#...#.#.#.#.#...#
|
||||||
|
#.#.#.###.#.#.###.#.###.#####.###.#.#.#####.#.#####.###.#.###.###.#############.###.#.###.###.###.###.###.#####.###.#######.#.#.#.#.#.#.#.###
|
||||||
|
#.#.#.#.#...#...#.#.........#.#...#.#.#.............#.....#.#.#.............#...#.#.#...#...#...#...#...#...#...#.....#.....#.#.#.#.#.#...#.#
|
||||||
|
#.#.#.#.###.###.#.#########.#.#.###.#.#.###.#######.#######.#.#.###.#######.#.###.#.#####.#.#######.#.#####.#.###.#.###.#.#.#.#.#.#.#.#####.#
|
||||||
|
#.#.#.#.......#.#.....#...#.#.#.#...#...#...#...#...#.....#...#.#...#.....#...#...#.....#.#...#.....#.......#...#.#.#...#.#...#.#.#.#.......#
|
||||||
|
#.###.#.#######.#######.#.#.#.#.###.#####.###.#.#.###.#.#.#####.#.#####.#########.#####.#.###.#.###############.#.#.#.###.###.#.#.#.###.#####
|
||||||
|
#.....#...#.....#.......#.#.#.#...#.#.....#...#...#...#.#.#.....#.....#...........#...#...#.#...#.#.....#.......#.....#.#.#...#.#.....#.....#
|
||||||
|
###########.#####.###.#.#.###.###.#.###.#.#.#######.###.#.#.###.#####.#######.###.###.#####.#####.#.#.###.#.#####.#####.#.#.###.###########.#
|
||||||
|
#.#.........#...#.#...#.#.....#...#.#...#.#.#...#...#...#...#.#.....#.......#...#.............#.....#.....#.#...#.......#.#...#.....#...#...#
|
||||||
|
#.#.###.#####.#.#.#.###.###.###.###.#.###.#.#.###.###.#######.#.#.#########.#.#.#####.#######.###.#########.#.###.#####.#.###.#####.#.#.#.#.#
|
||||||
|
#.............#...#.....#...#...#.....#...#...#...#.............#.....#.....#.#.#.....#.....#...#.#.....#...#...#.......#.#.......#.#.#...#.#
|
||||||
|
#.###.#.#.#.#.###########.#.#.#.#############.#.###.#########.###.#.###.#######.#.#####.###.###.#.###.#.#.#####.#######.#.#.###.###.#.#####.#
|
||||||
|
#...#.#...#.#.......#.....#.#.#...........#...#.#...#.#.....#.....#...#.........#...#...#.#.....#...#.#.#.#...#.........#.#.#.........#...#.#
|
||||||
|
#.#.#.#####.#######.#.#####.#.###########.#.###.#.###.#.###.#.#######.#######.#.#.#.#.###.#########.#.#.#.#.#.#.#########.#.#.#.#.#####.#.#.#
|
||||||
|
#.#.#.#...#.............#...#.........#...#...#.#.....#.#.#...#.....#.......#...#.#.#.....#...#...#.#.#.#...#.#.#.....#...#.#...#.....#.#...#
|
||||||
|
#.#.#.#.#####.#.#.#.###.#.###########.#.#.#.#.#.#####.#.#.#########.#####.#.#####.#.#####.#.#.#.###.#.#.#####.#.#.###.#.#.#.###.#####.#.#####
|
||||||
|
#.#.#.#.....#...#.#.#...#.#...........#.#.#...#...#...#.........#.....#...#.#.....#.....#.#.#...#...#.#.#...#.#...#...........#.............#
|
||||||
|
#.###.#####.###.#.#.#.###.#.#.#########.###.#####.#############.#.###.#.#####.#####.#####.#.###.#.###.#.#.#.#.#####.#########.#.#.#######.#.#
|
||||||
|
#.....#...#...#.#.#...#.#.#.#.........#.#...#.....#.....#.....#...#...#.........#.#.#.....#...#.....#.#.#.#...#.#...#.#.....#.#.#...#...#...#
|
||||||
|
#.#.###.#.###.#.###.#.#.#.#.#####.#####.#.###.#####.#.#.#####.#####.#######.###.#.#.#.#####.#.#####.#.#.#.#####.#.###.#.#.#.#.#.###.#.#.###.#
|
||||||
|
#.#...............#...#.#.#.......#...#.....#...#...#.#.....#...#.......#...#.#...#...#...#.#.....#.#.#.#.#.....#...#...#.#.#...#.#.#.#.....#
|
||||||
|
#.#.#.#####.#.###.#####.#.#.#######.#.#########.#.###.#####.#.###.#######.#.#.###.#######.#.###.#.#.###.#.#.###.###.#####.#.###.#.#.#.#######
|
||||||
|
#...#...#.#.....#.......#.#.#.......#.........#...#...#...#...#.....#.......#.....#.....#.......#.#.#...#.#.#.....#...#...#.....#.#.#.......#
|
||||||
|
#.#####.#.#.###########.#.#.#.#########.#####.#####.###.#.#####.#####.#####.#.#######.#.#.###.#####.#.#.#.###.#######.#.#######.#.#.###.#.#.#
|
||||||
|
#.......#...#.......#...#.#.#.#.......#...#...#...#...#.#.......#...#.#.....#.#.......#.#...#.......#...#...#.#.....#.#.#.........#.........#
|
||||||
|
#########.#.#.#####.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#########.#.#.#.#.###.#.#.#.###.#########.###.#####.#.#.#.###.#.#####.#.#####.#.###.#
|
||||||
|
#.....#.#.#...#...#...#...#.#.#.#...#...#...#.#.#.#.#.#.........#.#...#.....#...#...#.#.........#.#.......#.#...#.....#.#...#...............#
|
||||||
|
#.#.#.#.#.#.###.#.###.#.###.#.#.###.#.#####.###.#.###.#.#.#######.#########.#########.#########.#.###.###.#.#######.###.#.#.###.###.#.#####.#
|
||||||
|
#...#...#.#...#.#...#.#...#.#.....#.#.......#...#...#.#.#.#.....#.......#...#.......#...#.....#.#.....#...#.#.......#...#.#.....#...#.....#.#
|
||||||
|
###.#.###.#.#.#.#####.###.#####.###.#########.#####.#.#.#.#.###.#########.###.###.#.#.#.#.#.###.#####.#.###.#.###.#.###.#.#######.#.#.#####.#
|
||||||
|
#...#.#.....#.#.......#.#.......#...#...#.....#...#.#.....#...#...........#...#...#...#.#.#.#.........#...#.#.#.#.#...#.........#.#.#.#.....#
|
||||||
|
#.#.#.#.###.#.#.#######.#########.#.#.#.#.#####.#.#.#########.###############.#.#.#####.#.#.#.###.###.###.#.#.#.#.###.#######.###.#.#.#.#####
|
||||||
|
#.............#.............#.....#.#.#...#...#.#...........#.#.......#.......#.#.#...#...#.#.......#.....#.....#...#.#...#...#...#.#.#...#.#
|
||||||
|
###.#.###.#.#.#############.#.#####.#.#####.#.#.#.#.###.#.#.#.#.#####.#.#.#.#.#.#.#.#.#####.#######.#########.#####.#.#.#.#.###.#.###.###.#.#
|
||||||
|
#.........#...#.......#.....#.#.....#.......#...#.#.....#...#.#.#...#...#.#.#.#.#.#.#.#...#.#.....#.#.......#.#.....#.#.#.#.#...#.#.....#.#.#
|
||||||
|
#.#.#.#####.###.#.#####.#####.###.###############.#.#.#.#.###.#.#.#.#####.#.#.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.###.###.#.###.#.#.#
|
||||||
|
#.#.....#.......#.#.....#...#...#.#.............#...#...#.....#...#...#...#.#.#.....#.#.#.#.....#.#.#.#.....#.#.#...#...#.#...#.#.#.#...#...#
|
||||||
|
#.#.#.#.#######.###.#####.#.###.#.#.#####.###########.#################.###.#.#######.#.#.#.#######.#.#.#####.#.#########.#.###.#.#.#######.#
|
||||||
|
#...#...#...#...#...#.#...#.#...#.#...#.#...........#.#.....#...........#.#.#.#.......#.#.#.#.......#.#...#...#.#...#...#.#...#.#.#.........#
|
||||||
|
#.#.#.###.#.#.###.###.#.#.###.###.###.#.#######.#####.#.#.#.#.###########.#.#.#.#######.#.#.#.#######.###.#####.#.#.#.#.#.###.#.#.#.#.#######
|
||||||
|
#...#.#...#.......#.....#...#.#...#...#.......#.......#.#.#...#.....#.......#.#.#.....#.#...#...#.......#.......#.#.#.#.#...................#
|
||||||
|
###.#.#.###.#.#.###.#######.#.#.###.#########.#.#########.#####.###.#.#########.#.#.###.#######.#######.###########.#.#.#######.#.#.###.#.#.#
|
||||||
|
#.#.#...#...#.#.#...#.....#.#.#.#...#.......#.............#...#...#.............#.#.#...#...#...#.......#...#.......#.#.........#.#.....#.#.#
|
||||||
|
#.#.#.###.###.#.#####.###.#.#.###.###.#####.#####.###.###.#.#.###################.###.###.#.#.###.#.#.###.#.#.###.#.#.#.###.#####.###.#.#.#.#
|
||||||
|
#...#.#...#...#.......#.#...#.....#.....#.........#...#.....#...#.....#.........#.....#...#...#.......#...#.#.#...#.#.....#.......#.#.....#.#
|
||||||
|
#.###.#.###.#########.#.#.#############.###########.###.###.#.#.#.###.#####.#####.#####.#######.###.###.###.#.#.###.#####.#########.#.#.#.#.#
|
||||||
|
#.....#...#...............#.............#...#.....#.#...#...#.#.....#...#...#...#.#.....#.....#.#.....#.#...#.#.#...#.#...#.....#.........#.#
|
||||||
|
#####.###.###.#############.#######.#.###.#.###.###.#.###.#.###########.#.###.#.#.#.###.#.#.#.#.#######.#.#####.#.###.#.###.###.#.###.#.#.#.#
|
||||||
|
#...#...#...#.#.......#...#...#...#.#.#...#...#...#.#...#.#...........#.#.#...#...#.#.....#.#...#.....#.#.....#.#...#.#.#.....#.......#.#...#
|
||||||
|
#.#.#.#.#.#.#.#.#####.#.#.###.###.#.###.#####.#.#.#.###.#.###.#######.#.#.#.#######.#.#####.#####.###.#.#####.#.#.#.#.#.#.###.#.#.###.#.#.#.#
|
||||||
|
#.#...#.#.#.#.#.#.#...#.#...#.#...#.....#...#.#.#.#.#...#...#.#.....#...#.....#...#.#.....#.....#...#...#...#.#...#...#.#.....#.#...#.....#.#
|
||||||
|
#.###.#.#.#.#.#.#.#.#####.#.#.#.#.#######.#.#.###.#.#.#####.###.###.#########.#.###.#####.#.#.#.###.#####.#.#.###.###.#.###.#.#.#.#.#.#.#.#.#
|
||||||
|
#.#.............#.......#...#.#.#.........#.#...#.#.#.#...#.....#.#.#.....#.#.#.#...#...#.#...#.#...#.....#.#.#.......#...#.#.#.#.#.....#...#
|
||||||
|
#.###.#####.#####.#####.#.###.#.#####.#####.###.#.#.#.#.#.###.###.#.#.###.#.#.#.#.###.###.#####.#.###.#######.#.#####.###.#.#.###.###.#.#.###
|
||||||
|
#...#.....#.#.#...#.......#...........#.......#.#...#.#...........#...#...#...#.#.#.....#.....#.......#...#...#.....#...#.#.#.#.....#...#...#
|
||||||
|
#.#.#####.#.#.#.#.#.#######.###.#######.#######.#.###.#########.#.#####.#####.#.#.#####.###.#.#########.#.#.#######.#####.#.#.#.#####.#.#.#.#
|
||||||
|
#.#.#.....#.#...#...#.#.....#.........#.#...#...#...#...#.....#.#...#...........#.....#.....#.....#.....#...#.....#.#.....#.#.....#...#...#.#
|
||||||
|
#.#.###.###.#.#######.#.#############.#.#.#.#.#########.#.###.#.#.#.#.#####.#########.###.###.###.#.#########.#.#.#.#.#########.###.#.#.#.#.#
|
||||||
|
#.#...#.#...#...#.....#.....#.......#.#...#.#.........#...#.#.#.#...#.....#.........#...#.#...#...#.#.......#.#.#...#.#.......#.#...#...#...#
|
||||||
|
#.###.#.#.#####.#.###.#####.#.#####.#.#####.#######.#.#####.#.#.###.#####.#####.###.###.#.#.#.#####.#.###.###.#.###.#.#####.#.###.###.#.#.###
|
||||||
|
#.#...#.#.#...#.#...#.#.....#...#...#...#.......#.#.#.....#.......#.#...#.#...#...#...#.#.#.#.#.....#.........#.#...#...#...#...............#
|
||||||
|
#.#.###.#.#.#.#.###.#.#.#######.#.#####.#.#####.#.#.###.###.#####.#.#.#.#.#.#.###.#####.#.#.#.#.#######.#######.###.###.#.#######.#.#.#.#.#.#
|
||||||
|
#.#...#...#.#.#...#.#.#.#.......#.....#.#.....#...#.#...#.........#...#...#.#.....#.....#...#.#.....#...#.....#...#...#...#.........#...#.#.#
|
||||||
|
#####.#######.###.#.###.#.#.#########.#.###.#.#.###.#####.#####.#######.###.#####.#.###############.#####.###.#.#.###.#####.#########.###.#.#
|
||||||
|
#.....#.......#...#...#.#.#.#.....#...#.#...#...#...#.....#...#.#...........#...#.#...#...........#.......#...#.#...#.#...........#...#...#.#
|
||||||
|
#.#######.#.###.#####.#.#.#.#.###.#.###.#.#####.#.###.#####.#.###.###########.###.###.###.#######.###.#####.###.###.###.#########.###.#.###.#
|
||||||
|
#.#.....#.#...#.......#...#.#.#.#.......#.....#.#.#...#...#.#...#.....#.....#.....#...#...#.....#...#.#...#.#...#.#...#.....#...#.......#...#
|
||||||
|
#.#.###.#.#.#.#.#####.#####.#.#.#####.#######.#.#.#.###.###.#.#.#####.#.#####.#####.###.###.#######.#.#.#.#.#.###.###.#####.#.###########.#.#
|
||||||
|
#.#...#.#...#...#...#.#.....#.#.......#.....#.#.#.#...#...#...#.......#...#.....#...#.....#.........#.#.#.#.#...#...#.....#.#.............#.#
|
||||||
|
#.###.#.###.#####.#.#.#.#.###.#.#####.###.#.#.#.#.###.#.#.###.###########.#.#####.###.###.#.#########.###.#.###.#.#.#####.#.###.#.#########.#
|
||||||
|
#.....#.....#...#.#.#...#.....#.#...#.....#.#.#.#...#.#.#...#...#.......#.#...#...#...#.#.#...#.#...#.....#...#...#.#...#.#...#.#.#.#.......#
|
||||||
|
#.#########.#.#.#.#.#.###.#####.#.#.#########.#.###.#.#####.###.#.#####.#.###.#.###.###.#.###.#.#.#.#####.###.#####.#.#.#.###.#.#.#.#.#####.#
|
||||||
|
#...#.....#.#.#...#.#.#...#.......#.........#...#...#.......#.#...#.....#.....#.#.......#.#...#...#...#.....#.#...#.#.#.#.#...#.#.#...#...#.#
|
||||||
|
###.#.#####.#.#####.###.###.###############.#.###.#.#######.#.#####.#########.#.#########.#.#######.#.#.#####.###.#.#.#.#.#.###.#.#####.#.###
|
||||||
|
#.#.#...#...#...#...#...#...#...#...#...#...#.#.....#.....#.#...#.#.........#.#.....#...#.#.......#.#.....#...#...#...#.#...#...#...#...#...#
|
||||||
|
#.#.###.#.#.###.#.###.###.#.#.#.#.#.#.#.#.###.#.#.###.###.#.#.#.#.###.#####.#.#####.#.#.#.#####.#.###.#.###.###.#######.#######.###.#.#####.#
|
||||||
|
#.#...#.#.....#.#...#.#...#.#.#...#...#.#.#.....#.#...#.#.#...#...#.........#.....#...#...#.....#...#.#.#...#.......#...#.....#...#...#...#.#
|
||||||
|
#.###.#.###.###.###.#.#.#.#.#.###.#######.#.###.###.###.#.#######.###.#.###.#####.#########.###.###.#.#.#.#######.###.###.#.#.#.#####.#.###.#
|
||||||
|
#...#...#...#...#.#.#.#...#.#...#.#...#.......#...#.....#.........#...#.#.....#.....#.......#.#.#.#.#...#.......#.....#...#.#.#.#...#...#...#
|
||||||
|
#.#####.#.#.#.###.#.#.###.#.###.###.#.#.###.#.###.#####.###########.#.#.#.###.#.###.#######.#.#.#.#.###.#######.#.#######.#.#.###.#.###.#.###
|
||||||
|
#.......#...#...#.#.#.#...#...#.....#.....#.#...#...#...#.....#.....#.#...#.#.#.....#...#...#.....#.#...#.....#.........#.#.#.....#...#.#...#
|
||||||
|
#.#########.###.#.#.#.#.#####.#.###.#.###.#.#.###.###.###.###.#.#.#########.#.#.#####.#.#.###.#####.#.###.###.#.#######.#.#.###.#.###.###.#.#
|
||||||
|
#...#.#...#...#.#.#...#.#...#...#.....#...#.#...#...#...#.#.....#.#.........#.#.....#.#.#...#.#...#.#.#.#...#.#.#.....#.#.#.#.#...#.........#
|
||||||
|
###.#.#.#.#.###.#.#####.###.###.#.###.#.#######.###.###.#.#.###.#.#.#.#######.#####.#.#.###.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.###.#.###.###.#
|
||||||
|
#...#.#.#...#...#.....#...#...#...#...#.........#...............#...#.......#.....#.#.#.....#.#.#...#...#...#...#.#.....#.#.#.........#...#.#
|
||||||
|
#.###.#.#.###.###.#######.#.#.#####.#.#.#######.#.#####.#.###.###.#########.#.###.#.#.###.###.#.#######.#.#######.#########.#.#.#.#######.#.#
|
||||||
|
#.....#.#.....#.........#.#.#...#...#.........#...............#...#.....#...#...#.#...#...#.....#.....#.#.......#.#.........#.#...#.....#...#
|
||||||
|
#####.#.#.#####.#.###.#.#.#####.#.###.#.###.#########.#.###.#.#.#.#####.#.#.#.#.#.#####.###.#########.#.#######.#.#.###.#####.###.#.###.###.#
|
||||||
|
#.#...#...#.#.........#.#.#.....#.....#.#...#.....#.#...#...#...#.......#.#.#.#...#.#...#...#.......#.......#...#.............#...#...#.....#
|
||||||
|
#.#.#####.#.#.#####.#.###.#.###.#####.#.#.#.#.#.#.#.###.#.#######.#.###.#.#.#.#####.#.###.###.###.#.#####.###.###.#.###.#####.#.#.###.#######
|
||||||
|
#.#.#.......#.......#.......#.......#...........#...#...#...#.....#.#...#.#.#.#...#.....#.#...#...#...#...#...#.#.....#.....#.#.#.#...#.....#
|
||||||
|
#.#.###.#.#.###.#####.###############.#.#.#.#.#.#####.#.###.#######.#.###.#.#.#.#.#.#####.#.###.#####.###.#.###.###.#.#####.###.#.#.###.#.###
|
||||||
|
#.....................#.........#.....#...#.#.#.....#...#...........#...#.#.#.#.#...#...............#...#.#.#.......#.....#.#...#...#...#...#
|
||||||
|
#.###.###.#.###.#.#.###.#######.#.###.#.###.#.#####.###.#################.#.#.#.#####.#####.#.###.#####.###.#.#.###.#####.#.#.###.#######.#.#
|
||||||
|
#...#.....#.....#.#...#...#...#.#.#...#...#...#...#...#...........#.......#.#.#...#...#.......................#.#.......#...#.#...#.........#
|
||||||
|
#.#.#####.#######.###.###.#.###.#.#.#.#.#.#######.#.#############.#.#######.#.#####.###.#######.#.#.#########.#.#.#.###.#####.#.#####.#.###.#
|
||||||
|
#S#...............................................#.................#.......#...........#.........#...........#.......#...............#.....#
|
||||||
|
#############################################################################################################################################
|
253
2024/day-16/solution-1.sh
Normal file
253
2024/day-16/solution-1.sh
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FUNCNEST=99999
|
||||||
|
FILE=test-input-1
|
||||||
|
|
||||||
|
# Load map
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
#read -r -a CHECKPOINT_ARRAY <<< "$( < "$FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||||
|
MAP_LEN=${#MAP_ARRAY[@]}
|
||||||
|
MAP_HEIGHT=$( < "$FILE" wc -l )
|
||||||
|
printf "Map len: %s Map width: %s Map height: %s\n" "$MAP_LEN" "$MAP_WIDTH" "$MAP_HEIGHT"
|
||||||
|
DIR_UP=$(( - MAP_WIDTH ))
|
||||||
|
DIR_DOWN=$MAP_WIDTH
|
||||||
|
DIR_LEFT=-1
|
||||||
|
DIR_RIGHT=1
|
||||||
|
|
||||||
|
print_map () {
|
||||||
|
printf "%s " "${MAP_ARRAY[@]}" | fold -w $(( MAP_WIDTH * 2 ))
|
||||||
|
printf "\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get starting position
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} == "S" ]]
|
||||||
|
then
|
||||||
|
START_POSITION=$i
|
||||||
|
MAP_ARRAY[START_POSITION]="X"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Start position: %s\n" "$START_POSITION"
|
||||||
|
|
||||||
|
# Get end position
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} == "E" ]]
|
||||||
|
then
|
||||||
|
END_POSITION=$i
|
||||||
|
MAP_ARRAY[END_POSITION]="X"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "End position: %s\n" "$END_POSITION"
|
||||||
|
|
||||||
|
print_map
|
||||||
|
|
||||||
|
# Mark all checkpoints
|
||||||
|
declare -A CHECKPOINT_ARRAY
|
||||||
|
CHECKPOINT_ARRAY[$START_POSITION]=0
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} != "." ]] ;then continue ;fi
|
||||||
|
STEP=$i
|
||||||
|
ADJ_COUNT=0
|
||||||
|
UP=$(( STEP + DIR_UP ))
|
||||||
|
DOWN=$(( STEP + DIR_DOWN ))
|
||||||
|
LEFT=$(( STEP + DIR_LEFT ))
|
||||||
|
RIGHT=$(( STEP + DIR_RIGHT ))
|
||||||
|
if [[ ${MAP_ARRAY[$UP]} == "." ]] && [[ $UP -gt 0 ]]
|
||||||
|
then
|
||||||
|
(( ADJ_COUNT++ ))
|
||||||
|
fi
|
||||||
|
if [[ ${MAP_ARRAY[$DOWN]} == "." ]] && [[ $DOWN -lt $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
(( ADJ_COUNT++ ))
|
||||||
|
fi
|
||||||
|
if [[ ${MAP_ARRAY[$LEFT]} == "." ]]
|
||||||
|
then
|
||||||
|
(( ADJ_COUNT++ ))
|
||||||
|
fi
|
||||||
|
if [[ ${MAP_ARRAY[$RIGHT]} == "." ]]
|
||||||
|
then
|
||||||
|
(( ADJ_COUNT++ ))
|
||||||
|
fi
|
||||||
|
if [[ $ADJ_COUNT -gt 2 ]]
|
||||||
|
then
|
||||||
|
MAP_ARRAY[STEP]=X
|
||||||
|
CHECKPOINT_ARRAY[$STEP]=0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
CHECKPOINT_ARRAY[$END_POSITION]=0
|
||||||
|
printf "%s " "${!CHECKPOINT_ARRAY[@]}"
|
||||||
|
printf "\n"
|
||||||
|
CHECKPOINT_ARRAY_LEN=${#CHECKPOINT_ARRAY[@]}
|
||||||
|
|
||||||
|
# Iterate over checkpoints and print pairings
|
||||||
|
declare -A CHECKPOINT_PAIRS
|
||||||
|
declare -A CHECKPOINT_PAIR_WEIGHTS
|
||||||
|
PREV_UP=$(( 2 * 5 * 7 ))
|
||||||
|
PREV_DOWN=$(( 3 * 5 * 7 ))
|
||||||
|
PREV_LEFT=$(( 2 * 3 * 5 ))
|
||||||
|
PREV_RIGHT=$(( 2 * 3 * 7 ))
|
||||||
|
get_weight_change () {
|
||||||
|
local POSITION=$1
|
||||||
|
local NEXT_POSITION=$2
|
||||||
|
local DIRECTION=$3
|
||||||
|
# Check if next position is moving in line with the previous direction
|
||||||
|
if [[ $(( NEXT_POSITION - POSITION )) -eq $DIR_UP ]] && [[ $(( DIRECTION % PREV_UP )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "1"
|
||||||
|
return 0
|
||||||
|
elif [[ $(( NEXT_POSITION - POSITION )) -eq $DIR_DOWN ]] && [[ $(( DIRECTION % PREV_DOWN )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "1"
|
||||||
|
return 0
|
||||||
|
elif [[ $(( NEXT_POSITION - POSITION )) -eq $DIR_LEFT ]] && [[ $(( DIRECTION % PREV_LEFT )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "1"
|
||||||
|
return 0
|
||||||
|
elif [[ $(( NEXT_POSITION - POSITION )) -eq $DIR_RIGHT ]] && [[ $(( DIRECTION % PREV_RIGHT )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "1"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# For different directions, weight change is 1000
|
||||||
|
printf "1000"
|
||||||
|
}
|
||||||
|
recurse_travel () {
|
||||||
|
local POSITION=$1 # Current position
|
||||||
|
local CHECKPOINT=$2 # Previous checkpoint
|
||||||
|
local DIRECTION=$3 # Allowed adjacent tiles
|
||||||
|
local WEIGHT=$4 # Weightage so far
|
||||||
|
|
||||||
|
# Search adjacent tiles
|
||||||
|
# Recurse if it's movable
|
||||||
|
# Add a checkpoint pair and weights if checkpoint found
|
||||||
|
# 2 : Up
|
||||||
|
# 3 : Down
|
||||||
|
# 5 : Left
|
||||||
|
# 7 : Right
|
||||||
|
if [[ $(( DIRECTION % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
local UP=$(( POSITION + DIR_UP ))
|
||||||
|
if [[ $UP -gt 0 ]]
|
||||||
|
then
|
||||||
|
if [[ ${MAP_ARRAY[$UP]} == "." ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$UP" "$DIRECTION" )
|
||||||
|
recurse_travel "$UP" "$CHECKPOINT" "$(( 2 * 5 * 7 ))" "$(( WEIGHT + WEIGHT_CHANGE ))"
|
||||||
|
elif [[ -v CHECKPOINT_ARRAY[$UP] ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$UP" "$DIRECTION" )
|
||||||
|
CHECKPOINT_PAIRS["$CHECKPOINT-$UP"]=0
|
||||||
|
CHECKPOINT_PAIR_WEIGHTS["$CHECKPOINT-$UP"]=$(( WEIGHT + WEIGHT_CHANGE ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTION % 3 )) -eq 0 ]] && [[ $DOWN -lt $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
local DOWN=$(( POSITION + DIR_DOWN ))
|
||||||
|
if [[ $DOWN -lt $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
if [[ ${MAP_ARRAY[$DOWN]} == "." ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$DOWN" "$DIRECTION" )
|
||||||
|
recurse_travel "$DOWN" "$CHECKPOINT" "$(( 3 * 5 * 7 ))" "$(( WEIGHT + WEIGHT_CHANGE ))"
|
||||||
|
elif [[ -v CHECKPOINT_ARRAY[$DOWN] ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$DOWN" "$DIRECTION" )
|
||||||
|
CHECKPOINT_PAIRS["$CHECKPOINT-$DOWN"]=0
|
||||||
|
CHECKPOINT_PAIR_WEIGHTS["$CHECKPOINT-$DOWN"]=$(( WEIGHT + WEIGHT_CHANGE ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTION % 5 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
local LEFT=$(( POSITION + DIR_LEFT ))
|
||||||
|
if [[ ${MAP_ARRAY[$LEFT]} == "." ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$LEFT" "$DIRECTION" )
|
||||||
|
recurse_travel "$LEFT" "$CHECKPOINT" "$(( 2 * 3 * 5 ))" "$(( WEIGHT + WEIGHT_CHANGE ))"
|
||||||
|
elif [[ -v CHECKPOINT_ARRAY[$LEFT] ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$LEFT" "$DIRECTION" )
|
||||||
|
CHECKPOINT_PAIRS["$CHECKPOINT-$LEFT"]=0
|
||||||
|
CHECKPOINT_PAIR_WEIGHTS["$CHECKPOINT-$LEFT"]=$(( WEIGHT + WEIGHT_CHANGE ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTION % 7 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
local RIGHT=$(( POSITION + DIR_RIGHT ))
|
||||||
|
if [[ ${MAP_ARRAY[$RIGHT]} == "." ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$RIGHT" "$DIRECTION" )
|
||||||
|
recurse_travel "$RIGHT" "$CHECKPOINT" "$(( 2 * 3 * 7 ))" "$(( WEIGHT + WEIGHT_CHANGE ))"
|
||||||
|
elif [[ -v CHECKPOINT_ARRAY[$RIGHT] ]]
|
||||||
|
then
|
||||||
|
WEIGHT_CHANGE=$( get_weight_change "$POSITION" "$RIGHT" "$DIRECTION" )
|
||||||
|
CHECKPOINT_PAIRS["$CHECKPOINT-$RIGHT"]=0
|
||||||
|
CHECKPOINT_PAIR_WEIGHTS["$CHECKPOINT-$RIGHT"]=$(( WEIGHT + WEIGHT_CHANGE ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
ITER=99999
|
||||||
|
for CHECKPOINT in "${!CHECKPOINT_ARRAY[@]}"
|
||||||
|
do
|
||||||
|
recurse_travel "$CHECKPOINT" "$CHECKPOINT" "$(( 2 * 3 * 5 * 7 ))" "0"
|
||||||
|
(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ; then break ;fi
|
||||||
|
done
|
||||||
|
for CHECKPOINT in "${!CHECKPOINT_PAIRS[@]}"
|
||||||
|
do
|
||||||
|
printf "Dest %s from checkpoint %s\n" "${CHECKPOINT_PAIRS[$CHECKPOINT]}" "$CHECKPOINT"
|
||||||
|
done | sort
|
||||||
|
for CHECKPOINT in "${!CHECKPOINT_PAIR_WEIGHTS[@]}"
|
||||||
|
do
|
||||||
|
printf "Weight %s for checkpoint pair %s\n" "${CHECKPOINT_PAIR_WEIGHTS[$CHECKPOINT]}" "$CHECKPOINT"
|
||||||
|
done | sort
|
||||||
|
|
||||||
|
if [[ ${#CHECKPOINT_PAIRS[@]} -ne ${#CHECKPOINT_PAIR_WEIGHTS[@]} ]]
|
||||||
|
then
|
||||||
|
printf "Checkpoint count with weight counts do not match.\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Map out full paths for calculate final results for it
|
||||||
|
# Quite akin to BFS
|
||||||
|
declare -A FINAL_PATH
|
||||||
|
FINAL_PATH[$START_POSITION]=0
|
||||||
|
for (( i=0 ; i<CHECKPOINT_ARRAY_LEN ; i+= 1 )) # Start to end should only have these many iterations
|
||||||
|
do
|
||||||
|
for PATH in "${!FINAL_PATH[@]}"
|
||||||
|
do
|
||||||
|
CHECKPOINT=${PATH##*-}
|
||||||
|
PATH_SCORE=${FINAL_PATH[$PATH]}
|
||||||
|
if [[ $CHECKPOINT -eq $END_POSITION ]] # This path has completed
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
for NEXT_CHECKPOINT in "${!CHECKPOINT_ARRAY[@]}" # Check if there is a next mapping
|
||||||
|
do
|
||||||
|
if [[ $PATH =~ -$NEXT_CHECKPOINT- ]]; then continue; fi # Prevent loops
|
||||||
|
PAIR="$CHECKPOINT-$NEXT_CHECKPOINT"
|
||||||
|
if [[ -v CHECKPOINT_PAIRS[$PAIR] ]]
|
||||||
|
then
|
||||||
|
FINAL_PATH["$PATH-$NEXT_CHECKPOINT"]=$(( PATH_SCORE + ${CHECKPOINT_PAIR_WEIGHTS[$PAIR]} ))
|
||||||
|
unset "FINAL_PATH[$PATH]"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
for PATH in "${!FINAL_PATH[@]}"
|
||||||
|
do
|
||||||
|
END=${PATH##*-}
|
||||||
|
if [[ $END == "$END_POSITION" ]]
|
||||||
|
then
|
||||||
|
printf "Path: %s weight: %s \n" "$PATH" "${FINAL_PATH[$PATH]}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
#print_map
|
15
2024/day-16/test-input-1
Normal file
15
2024/day-16/test-input-1
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###.#
|
||||||
|
#.....#.#...#.#
|
||||||
|
#.###.#####.#.#
|
||||||
|
#.#.#.......#.#
|
||||||
|
#.#.#####.###.#
|
||||||
|
#...........#.#
|
||||||
|
###.#.#####.#.#
|
||||||
|
#...#.....#.#.#
|
||||||
|
#.#.#.###.#.#.#
|
||||||
|
#.....#...#.#.#
|
||||||
|
#.###.#.#.#.#.#
|
||||||
|
#S..#.....#...#
|
||||||
|
###############
|
5
2024/day-17/input
Normal file
5
2024/day-17/input
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 64196994
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 2,4,1,1,7,5,1,5,4,0,0,3,5,5,3,0
|
160
2024/day-17/machine.sh
Normal file
160
2024/day-17/machine.sh
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
adv () { # OPCODE 0
|
||||||
|
$DEBUG && printf "OPCODE : 0 OP: adv OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$( get_combo "$1" )
|
||||||
|
#REG_A=$(( REG_A / (2 ** OPERAND) ))
|
||||||
|
REG_A=$( printf "%s / (2 ^ %s) \n" "$REG_A" "$OPERAND" | bc )
|
||||||
|
}
|
||||||
|
bxl () { # OPCODE 1
|
||||||
|
$DEBUG && printf "OPCODE : 1 OP: bxl OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$1
|
||||||
|
REG_B=$(( REG_B ^ OPERAND ))
|
||||||
|
}
|
||||||
|
bst () { # OPCODE 2
|
||||||
|
$DEBUG && printf "OPCODE : 2 OP: bst OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$( get_combo "$1" )
|
||||||
|
REG_B=$(( OPERAND % 8 ))
|
||||||
|
}
|
||||||
|
jnz () { # OPCODE 3
|
||||||
|
$DEBUG && printf "OPCODE : 3 OP: jnz OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$1
|
||||||
|
if [[ $REG_A -eq 0 ]]
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
POINTER=$OPERAND
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
bxc () { # OPCODE 4
|
||||||
|
$DEBUG && printf "OPCODE : 4 OP: bxc OPERAND: %s\n" "$1" >&2
|
||||||
|
# OPERAND=$1 # Deprecated for legacy reasons
|
||||||
|
REG_B=$(( REG_B ^ REG_C ))
|
||||||
|
}
|
||||||
|
out () { # OPCODE 5
|
||||||
|
$DEBUG && printf "OPCODE : 5 OP: out OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$( get_combo "$1" )
|
||||||
|
printf "%s\n" "$(( OPERAND % 8 ))"
|
||||||
|
}
|
||||||
|
bdv () { # OPCODE 6
|
||||||
|
$DEBUG && printf "OPCODE : 6 OP: bdv OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$( get_combo "$1" )
|
||||||
|
#REG_B=$(( REG_A / (2 ** OPERAND) ))
|
||||||
|
REG_B=$( printf "%s / (2 ^ %s) \n" "$REG_A" "$OPERAND" | bc )
|
||||||
|
}
|
||||||
|
cdv () { # OPCODE 7
|
||||||
|
$DEBUG && printf "OPCODE : 7 OP: cdv OPERAND: %s\n" "$1" >&2
|
||||||
|
OPERAND=$( get_combo "$1" )
|
||||||
|
#REG_C=$(( REG_A / (2 ** OPERAND) ))
|
||||||
|
REG_C=$( printf "%s / (2 ^ %s) \n" "$REG_A" "$OPERAND" | bc )
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get combo operand
|
||||||
|
get_combo () {
|
||||||
|
if [[ $OPERAND -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "$1"
|
||||||
|
elif [[ $OPERAND -eq 1 ]]
|
||||||
|
then
|
||||||
|
printf "$1"
|
||||||
|
elif [[ $OPERAND -eq 2 ]]
|
||||||
|
then
|
||||||
|
printf "$1"
|
||||||
|
elif [[ $OPERAND -eq 3 ]]
|
||||||
|
then
|
||||||
|
printf "$1"
|
||||||
|
elif [[ $OPERAND -eq 4 ]]
|
||||||
|
then
|
||||||
|
printf "%s" "$REG_A"
|
||||||
|
elif [[ $OPERAND -eq 5 ]]
|
||||||
|
then
|
||||||
|
printf "%s" "$REG_B"
|
||||||
|
elif [[ $OPERAND -eq 6 ]]
|
||||||
|
then
|
||||||
|
printf "%s" "$REG_C"
|
||||||
|
elif [[ $OPERAND -eq 7 ]]
|
||||||
|
then
|
||||||
|
printf "Reserved operand. Exiting.\n" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the program is a quine
|
||||||
|
check_quine () {
|
||||||
|
$DEBUG && printf "%s," "${INPUT[@]}"
|
||||||
|
$DEBUG && printf "%s," "${OUTPUT[@]}"
|
||||||
|
for (( i=0; i<${#INPUT[@]}; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${INPUT[$i]} != "${OUTPUT[$i]}" ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check digits
|
||||||
|
check_tail () {
|
||||||
|
$DEBUG && printf "%s," "${INPUT[@]}"
|
||||||
|
$DEBUG && printf "%s," "${OUTPUT[@]}"
|
||||||
|
for (( i=${#INPUT[@]}; i>=${#INPUT[@]}-$1; i-- ))
|
||||||
|
do
|
||||||
|
if [[ ${INPUT[$i]} != "${OUTPUT[$i]}" ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Interpret opcode
|
||||||
|
read_opcode () {
|
||||||
|
local OPCODE=$1
|
||||||
|
local OPERAND=$2
|
||||||
|
if [[ $OPCODE -eq 0 ]]
|
||||||
|
then
|
||||||
|
adv "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 1 ]]
|
||||||
|
then
|
||||||
|
bxl "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 2 ]]
|
||||||
|
then
|
||||||
|
bst "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 3 ]]
|
||||||
|
then
|
||||||
|
# jnz itself moves the pointer
|
||||||
|
jnz "$OPERAND"
|
||||||
|
elif [[ $OPCODE -eq 4 ]]
|
||||||
|
then
|
||||||
|
bxc "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 5 ]]
|
||||||
|
then
|
||||||
|
out "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 6 ]]
|
||||||
|
then
|
||||||
|
bdv "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
elif [[ $OPCODE -eq 7 ]]
|
||||||
|
then
|
||||||
|
cdv "$OPERAND"
|
||||||
|
(( POINTER+=2 ))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
execute_machine () {
|
||||||
|
POINTER=0
|
||||||
|
while [[ $POINTER -lt $INPUT_LEN ]]
|
||||||
|
do
|
||||||
|
OPCODE=${INPUT[$POINTER]}
|
||||||
|
OPERAND=${INPUT[$POINTER+1]}
|
||||||
|
read_opcode "$OPCODE" "$OPERAND"
|
||||||
|
$DEBUG && printf "Registers A : %s B: %s C : %s\n" "$REG_A" "$REG_B" "$REG_C" >&2
|
||||||
|
$DEBUG && printf "Pointer : %s\n" "$POINTER" >&2
|
||||||
|
(( MACHINE_ITER-- ))
|
||||||
|
if [[ $MACHINE_ITER -eq 0 ]] ; then break ; fi
|
||||||
|
done | paste -s -d " "
|
||||||
|
}
|
||||||
|
|
31
2024/day-17/solution-1.sh
Normal file
31
2024/day-17/solution-1.sh
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
ITER=99
|
||||||
|
DEBUG=false
|
||||||
|
|
||||||
|
REG_A=$(grep 'Register A:' "$FILE" | cut -f2 -d: )
|
||||||
|
REG_B=$(grep 'Register B:' "$FILE" | cut -f2 -d: )
|
||||||
|
REG_C=$(grep 'Register C:' "$FILE" | cut -f2 -d: )
|
||||||
|
read -r -a INPUT <<< "$(grep 'Program:' "$FILE" | cut -f2 -d: | tr ',' ' ' )"
|
||||||
|
INPUT_LEN=${#INPUT[@]}
|
||||||
|
|
||||||
|
printf "Registers A: %s B: %s C: %s\n" "$REG_A" "$REG_B" "$REG_C" >&2
|
||||||
|
printf "Input : " >&2
|
||||||
|
printf "%s " "${INPUT[@]}" >&2
|
||||||
|
printf "\n" >&2
|
||||||
|
|
||||||
|
# Load machine operations
|
||||||
|
. machine.sh
|
||||||
|
|
||||||
|
POINTER=0
|
||||||
|
while [[ $POINTER -lt $INPUT_LEN ]]
|
||||||
|
do
|
||||||
|
OPCODE=${INPUT[$POINTER]}
|
||||||
|
OPERAND=${INPUT[$POINTER+1]}
|
||||||
|
read_opcode "$OPCODE" "$OPERAND"
|
||||||
|
printf "Registers A : %s B: %s C : %s\n" "$REG_A" "$REG_B" "$REG_C" >&2
|
||||||
|
printf "Pointer : %s\n" "$POINTER" >&2
|
||||||
|
(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ; then break ;fi
|
||||||
|
done | paste -s -d ","
|
52
2024/day-17/solution-2.sh
Normal file
52
2024/day-17/solution-2.sh
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
ITER=1
|
||||||
|
MACHINE_ITER=999
|
||||||
|
DEBUG=false
|
||||||
|
INCREMENT=100000000000
|
||||||
|
TAIL_NUM=3
|
||||||
|
|
||||||
|
# Load registry values
|
||||||
|
REG_A=$(grep 'Register A:' "$FILE" | cut -f2 -d: )
|
||||||
|
REG_B=$(grep 'Register B:' "$FILE" | cut -f2 -d: )
|
||||||
|
REG_C=$(grep 'Register C:' "$FILE" | cut -f2 -d: )
|
||||||
|
|
||||||
|
# Rewrite registry A starting value
|
||||||
|
REG_A=100000000000000
|
||||||
|
#REG_A=164541160582800
|
||||||
|
|
||||||
|
# Load input string
|
||||||
|
read -r -a INPUT <<< "$(grep 'Program:' "$FILE" | cut -f2 -d: | tr ',' ' ' )"
|
||||||
|
INPUT_LEN=${#INPUT[@]}
|
||||||
|
printf "Registers A: %s B: %s C: %s\n" "$REG_A" "$REG_B" "$REG_C" >&2
|
||||||
|
#printf "Input: " >&2
|
||||||
|
#printf "%s " "${INPUT[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
|
||||||
|
# Load machine operations
|
||||||
|
. machine.sh
|
||||||
|
|
||||||
|
# Iterate registry A until last nth digits are matched
|
||||||
|
PIN_DIGITS=0
|
||||||
|
while ! check_tail "$INPUT_LEN" "$PIN_DIGITS"
|
||||||
|
do
|
||||||
|
while ! check_tail "$TAIL_NUM" "$PIN_DIGITS"
|
||||||
|
do
|
||||||
|
read -r -a OUTPUT <<< "$( execute_machine )"
|
||||||
|
printf "Register A: %s\n" "$REG_A"
|
||||||
|
printf "Output:\t"
|
||||||
|
printf "%s " "${OUTPUT[@]}"
|
||||||
|
printf "\n"
|
||||||
|
printf "Input:\t"
|
||||||
|
printf "%s " "${INPUT[@]}"
|
||||||
|
printf "\n"
|
||||||
|
(( REG_A+=INCREMENT))
|
||||||
|
#(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ; then break ; fi
|
||||||
|
done
|
||||||
|
PIN_DIGITS=$TAIL_NUM
|
||||||
|
printf "Matched digit. Reducing count"
|
||||||
|
(( TAIL_NUM+=1 ))
|
||||||
|
(( INCREMENT/= 50 ))
|
||||||
|
done
|
5
2024/day-17/test-input-1
Normal file
5
2024/day-17/test-input-1
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 729
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,1,5,4,3,0
|
400
2024/day-19/input-designs
Normal file
400
2024/day-19/input-designs
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
rubbgwuwbrwgrgrgrbrbbubgbggrbwrurwuggggwrbrgwbrrwb
|
||||||
|
urwgurrubuguruwuuuruwbbgrbbuwrbwrruuuubbuububuubrw
|
||||||
|
gguurrubwbuwgrbrrurrgbgburbrrurwbrrrubburuggbbgb
|
||||||
|
rgbuuwwwgbbwgurrwurgwgrgrbbbuggwgwugbrwb
|
||||||
|
rwggurbrgwrrwuururwwubgrurwwrubgguububururwb
|
||||||
|
ggrgrruwwwgrwuubgrggbbwrrgbrwrwgwwububrubguurggbrwbg
|
||||||
|
ggurrgrggwrwruuwrbrgbrubrbuggugwgrwgwurbub
|
||||||
|
wwwwuburrwbwugguwuwgwwrbggbwuwuuuuruwwurbwurgbwbggrr
|
||||||
|
urburguuwwwgrbrbgbbgbgrbgbubguugwubugwgrruuuugbbbbgubggu
|
||||||
|
guurrgwububururwgugrguuubrwrguurbuuuugrgbuwru
|
||||||
|
urwuwuuguwwwgrgbuwbgubwuwuurwuwggbwgubrbrguurrgrwb
|
||||||
|
bwwbbwuwbubgrbbgwuubrrbwgbggubbrbbwrwuuuguugwrwbub
|
||||||
|
wwwguwbgrrgbrgggwrgwuuwwwgwgwrgbrbgwgwruuruguubruug
|
||||||
|
gruuwuwbugubrwbbubrubgrruubuwugurbggrrbbbbg
|
||||||
|
wurubbwuggrrurbwwgrwubgbwguurbrwgwwwgrwuuuggwbguwwr
|
||||||
|
ggbguwrwguguwubgurgggrguuwugbuwbwwgwburgbwwuwgbrwbub
|
||||||
|
gwugrwruguwuugubbbrubbwbuwwwrgburrbbguwbgbgwrwb
|
||||||
|
grgugwwrgggbbbubububwuggrrgwruwrubwbrbbgwrwrggbuwrururrrrg
|
||||||
|
guwgggwrwrggbgwrrubrwburbuuububrbwrrrgurwugwggr
|
||||||
|
wuwwugwrbbuuburuururuwwrggbubwwugbuwugbburrwuwbubgbw
|
||||||
|
ugbggwbgurubbwrgwgggggwggrruubrgrwrgugwwgurrrbwbrwwur
|
||||||
|
wurubwrrbbgruurbbgurbbubuggubrrwwgbgwrwuuuwrgwbbrbw
|
||||||
|
rwwbruubgwrrugggwubgwwubwruuwggwrbwwbbrrwb
|
||||||
|
ugwgbguggggwwbwgwwuggurbwwgrbbuwurugwwrrrgugburruwb
|
||||||
|
brrrugbwrwbwwurbgbwwuugrbwbrgwgrgrbgrurwgwurgwruuguwbrurwu
|
||||||
|
rruwrrbgubguurwwugurrgrwbbuuwuburrbwwbbrggwuwr
|
||||||
|
uuwrburgruurrbuwwguurwbwwbwggrbubrwuuwuuwrbbg
|
||||||
|
gbbrrwgggbwwggwgwuurubrrurgwgwgbwgubwggrrbggug
|
||||||
|
wrwuggugbrwuuubbgrbugubbgurgrrburgwrbugrwb
|
||||||
|
bbbwgbuwbgrgggugrugwwwbwgrrbbbuubuguuugwburrrwrggwrrruwug
|
||||||
|
urbwwguugwrgbrrrrrrrbbwggrrubwgwugbbbuurugggrg
|
||||||
|
uugrugurbbruubwgbwbbbwubbrbbgwuuuwggwwwuubrrrwuwubrgrbrw
|
||||||
|
wbrugrwrwrrgugwugrrugugwubugrrrwbrwbwrggbwurrbgubgwbgbbgrwb
|
||||||
|
uwwbbubgrrrurgwrbgurugwbbrbbburggguugbwbrbgwbubuwbbgubgwg
|
||||||
|
rrbwbrbruwurwbwgggwrguwbbubuwuwurwubgwbwwgbubggwbbubbrbr
|
||||||
|
wwrwggbwwwrgubwrbwuuwbuuuwbrgwwrbrbrguruwrwbrrgrugb
|
||||||
|
wwbwrrubbbgwurbrbubwwbbbgbrbgbwbbuggrurbrwgwbubguurrwrwwb
|
||||||
|
rwurrgwuugrubggwbuubrbuwrggguwbgrbbgrgbbuwggbgwrbwgwbuuru
|
||||||
|
gwrrugbuurgrrwgbggwggguwwrrbgrbwwrrgwwbwubwbwrgbrgbgwwbgu
|
||||||
|
brrrwbururwwrwwrrgbwbubgbwgrgwwruuuwgugrwwrgbubru
|
||||||
|
uugbwguruwuwubburrgbbgbbrwrrbubuguugwgwwbw
|
||||||
|
gwburgbrwgwwubugrrrbuwugrbbwrrguwrbgbbgrggggbwuuwwgwgbww
|
||||||
|
rwwwbgwuubugurwbwururgbwbwwrwubgwuuruurbwbwgbwwbuwgg
|
||||||
|
bwwwbuwwrwgurbbwbguwwgwubwuwgwwubbwwwuwuuubbwr
|
||||||
|
urugrwggbbrburugwggbwbbuubbrbguuggwurgbrbbbgrbwuw
|
||||||
|
bgrbrbgbgwrrwgugbubbgbrurwrrgbwbbgrwrwbwwb
|
||||||
|
gbwubwgurggwbbgwwgbrrubguwgwwbrgwgrgwwwgwwbruwrwbuurwb
|
||||||
|
wuuwrwrbugruurrrrgwurguggbgwubugrugwwuguwwruuwbrrrwwruggb
|
||||||
|
ugrugbrrwuuwrwuguggwwgggubuwrrbwrugwwuugwbburrbrwb
|
||||||
|
wrrggbggbrgurbwguurugbwgrgwwgbwbgrbgwrbrwb
|
||||||
|
bugubbrwbuwugwwrwbgwugbuuubrwbugwrugggbwwrbgbwuurgw
|
||||||
|
bwrrwbrruuuugugggwgrgrwwrwwgwwgrbggwruwrwwwgrurwgggwbbw
|
||||||
|
gwwuwbuwwgwuurwwwgbruwuugruuwrgbbwugwbbwbguguw
|
||||||
|
uwrwwrurwwuwwwuwuubbbwbbrrwwbrrgbwbwggwgwruurrwb
|
||||||
|
rguuugbrbgrbwbbrwuuwwubwrrwggrwrgwwrgwuubwgbbwubbwbgbrruwu
|
||||||
|
gbgrgrwgbbbrwgubugwwuuwrrgbwbwgbwuwrugrbururbwrwrwbubrr
|
||||||
|
ruwrgurgguuurrggrurbuurubrbbguwbbrrbuuuwrgrwb
|
||||||
|
guurwgbwrbuurrrbugrbgbbrurbubbuugrgbwugbru
|
||||||
|
uggbgwrrgrrubgbbgwubwurgbbugububwrwbrgwbbbwwrwb
|
||||||
|
gwwgbbrrurbwwwrrrbruurbruggbrgwbgurbrwggwbrgurbbbwubbuw
|
||||||
|
wbgrwbuguguwrbbuurbubgubwgwwbrrrrbugurgggbbgb
|
||||||
|
buurgwggbbwgrrbruwuwruububuubrrbrrwrgbwbbwbwwururbgurbrrgrwb
|
||||||
|
rbgggbwrugrgwrwgwurggbrbgwgwgwwrbubbrwrbbuurugrrgwbrggbu
|
||||||
|
grrbbbwwguwbruwggwruwurrgrbgwubbubggwuugwubuwrrugurwb
|
||||||
|
rrbububbrrbbuwwuuwggbbwuwuwwrwgwwgwgrburbgrgrw
|
||||||
|
uuurugrbrrgwbrrggurrbubbuwguwuwgrurwbrbgwurwurw
|
||||||
|
rwubrwbuuuwbggrbwrwgwwrgrbrrbbwgrrwrwrrgbruggwwwgbbrwuuwrg
|
||||||
|
bburuwbugrggrwggrwbgbbuurwubuuugrbrrwgwgbrggrgggwbuuwbwbuw
|
||||||
|
wrbrbugwgrbuwrubwgwuwugbrgbwrwrgwururwrrrggrgurrwb
|
||||||
|
rggrbururgwuuwgbuwuwrruguugwbgubuwrubuwbrggbggbggrwb
|
||||||
|
gwurbruwrrgrrwbbwuwbgwrgwubbbuburrgbwrwrwb
|
||||||
|
urbrugbrwurgrgbrruwrbbrgwbrrbrwurbbbugwuugrwguwr
|
||||||
|
brrgurwwrguuubrggbggwwbgbgrrwwbburwuwrrwggbwubrrbggugubu
|
||||||
|
rwgwwuugbwrwrguwrrbrgwrurbwurrggwuwuwbgwgwwguurgrwb
|
||||||
|
guggggubguggwugbgbbwwgurubwugrbwgububbggbbrwb
|
||||||
|
wgwrguwggbugwwgrrrrwgwwwwrwwubgugwugbwgwggubwubrwb
|
||||||
|
grwwgbrwbubbwrwwwubugbgrubuuwbgurwurrugbwrgrrr
|
||||||
|
uugwwbuubggggruwugrurguwwwbrggggggrwwwrbrgugu
|
||||||
|
rgubgwbwurrguwgwburwubgrgbubbrbrruugrugbgrwwru
|
||||||
|
wbwwrubbbguggwbuugrgwguruuggurwggrrbruwbwrgbuw
|
||||||
|
rgugbrwuurrrrrurubrrgguuwbrrwruggubbbubgbwguurburggbrwb
|
||||||
|
rbuuggwwurwuuwgubgrbrruwrburugurwuubbburrguuruwr
|
||||||
|
rwurwrbbubgrwgggwwwbruuubwrwuwuwgrgbrgrgbugwrubrrbwbwbwrwb
|
||||||
|
gwrgbggrwrgbbbuuggbgrrgrrrruurbrwuugbubgbwur
|
||||||
|
rrurrwuuwuguuwbububrrwugbwuurbbgguwrwrrgrwwgbrggrburwg
|
||||||
|
ubruwgwbrubwrgbbrbbubggggwrggrgwbgggbgrburuwrbbrurgrgbbww
|
||||||
|
wrwgubgbwruugwubbggwugbgwwugwrbruuuwrwbbrrrru
|
||||||
|
rwubrrgbwrbgrbrwggugbbuugrguruwwwugrgurwb
|
||||||
|
wrgruuwrgguwwbrurbbugbrgruwrgrwggrbwwbwbgwrbrwubwubrwb
|
||||||
|
bggwugbrbwbgugwuwwurrwrrrwrgrguwuwurwguggwbrrbugrwr
|
||||||
|
ugubbwurburwrrbbbgwrbgwuwgbubrrgwgubrubrgrbb
|
||||||
|
gbwuggwruuuguurrwuurubrbwwbbwwuburgwgwurbbubg
|
||||||
|
uubwugrgburwubbbuururrwrwrgwurbwrrwurrubrwb
|
||||||
|
urbrwgwbuugbrwgbugggbbwwbuguuubbubwbguuubgbrrbububrru
|
||||||
|
rrbwwwbgrgwgurwwuwrbgwrwgrruwbgwbgugurwgrbugrbgbrbruw
|
||||||
|
ugrwbgrbrburugwbgugwugurrgwgrgwwrbgguwgrwrwb
|
||||||
|
wwbgbrgrwgggrbrugwwrwrbgubgrwguwbwubwwbgguggbbrgugbugrbbr
|
||||||
|
ubrwgwuwguwbwgguugrrbwuggwubbwwrrurbwruwbuw
|
||||||
|
gubrwwrbbrwwbuugrbwwugbgwwbbbugwrgbwbwwbwguggb
|
||||||
|
rurwgbbggugrwbubugrrwugrubuwwwwrwububgwwrwgwbr
|
||||||
|
wgbbrbbubgrrwwwgugugurbrubbuwbgwwwgwwgwrbwbw
|
||||||
|
ubgubwgwrwbuubgbbgrwbubugbbbrugrgwurubwgubguwugrrbu
|
||||||
|
gruuuwggwwwguwwguubggbguguuugwugwwgugwrwb
|
||||||
|
wrwbrgbgurwgbrbgurbbbggrbgwgubwbbggwrbwgbbu
|
||||||
|
bggubwbggbgrrrrggwbwbbgrguurrrggwbgurgrgwbuwbwurg
|
||||||
|
wuwbggrwwwbubrbwgrgrwgbrurggwwwubwwgwgbwuwwuguuwwgggbb
|
||||||
|
rwrugrubggrbururrwuwurbrwbuuggrbrbuugrwubbruggrbwuuru
|
||||||
|
wbrgggbwgrwwubbbguuuugrburubbrbrrrwubwgwguu
|
||||||
|
wrugrwruurrbwwwurggwbbwbuggrbwuruugwrburrwb
|
||||||
|
rburbbrwwrwgwbrubgwgwrwgrbwurgubuguwwwruuggbbuwwwggrwb
|
||||||
|
gwuugurgwwwrwwgbrbwwugwgurwbbbrwuwwwgrgbwbbgbbgruwgwwgwrb
|
||||||
|
rruwgbbwwrugugugrwubgrguguuwggbrrbrbubbwugurbgbubb
|
||||||
|
uuubwuburgrrwuugububuuwwrwrgbwbbgwgubwwgwgubrrbgbruggbu
|
||||||
|
wgrwuruuurwwbrwbwgrrwwrgurrbubwrwbgwrggbrrgugbuu
|
||||||
|
ugwbrgbbbwrgrgwbrguwrbrrgggbbuubgwbwgbgrwbrrwrrrgbrbgg
|
||||||
|
rgrggguuguwgbgrgrrgwrbbwbgurrrgwbwwguwbgggrbugugrbrurwb
|
||||||
|
bbwuwgrbbbbwrbrgbrgbbbburgruggrrrrbwrbbrwb
|
||||||
|
wbwuuwrruwggubggbgwbwwbggwbgbrrruggbwrrrbrwrb
|
||||||
|
wuubruggbruggbwbwuuugwrrwuwrgbwwbwuwwwrrgwrr
|
||||||
|
uwwgrbuubwbwbbrwburbrggburubwgguuwbwgbwburggwrgbrwb
|
||||||
|
ggbrubuwuurubruuubrbrgwuubguwbgbgwrrubrrrwb
|
||||||
|
rwgbbburwggwwgbbbrruuurbgrgbggrbgruuggbrgggg
|
||||||
|
rwwbwgwgwwbrbugbuuwbgggggwgrurbgrgwgwrgbbbuugbbgruwgwwwbg
|
||||||
|
rbwubbwuugwggrruuuugbruwwwwuuuuurgbgwwwgwbggwgbrurww
|
||||||
|
rwguwwrgugrbuwrwwbbugurrrwubruwugbrwubrwrgrbggbgr
|
||||||
|
ubbbugrbugrwgwggbwugwwbgwguubugbggbggrbuuwwbbbbbwr
|
||||||
|
gburuuwbrwrguwbrubgbwgruuwrwgbrwbrwwgwbgwggw
|
||||||
|
ggwwwguwgbuwrggbugurrrwwwrbrrbgurbbbgbruwrwwrbgrwwbuugrwb
|
||||||
|
rgbgrbrrubwuggruuwbgggwguuwwwrrrwuwrrgrubbbgrr
|
||||||
|
uwwgrrbugrrbwgggwuruwuuwggwbgwggwrbbuwbrrruubuguwugbrurwb
|
||||||
|
brwruwruwggrrubrwugbgbwwuggggruubrruugbgurrgwwugrurbrr
|
||||||
|
rgbbrrrbubrgbbbuuggruuurguubwgwgrwwgrbbwruwwb
|
||||||
|
rrbuuwgbuwwwbggrgbuurrbwwbwbwbrwwubuurrggrbg
|
||||||
|
urgbuwuwwugbrbguugbrbbggwggwgburgwgrwgurrbwwgrbbgw
|
||||||
|
uubrrugwggwgwbgbbwggwrrwbruwbrwuurgwwugrwgrwg
|
||||||
|
rgrguwguwrgwwgruggbwwbugbruubgurgrwuwrugbbggbuwrrggrwuug
|
||||||
|
uwubrubgbbwrgbgugwwwwwubwwubrburbbuurgwrrbwbubrbw
|
||||||
|
rgrbbwggrbgrrggrgbububggwggwwwwbrubguwgbuwbruwgugrgwrww
|
||||||
|
bbrwwrwgbgbgbrwwubbrgwuruwbrbubrrburuurwb
|
||||||
|
uuwgwgubwwbburwgrrbwgwrugrbwwgbggrurgwbuwru
|
||||||
|
uuggrgwuguuwwrbwrbuwrbrbgbuburuwwbbgbggbbugwwbu
|
||||||
|
bwbgwgwbrbbbwwbwrwgwbwgurggguwugrubrubrbrbuwwuugubru
|
||||||
|
uwuwrgwuubbruurbbbururrurrrbrwggbgbbgwrbuwubgbrrgwuurwb
|
||||||
|
bwgbbrgbbbbuugurgrburrrugbuubgbbwwwwgbuuwuggbgwguubb
|
||||||
|
uubwbuurbbwgbrgruwbugguguwbubbgrgbbgwbubggrrbwrwb
|
||||||
|
rrrguwbgwuwwbrrwrrwguwurbgbrburrwgrrburgwbbrruwwrrwbwrb
|
||||||
|
rruguburbgwgrgbguggggrugrgwbwwbwrbggwwgbruwuwrwwbubgburgr
|
||||||
|
rurgbwbugrbrgbgrurruwbubugubbgwuubgrwgrwwwgwbwrwbbwb
|
||||||
|
bbgbwggwgbbwbuugrrubbubgbrbrgubrugugrwbrwwbg
|
||||||
|
gwgugbburwwwwgbwwubwrwrwuurruuwuwwurugrrrgb
|
||||||
|
wwwrrrgruwrrrwuubwbrrurwbwrwrwbwggggrrbwuwggg
|
||||||
|
gbwrwguguggbwwrrbwgwwbwgbbbgwbuwuwrgwwrgbwuurb
|
||||||
|
guguuugbrbgruwbwbubwurrwggrubruwwggbwwubguub
|
||||||
|
uubbrubgrwwwuwrwgugbwbgurgrbbrugbrurguwrwwbbuguuuburwb
|
||||||
|
gubbuuuuubbwubgrwwguruggrbrgrrubuuuurrwrwb
|
||||||
|
uwwgbgrgrbrrgrguwgubuuwbwgguwbgurbwugbbrgguw
|
||||||
|
buwbgrggwwubrgrggbwurubgrbuuuwurrbuwurbbbbbrubgbrbuwwwrw
|
||||||
|
uwbrrbbwwruurgrrgrwruruwuubrgbrwwgwbugrbbrggrbwwbgrrwb
|
||||||
|
rbwgwbrguubbbugwguwrgrgbggbrruggrwubrwbgbwwuuwrrgwg
|
||||||
|
rbrbbgwggwuuburggwwrruruuruggwubruwwbrurubwbu
|
||||||
|
rbubuuurbwrugurggbwwbugbguuuuuwrubbguwrwb
|
||||||
|
bbwbubwrbuwgubguwrwrwgbgrrwwruurwwrbugrrurwb
|
||||||
|
bbuguurruwrrbguuuugwrguubwuubrbggrwubgugbwbwrrurugrugrwb
|
||||||
|
gbuuwurrbrwwrubgurbuubugrrbwubuurwuwwwgbbgbrwbrrrubggrwbgwb
|
||||||
|
grggrugrrbruuwbbbrrugbbbbuwbrwurrwgbwbuwrwb
|
||||||
|
bguurbwgwgbgbgrgrbbwgbbwubbwggrbubrwrbrubrbrgrwbburwb
|
||||||
|
grrrbrrwubuuggrgrurruuwwubwuuwubrrbburbrwwggrwgurgwgggwr
|
||||||
|
wbgubuuubwuwbrububrbwgrugrrbrrwbugguwwuuugu
|
||||||
|
rrgwgrguwruwgrwwrbgrgbbbbbwrgbugbggbrrwb
|
||||||
|
gwbrrgrruurwurburwbgrbggruuurbrbwubguwgrrburbgwwwu
|
||||||
|
bwwbugbruwrrguubruwbruuwrrwuwbruwgrwgwruwurgrbgurgruguwbg
|
||||||
|
brgrrbururwguwbburgurgrggbgubuwgruuuurbrrrrwugg
|
||||||
|
uwrbugwwrwuwgwwbuugbuurbwwbrwwrgrbggbgwwwrbrbwrrubbgrugw
|
||||||
|
uuggwbwrrwgrruwgggbggbgbubgwgbugwwrggrgbrgrururgugur
|
||||||
|
bwwwrugrrgbggbggbwubburrgubgwgwwrbwwgwbgurw
|
||||||
|
gburbuurwgbwgwwgggwbguwuwruububuwububwuwbgg
|
||||||
|
gbwggbgguwggbgwwrurwggbuburwrrgrbgbbuwuuuwrggwggwb
|
||||||
|
gbbwwwgbgwurgrbbwbgguwrwrggguwbugwbrgbwurgwuwgrrug
|
||||||
|
rgbugwrgugwbbbgggrwgwubbbwuurbrbrwbrgrwuurwgrg
|
||||||
|
ruwbuwurgwbuwrrrgwbrwrrruwwgggwugbwwrgruwgwubbgrwrrrwu
|
||||||
|
brrbwbbgwwwuururbrbuuwwwuguwwburbrurwuwgbwrbuubrbbww
|
||||||
|
rrrwrwugurubugbubbgwgrggwbbggbrugwbwrbggburgbrwr
|
||||||
|
ubrggrgbgwgruggrgrrwbruubwrrurubrbgwrwbggbrgbbrgwbbbr
|
||||||
|
ggrbbggrurbrbruwwugwrbrwrrbwgbrwwgubwrbrrgrbbwwwruwggww
|
||||||
|
wugbrbgwwwwrbugbwwrrburuwrbruruwuuuurbuwwwbgrgbrwb
|
||||||
|
bbgbgruurgbubburgwruwgrwuuubbwbwgugwbrbuuwwgurrurgwwrrb
|
||||||
|
wwburbbgbwurubrbrurwwgrwgubbgwbgrguuugurbwuwbuwuwuru
|
||||||
|
bwrgbuwrrrbubbwugbbrrgwgrbbbuguugrwbrurwrugguubbrubuggrwb
|
||||||
|
rgrwugwgbuuwubwrguuburuuuwuwbgguwuubggrrbugrbugwbgwwubwwbb
|
||||||
|
wbwrgurwrwrgggbbgggwwrbrbgurggubbbgrgbwbug
|
||||||
|
rbwbuwgurbbbgwuubwbgrwwubwbbwbgggwurbbbgbuu
|
||||||
|
wbburugwgrwwwgwwrwrbubrwuwrbgbwgbbwbrrbwbubbwbruubgrug
|
||||||
|
wrwggwgwwuuubbgrrwggrguubrgurrwuurubwurggwbrbbbugwuuwubwgu
|
||||||
|
bggrgbruwguurrurrbwuuwgugbrbwbuwwgwrgurggwburbbwgbuw
|
||||||
|
wwwbbugrrwwbrbwwgwububbuggrgrurggrwgrurruggbburwwgwurwb
|
||||||
|
rbrrwubgrwrbrbrggwwrurrwbwrurbwgbubggbrrrwwrwb
|
||||||
|
wuburwgwrwuwggbwwrgwwwugbwbggrurgbrurruwburuugwrwb
|
||||||
|
gwbwurbrbuurgwwbuuurrubbbrbwgruwuwuuuugwgbbb
|
||||||
|
wguwrbrbrgbbbggbggbgbgwgwbrggbggwguwurwwbbwbrrrrbwrwgrwb
|
||||||
|
wwwbruruubrurbugrrwwuburubbguwwrrbbwbbbrgbbubuwrurugr
|
||||||
|
brurrgggruwgrburwuggugrrbwbuuwbwuubgurwubruwrgwurbrwb
|
||||||
|
gwrruuwbrbwwbbbuwbwgrgubgggggwubgugubrbgugwuuburubugruwu
|
||||||
|
uubwruurruwwbrwburwggugggrguuurrgbbwbuggbwbuuurbgrwb
|
||||||
|
ggwrurbgrwgbbbruuurbbuubrwururgwwbuuwgrgwrgbubugrbrrgg
|
||||||
|
gubrurubwbrgrwwgggwwbwwguubbgggbggwbwwrguwrgwuggr
|
||||||
|
rwwugrbggburrrrbgwwgwgrurbbrguwrrbbbruwubgrgbrrwb
|
||||||
|
bgrrrbbgrguwgwwgurwwwrwugwwgrgrrwwguugbbruruuuwburbbuur
|
||||||
|
gwrgubrbubbbbrggrrbgwuwwbgbbuubugwgrwubgbbr
|
||||||
|
bwwwgwguwrrguruugwwbwgrgrwwbbwbrrgwbburuubbugbbrgggw
|
||||||
|
wburrbwwgubwbbwrbrgrwrbwugwuwwgwuugwwwgurgrguwuwgrgruu
|
||||||
|
wggrrrbgbgwurwrrwbrubbwbrwgrrwuugbrwwuwgruwwurw
|
||||||
|
rrbwggggurwrbwrrwubbrrurwwgbbrwuuwrruuwbrwb
|
||||||
|
ugwwwrbrbugbgrbuwbubwuggbwwugbgwrrwurrrwrrbgwrub
|
||||||
|
gbwgguuguuuugwgbuubggwuwbgrrbrbgwwbgugguruwrwggwwrwgwgu
|
||||||
|
wuubbbugwgrugububgrbgwugrurruwbwrbggwbgbbgurgrgbw
|
||||||
|
gwugwbbrwbwgwrwbrgurbwuwuugrrrbwwrburubgwrwwbbg
|
||||||
|
wwrgrrbubbuuwwbuwgrrwrrgggguwrrubbugrgwwbbug
|
||||||
|
gwubbruruuuwbbgrugbbbgbgwurwgwgwbwbwugggugbwuburwb
|
||||||
|
grgwgwrugugbgbwwbwubgwgbrgwguuwrrwwwugbgwgbgwruwwrwgwwrwb
|
||||||
|
rwrggugrwbbwgbubuwuwrrrgguguwrggbwbbwrrwb
|
||||||
|
rbgbwuwbwrbbwbbgugwgbbbwbrrrugwbrbubgruburwgwrrwb
|
||||||
|
wrrgbbbbwwuwgrgrrrbgurugbuwuubrgbgrbbbrrwb
|
||||||
|
ggrbwgwgrugrbrrwgugwguuwubuwwrugbbwwbbwuwggwuu
|
||||||
|
rwuuwwbugruwrruubuwuruuwubrugwrrwgruwrwrubbruruuwwg
|
||||||
|
rwrwuwbuwugbubgbbrguwgubuubbuwbwbgurubggbgubgwu
|
||||||
|
ugrrrruuwruuguwggubguwwwgrwuuwrwugwruwgrrbbw
|
||||||
|
ggwgwgurwrggrrwgwruuguwrugubrbuurwwruwbgrgrwb
|
||||||
|
rwbrrwuwbbbgbrrbwburwbbgbggwbbggwggugggrrrwbugg
|
||||||
|
ugbruwrruwgrbwuggrwwbruwwubrurrggbubgubugbgruugrrwb
|
||||||
|
wwwuubbwubwrubgubwrugrurbugguurburrrrwgguwwuggugurguwurwr
|
||||||
|
bwwbrruwbugbwguubbgggbrwbbrurgwbrwgggbgugbbgrbww
|
||||||
|
brgbwwubgubguwugwwuruubggwwuuwgwgwggbbwwbubbbggu
|
||||||
|
rbbrbbrurbuwwwguggguwgwggburbggubuwwbrbbubruuwwbgbru
|
||||||
|
rwuuugbwgwuugurbwrrwwbugbggbuururrbgwbwuuurggrurbgwbgggrrwb
|
||||||
|
bbgrgwwugwbwugggbugbgubgbgwbbuwrruurbwurwrgwurwb
|
||||||
|
bgwgguuwggrbbugbgwwwrwurrrbugrgguugrbgwbgwgwggruwwggwwgrwb
|
||||||
|
urrwggrubuwgbwggbbuwwbwbbwwrrgwrwbgurwurru
|
||||||
|
uwwbugruuuwggrrrrrbrrrbrurgwrrwwrrwbwbruwbbbuggwuu
|
||||||
|
wrururubbrugbggubggrbruuuubuubwuggggwwwubbwbbwbgbgbbgurwb
|
||||||
|
ubrubrbrgugurbuwrwuuwgbgwwrrwrrbbgwgbwruwrrrggggr
|
||||||
|
rbwguruwbgbgbbbbubbrrrugrruggurwwgrrrbrwb
|
||||||
|
rurgwubwbwgubwrbgguugrruururgwgbuwwurgugww
|
||||||
|
bwugrgruugguguwbgrbbbwuuwrrgwrrwrrubgrbrgbrggbww
|
||||||
|
rrgwbrwggbbgrggugurwgrgbrgwgbwrruwgwggwgrwuwrwbburwwbu
|
||||||
|
uurbwggwubwgwwguwbbgwwggugrrruggbgwbrrgwrr
|
||||||
|
grwbwbwrgrwrrubbbgwgrbbwrbgrurwrguwwwwggrbwbrwubbwrggr
|
||||||
|
gbuwbugrgubbrrbwwrbgwuwrwrbrbrwwbwbwrwuurrruurwb
|
||||||
|
ubrwurrrwwrbgwwgguubuwwgwbguwggurwbbgrugwbbrubug
|
||||||
|
rbugbwbguwggwwrwbbgwwuuruwwbrububbrurbubrgwwrbugugwbubggru
|
||||||
|
uuguruubgwwrrrwwugwurbgwbubrgrurrgwuuuuuggwbgrwbugu
|
||||||
|
gwwbugrrburuuwbwwbbugguubuuwwbuwbuwgubuwbruuugrgurgbuuubbw
|
||||||
|
ugwwgubwubbrubbrugbbbrurwgrgubgubugururgwgwwburgr
|
||||||
|
uggrgbruwrrbwrwgrruurwgguguwrwrwgbrggububgwrbguwbugwwguw
|
||||||
|
gruruurbgwrggggbrrugrbrgubrurrgugbbgrbgrwwugbrubw
|
||||||
|
ruggggwgbubuuubbgbburuwwgbbugrwubbrubgbrgbggrgubrb
|
||||||
|
wrguwbuwbrrbbbwbwrbgrrubwggbuwrrrgugbbrwbrguugrbrwgbrgg
|
||||||
|
rrgrwbgurgbbrgrbgugwrgrruruuugrgrrbbrrrwb
|
||||||
|
uuggrwugruuggrurbwggwgrwbwrgrbbbgbwbubugwg
|
||||||
|
rwwwrwrrbgrrgrgrwrgururgwrwburubwgrguwbuwwrrugugbbrwb
|
||||||
|
bbgguuwwuwbbuuwgwgurrwrwgbbrgurwgbrrbwrwbrwrbuggbwwrwrbuw
|
||||||
|
wrwwbgwgwruwrubbwrrwurwubgrrwrggbbgbbbgwwbgwggrbbwbrbbgbg
|
||||||
|
wgggrbrbwuwgubrguubgrguwrwuuuwbwwubuuwgbgrgbruubb
|
||||||
|
uggrwrwwbguwurbbburrgwgwururgwrgruwbwuubugubrurbuubrwrbuurwb
|
||||||
|
wrugguwugrgbuuwrbugrubrggggwwrbuwuurbuwruwwuww
|
||||||
|
wugwrwbbbrbbbrggrwbuwrwgwwbbrbwwgbruwugwruggggbw
|
||||||
|
uguurbwgwbbuuguwrwguubuugwurbgwrrbgbrrguwuwug
|
||||||
|
uwwuubgrrwgwrbbrgwwwbwugbbggbuuuurgubgwugrbgurbbwug
|
||||||
|
gwuwgwrrwgrwbwggugrbrggubbuburbbbgugrbuwrurrwbrwgggr
|
||||||
|
wwgrugrwuguwbruwugguurguwrugubwubrbgwwbrwbrwgbwrgwrruwurbr
|
||||||
|
gwgburrgwuurwburubuuwwwwgbbwbggwwgwuugrgwrbwrrw
|
||||||
|
rbgwgbbruuwwugugugrubbuugggwgubrguwwgrwgrrrgwbggbuguwu
|
||||||
|
rwwrrbrggruuubgruburgwubrrguwbwwgrgbwggruggwg
|
||||||
|
burgwuwugwbbbgrwgrubguuwugrbrbguubwwwrbbrwbrrugubuwwguuurw
|
||||||
|
gburugwwrwrrugugbbubrwrburrugrubbrurbrwwgrbbww
|
||||||
|
wuubbrbubbrbuubuwuwwgbuubugbrrgrugwrgwgwwwwwwwuurb
|
||||||
|
wuwgrrgwbbgrurbrgrrurbbgwuggggbgwuurwggurrwb
|
||||||
|
grbbggbgrugwbuubruwrgbwrbbwuugwrrugwrggbrurbwrrurbrwb
|
||||||
|
uuubbgrbwrurbwbuggbbgrwuguuwubrwgbgrrwurubbrwgggwbggrwb
|
||||||
|
urgwrgbbuwwrbrrrbbrwgwugwwrgrugwbgbbgrwb
|
||||||
|
wgbrwggguwwruuwwggwwrwbbbugbruwugbbbuuuwwgurrrbwwbubbwgburwb
|
||||||
|
buggbbgbgbbwwwurwrwrwbruwgwbbgrruwwgruubgwwwuggur
|
||||||
|
rbgbwubgbbgrurwwguwubrwubbuuggrugurubwuwgrwgubgugwguugrgw
|
||||||
|
urbbgurbubwwgbbwburrrbgrbwwubggwugbrrbugwrbgubrb
|
||||||
|
wbrurrrbgrgbgbwwwrwurrwbuuwrwwgrburwrrbgruggubgrguwgbwur
|
||||||
|
uuururbwrrwgwbwwrwwgwgruwurrbugwrgburgwrwrbrbw
|
||||||
|
rrwrurbrgubuguwurwgururugbgrbgubrgrgggurggugurgrbbuwgw
|
||||||
|
rrwuwrugwwbbubbrbrwrbwbwubgubgwwgrbugwgrugbgb
|
||||||
|
grwgbggwwwgwrwgruggbbgwrgwubgwrwguwgrguuuuuwgbbubgguugg
|
||||||
|
rbuurugruurwuwgburwgwgugrwgwwgwwgbrrugguwruw
|
||||||
|
urubgguwggurwbgrwwbubguwggbbbgrugwgrbgbrwgwrrbrbbrguub
|
||||||
|
wrbrurgwbubbwbbrwbbrugwgbubrwbgrgwguwuugbgugrgbg
|
||||||
|
rwuruwurgugggrgrrrugrurgggrrubguurbububugugbwurwuwwug
|
||||||
|
uubwuwrwwgrbbwgrrgubwgguggbrrwuruuwuubgrwuggbgruggbrr
|
||||||
|
uurbbgrgbrgbbgrgrbwwugbrrubgubgurrbbrrrbubr
|
||||||
|
guguggbgggwbbwrwrbwbgggrurburgurgbbwwgruru
|
||||||
|
wbrrbbuurwruuuwugrgubwuuurbrwurwurbwwbwububwbbbrwb
|
||||||
|
ubbrwgggwrwbwwwrbgbrrrbrubwrgurgbbgbuuuuugbwgwgrwuwwbuu
|
||||||
|
bwrbggbgrbbgubbwrrrubgwburgrgrrruurwuuggbguwbwwurrwrwb
|
||||||
|
gwuguuwbruwuuggrbrrbuwurbggbbwguwwgwwbgrurrwb
|
||||||
|
rrggbbgurwbbbgurbgbggubgrruuwbrbwgbrguwubbggguwbgruwwrwb
|
||||||
|
uwugbwwwrbbruubwbrgbuuubbgrubururrbrrgwwbgrwgbrwruwrwb
|
||||||
|
bwurruruwuguwrbuuggbwbrubbrwuwurbgwwbrgurgwuggr
|
||||||
|
ruuuwugrrurbwrgrbgurbrwbrbubbwwuuwwuwwuugugbbgrbggwr
|
||||||
|
uugrgwgwwgrbrubbugbgbrguwbbwwgrubbbgbgbruwugrrwb
|
||||||
|
brbgbwwwbbuuugrwrugbwurrgggbwwuubwruuburrbrr
|
||||||
|
wrwrgwwrwrugrwrrurbuuwgurgbrgbrwwbwrggwbrbbuugrbbwugrwb
|
||||||
|
rugbbggbuggwgwwuruwrwbggwgburuubuwugbggbrbgubrwgr
|
||||||
|
ubrrwuwguwwrbgwbbbrrgrggrgrgwgbrugubuwwwwuwguuurwb
|
||||||
|
ruguguwuruubbwwwgwgrrrwrwwuuuruuuwuwgwubwwrwu
|
||||||
|
brggrwrbrwwwuwwbwrgwbwurbuwwrbrgrrugbwugrbguuwb
|
||||||
|
gwuugwuuuggrgurbbwggrubbwuurruuwrggrggurgrrwrrgbrb
|
||||||
|
ugwggbgbbrrwgwrbuggurrbuugbwrurbbuggubwbgwgwuwgwrrrwubuwurwb
|
||||||
|
wwuugrrggrbrrgwuuugbwbwrurrbuwwwubwrbrggubbubbgrrr
|
||||||
|
ggwuubgurubrurbwgrwwuggururbrgruwgruugugrbwgrbubrbrb
|
||||||
|
rwggguwwubburgwwuurrurrrgwgbrgbbbrruguwbwugguuurr
|
||||||
|
rrbwbrrwbuwwbwrrbbbwwubuwgurrguwugguwrbuwuubbwuwrbggbuu
|
||||||
|
grgrbggrburrbgwbwbuugugbburbrwrrrguuwbugggugrrrgrwrwb
|
||||||
|
buubrrggburbggwgwgrbgurwbwwwubbwbgbwwuwbwwrwb
|
||||||
|
wguuurrggwguurburgugugbrwrgbwrrwbgrugwuugbwgbbuubggrugbub
|
||||||
|
wbwgruuugggrrubbwrwwubugguguwwguubwurwgwwrbgubwrgbbubrwb
|
||||||
|
ruwrggugbbbbgurwggruuggwwggrwwrwbbbrwguuuuug
|
||||||
|
bggwwuwgwbuguwggrgurbwugbbbuurwgwuggubgrwbwwwbwgrrbuug
|
||||||
|
rrgwugbuwugubuuggbrwwguurwuwugwuuuubgrwrrwrbgrgwbuggwr
|
||||||
|
grguwrrurgbwbwrgwwwrggrwbwgbuwbbbwbggrbrwbbrwb
|
||||||
|
uubgbrgrwbbgwrbrwwgbgburbuurbubbguuwbgbuuwburbubggguug
|
||||||
|
gwbgwrbwwwubuwwrwbbwrrrgwuwbrubwbgggubugbwwgggburrbugrgu
|
||||||
|
bwgwguugggbrrbuggwggwgbrbugurbwwuuwwwugbbubbrwb
|
||||||
|
rwgwbgbwwuwrbgbgwbrwuwruuubbrbwwuruwbwrbrwrwrgru
|
||||||
|
wwrbwwwurggbgggugwuggubbbwgrrwrbwwuugwrbubwgrbgrrr
|
||||||
|
ubrubggrgguugburwgbbrwurbrburuuwwrrbrrwwbgwbgggwugurugwwrwb
|
||||||
|
gbggrubrgubgubbwwwwuwrbburrgrwbrgrwbrwguuwwuwrgguwrwb
|
||||||
|
bbwgbrwggwrbwugbgubugwwuwwggbgubwubgggwwrbgrwrwwgb
|
||||||
|
uubrbgbbguugrruurbrwbbuuuubbwwuruuuwbbgwbgrbwrrrgb
|
||||||
|
bbbwugurwrwurgbuuugrrruubrwrgwguwubrurgburbgrrwrr
|
||||||
|
gggwwgwubwwwrrbubuuuggrgrgburugbgbuurbgrugrwrgwgruu
|
||||||
|
burugbguwbuwgubugubbburrgrrwuruubbrbrwwbwrburubwubbb
|
||||||
|
wrwbwrbggggbgbruwwwubuurwbgwgrrgrwubwrrbbggrgbwbwbbbuwbbrwb
|
||||||
|
uuurggrbbwubuwbwbwrgrbbwgrgugbrruguuugrgrubb
|
||||||
|
buuugbwbbgwrgruuwrbwbgwbbrgwbrgrwruwwwgwruggrb
|
||||||
|
rgwrrguwuugbgrbubgbuburgrbuuwwgbbwgurrwwubrgwguw
|
||||||
|
ruuwwurgwurgbuwurruurbbbbugrubrrgwrgurgubbgbbwgugrwb
|
||||||
|
urrwrwgugrrbbrgggrgubwbrwwgbgururbwruguwwrgburg
|
||||||
|
rugrggruuubgguuwwwbgbgbbgugrwgurrruubrgburgrrwb
|
||||||
|
ubwwrugbguwrrrbwuwggrwrwrububurbgruwbgwrbbbgrrrgggwr
|
||||||
|
wuggwbgwbbbwugrbbwwubgrbwrgrgrrgwuuwgrwgwwurug
|
||||||
|
bgwwbbbwrrwugwgwwrruggrbwuwbwwgrwrgrrguwgrurwgurgggrrwb
|
||||||
|
guwrwubwrwwwgugguuwwurbgugbuwrrbwrguuwgbwbbgbgurrgwbbu
|
||||||
|
gwugguubwruguubuguguugbuuugrrwrrrurrbwgrbwgwugburuu
|
||||||
|
brwgwrbbgwurgrugggrrbbwruugrgburrwggwguwuuwrrbw
|
||||||
|
bwbugwurgbgurwwrugurgbbgbuurugggwugubrwb
|
||||||
|
bbbuuubggggggwrbrgbbwruwuuwugurbubgwgrrguugbwuggrubrwbwgr
|
||||||
|
wgrrrurugrbgwbgbbrrgurrgwrurrwwwbgrguuggrgurwww
|
||||||
|
gubbrbwurgwwbbggurwgbgrwrwbrugrwrburgrrugb
|
||||||
|
uubuubgguwwbrrwwwwubgwbbwbwwwwugguguwburgbrbbbg
|
||||||
|
ubgrwugugrruwuurrwguggwuwbrwbwrugruuuwrugwwuwrubuugbrwrrrwb
|
||||||
|
wrgwguugruurububuurwurrwuggrrubbrrrgugwuugwurgrg
|
||||||
|
bwubggubrrburbrbwggrurwrbwbgbbgwggubggbubrububrwb
|
||||||
|
urugwwbubbrrwwwrbrwuwbwurwgrurbwbrurbrwrgrruburwb
|
||||||
|
rruubgwwwgrwrggubgubwrbbgwgbguruwwgrgburgwrg
|
||||||
|
rgugrgrbbrgwbguwgguguwrrubgwwgwgwuwubwbwrggbwuuuwrrbwgwu
|
||||||
|
gwuwbwuwwbwwggbbgrgwugwrgugruuubgwguwwgbbrwb
|
||||||
|
bbwuguwwwuguuuuurrbbububurbwruuubugbgrbuwgrururwb
|
||||||
|
bbbugrrrbrgburgwuuruwrbwgwrgwgrugbrgububrbwwgrbrgbuwbgguu
|
||||||
|
bubwuuwwuwbggrwwubruwbubbwwgwrubuguwbuuwugwrbbugr
|
||||||
|
uwrgubbrrgguggubuuwrrrwrrurbuubrgbbbwgrwub
|
||||||
|
wbbguubbbbguwuwbwrgwwubwrurgwurbrrwurrbgrbbburw
|
||||||
|
rgbwugbubggbrbwgbuuubrwgbrruwggbbggbbuggwg
|
||||||
|
rgrugbgrwbwgwuwrbggrwuburrbguwguguuugwgubrgruwwbw
|
||||||
|
uuuruwuurbwubrwgwuuwbugrrwggbwwubbugwgubbrwgwwwugbwwrwb
|
||||||
|
brgbguwuwggbbwrbggggbrbubbwbrwbbgwuubbbbgwrgwgbbwu
|
||||||
|
uggrgrubuuuwruuurbuwwugbwwgwwguubuggubwwugrrwbggwrgubrbwrw
|
||||||
|
wbburbgbbrbbggrgrrurwwgurbubwuurwwgwbwrgbguuuwrubwwubuu
|
||||||
|
buwbgbrwgbubbrbrgwuwbgbrwburgbbrwgguwwbwgbwbgbww
|
||||||
|
gurwggwurgwbbubbgbgruggbrbubuwbruwwrwguggrbbbrggwgbrgbgu
|
||||||
|
wbwwwbbbwgruuuwubbrrgbbggwbrgwwbgurbbwgwgwgrbggwrugrugggbrwb
|
||||||
|
bbgrwgruggrwwurwwrggbruugbbrgwggrrugrwuuugbrrwb
|
||||||
|
wwbugbwuguwgbrwrwgrrbuwgwuwgwrbbbubwwgbrguwuw
|
||||||
|
ugwbgbwrrgbwrrrbrwwguggruwugwwurwrrbgwubbwrggugbruuw
|
||||||
|
bbbruuwuwwurrwbuwbuguuggurgbgbruruwurgbgbgrrwb
|
||||||
|
bggwgrggrrugwwbuwgbrbbgwbbuwwuwbrgbwbggwbbgggugwggrwbbur
|
||||||
|
uuurruuuuugrbuwwgrbwwuuwbruggggbgrbuuggbuuuwgrrb
|
||||||
|
gbgrgubggbgrgguuwbwbrwbggwurgbwwwbrubwgwrggrbwurggrwrrr
|
||||||
|
ggbrbrbguwguuugubruggbgwbbuwwrbuuugbuuwgww
|
||||||
|
wurrbururbgrbrgwggwggrgrgrgbgrrgbbwwgbrgwururwb
|
||||||
|
uubugrgbrubuggrggrbwbbbruwbrrwugugrurwbgwwwbubgrggr
|
||||||
|
rgwwbwgbwugugrwrrwubrwbgwuwuruggbguubbwbugururu
|
||||||
|
wbuwrbggrrwbgbrbwwwbbgwbwrrggubrubbwbubrgwrwburbgb
|
||||||
|
gbwuruuwuwwwbggurugrwgwubbgbwwwurgwbruwgbgrbwrgurwb
|
||||||
|
gwururwwugrrubbruwbuwrbgwrbruugbuuugggwbubwubb
|
||||||
|
wgrgrrgwwruugbrrrbwwrwrrgbguwwgwrbgwuuwbgwuwrugg
|
||||||
|
ugurwrbgrbubwbbgrwgrwrbgwbwuwubgrbuwwrubrggwuguwbgbu
|
||||||
|
ugrrburuwwrrwgrugbruwgwbbubrbuwbwwruuurgbuwwgwgbwwbuburwb
|
||||||
|
wurugurbrbubbbbburuubrbrrbwubguwggwubbrbrbrgurrbwwwuggwg
|
||||||
|
bwrburggbggbbgbuguwbgwwbbbubugwguwbbgbgwbg
|
||||||
|
gbwrbgbgbrugbbguruuwgurwwruggggbuburbgwwrwb
|
||||||
|
rubrgwubrrrrrwbwbrurbwwggrrburrugrrubwbbguwbbgrwwrbburrwbr
|
||||||
|
wgbuurbrrbgrugwgubuwbgurrwwuwgrbrgrbgwrwwbrururuuwrrrwb
|
||||||
|
grwuuggwugwgrbggggbwbgwububwrgwgburrugurbugurrrwrwrububrwb
|
||||||
|
bbggugurwurrgggrrbbrurubbwbuwbbwwbrwgrrrubrgur
|
||||||
|
gwwwugwuguubuuwgbgruruwguugrbbwgbbwwgrgrwwrrrrrbuwbbwburwb
|
1
2024/day-19/input-towels
Normal file
1
2024/day-19/input-towels
Normal file
@ -0,0 +1 @@
|
|||||||
|
rwgw, ruwgb, urwbr, wu, uurbubr, gbbr, uwwb, rubgwu, wggwbwr, rugubuww, uw, rgru, rgrr, rrg, rbb, uurbrww, br, uwrwrwgb, bwbw, wgbu, wggu, urg, ugr, ugur, gurrbrr, ubgrruu, bb, rburguu, urgg, wggugggr, brww, bwwgr, wugub, grgg, ugw, grubw, gbwru, rww, wbu, ggwbu, ugurw, ggwb, uubuwgb, bbugw, rgg, wurr, bwbb, wburbb, rbrb, bbrwgw, gwbb, ubggr, gurr, rrr, rburg, uug, bbrubu, bwgu, gwug, guw, buwurgw, rruwggg, ubb, wwb, wbrg, wgr, wgrw, gubrr, rrwru, gbub, rbr, rwr, rubwu, ub, bgwr, gu, ggggwrbr, wrw, grg, rbuwu, bgbr, ugww, wrg, brwub, gruu, gbwbw, wubw, wur, grggwb, uuwuug, wug, rruuw, wgwg, uww, gbgu, rurr, gwguu, gwrwbw, guuww, rbugw, gg, uwbw, ubgrubur, wurrb, rgugurr, wrr, buggb, urwrb, ubuu, rgu, gwggb, uuu, uub, bruubb, bww, uwgb, rrubwg, ubwu, ugu, buwrrbwr, bbr, rbrww, ubuwg, bwwrr, gbwg, bw, gguugu, bgbbw, ggb, wrruuwbr, rug, uur, rgw, gbb, wuwg, r, guug, gwb, wbgr, bbbw, grwgwr, gwg, rurur, bubu, rguu, brb, ugbbbrr, wugrrr, bbw, bbru, bgrbubg, ubw, uruu, wgrgrwwr, bbwrugu, gbbbwur, rubbwbuw, wuwrwbu, brwbru, wub, rbrg, wwbwrbu, grbbu, ubbbwb, urw, gwuw, uu, urwugu, bgw, gw, rbwwwurg, gubr, bbu, rur, rburwgr, gwwgr, gb, rbur, rbw, ug, wurur, gbbrrb, ruuuwugr, wwrgug, gbrugu, wrww, wuwbgw, uwwwgrgb, gww, grwwu, ggu, rrurr, bgr, ubugwu, wwgwur, urrrbw, bwr, wrbgbu, wrwbb, gug, bwu, ruurw, rw, wbb, bbwgwrr, wgg, ugwu, wr, wwwr, w, wbwbuw, guugg, bug, bbbb, brbb, brur, rbg, wuu, wurwgb, rru, urrrbugr, grr, rubu, uugrwbb, bgbrurr, wgw, gub, ugwwgr, urwr, wbwbg, wrrb, rwrgg, ggwgrgw, bwbu, uwb, rg, urr, brrur, wg, u, bu, ubbbrw, brgbbbbu, wgrgu, bgb, ubu, uugubg, bub, rwrr, gggbrw, gwwrww, grub, urgrgw, bru, wgwgb, wubrg, ugrwwbb, wbgwrru, gbwb, wugu, uwwwg, ubr, gwr, bguwb, guwbw, wrb, grw, gwwgbb, wbwwr, grbwub, ubg, bwbgw, rwu, uurb, rbwgur, ubbr, grrr, ubwg, rgwuug, rgb, grrbub, bwb, uwuuubg, wrugb, brurub, wurg, urur, uru, bwwrrr, urwub, uwr, brr, ggg, bbg, bgg, guuruuu, ubwb, uburgbb, gbgrgug, rbwr, uwu, rwwbuugr, ubwwg, wwr, brg, wruububu, bgbb, ww, wrgbu, ugb, gru, bbwgbr, brw, bwwbb, wbr, grbg, wbbb, brbrwwbw, gbgwrrub, wwu, wgb, rruruu, wuggr, urb, bwg, wbg, rbu, wwg, wuw, wrbbugg, rb, rrgrbrg, guu, bwwugr, rwrb, gwbrb, wrugub, ubbrwu, uggbb, ggr, wwru, rgbb, bbgbgrr, wuruw, gbg, ubbwrg, bur, wuwuu, bgu, ruwgur, gbu, wwuwb, ggbgg, ugrbb, bugw, rggrb, rrw, rgwru, ubru, grbbuw, wbrr, wruu, ggw, wbgguuw, rggrugw, gbgwwg, gwwru, gur, rr, wbgb, burbwr, rggu, wgwu, rwuug, gwrbr, wbbwbgb, wurb, gbbuggg, gbbgbg, ur, ugwwu, wgu, bg, urrbgr, gurwg, bbb, urrr, bwurbrr, gbr, gwurb, ugg, uwbbrr, buggr, rub, bwrgbw, uwbb, ububggw, uuwrbbu, rrrwr, ruwgub, bugb, wwrw, gwbg, wwwrrr, urgggwb, gwuwr, www, g, wgrg, wbuwb, grwrg, uuw, wuwgb, buru, rgr, rrgu, urbgb, wgrr, gbuwww, rrgrgw, rgbrg, gugbuw, rrb, rrgbug, ugwbrgw, rwuw, grugrrbr, gbgww, ruw, wubb, gr, ruu, ubbg, brgurb, rwg, gwu, ruwr, grb, uwg, wgww, bgbbrww, buu, rurbgr, rwbw, gwwr, rwwbbugu, grgbr
|
90
2024/day-19/solution-1.sh
Normal file
90
2024/day-19/solution-1.sh
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
TOWEL_FILE=$1
|
||||||
|
DESIGN_FILE=$2
|
||||||
|
TOWEL_ITER=10
|
||||||
|
|
||||||
|
read -r -a TOWELS <<< "$( < "$TOWEL_FILE" tr ',' ' ' | paste -s -d " " )"
|
||||||
|
read -r -a DESIGNS <<< "$( < "$DESIGN_FILE" paste -s -d " " )"
|
||||||
|
|
||||||
|
#printf "Towel %s\n" "${TOWELS[@]}"
|
||||||
|
#printf "Design %s\n" "${DESIGNS[@]}"
|
||||||
|
|
||||||
|
# Check if towel is a viable match
|
||||||
|
match_towel () {
|
||||||
|
TOWEL=$1
|
||||||
|
MATCH=$2
|
||||||
|
FULL_DESIGN=$3
|
||||||
|
|
||||||
|
TO_MATCH="$MATCH$TOWEL"
|
||||||
|
PARTIAL_DESIGN=${FULL_DESIGN::${#TO_MATCH}}
|
||||||
|
if [[ $PARTIAL_DESIGN == "$TO_MATCH" ]]
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TOTAL_VALID=0
|
||||||
|
declare -A UNMATCHED_TOWEL_LIST
|
||||||
|
for DESIGN in "${DESIGNS[@]}"
|
||||||
|
do
|
||||||
|
printf "Starting design : %s\n" "$DESIGN"
|
||||||
|
declare -A MATCH_LIST
|
||||||
|
# Get all viable starting matches
|
||||||
|
for TOWEL_IDX in "${!TOWELS[@]}"
|
||||||
|
do
|
||||||
|
TOWEL=${TOWELS[$TOWEL_IDX]}
|
||||||
|
#printf "Testing towel: %s\n" "$TOWEL"
|
||||||
|
|
||||||
|
if match_towel "$TOWEL" "" "$DESIGN"
|
||||||
|
then
|
||||||
|
#printf "Starting match found. towel : %s\n" "$TOWEL"
|
||||||
|
# Copy towel list and remove the starting towel
|
||||||
|
read -r -a TOWEL_LIST <<< "$( printf "%s " "${TOWELS[@]}" )"
|
||||||
|
unset "TOWEL_LIST[$TOWEL_IDX]"
|
||||||
|
# Add to combinations
|
||||||
|
MATCH_LIST["$TOWEL"]=$( printf "%s " "${TOWEL_LIST[@]}" )
|
||||||
|
unset "TOWEL_LIST"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ ${#MATCH_LIST[@]} -eq 0 ]] ; then printf "No available starting matches.\n" ; continue ; fi
|
||||||
|
# Now iterate over starting matches
|
||||||
|
LOOP_COUNT=${#TOWELS[@]}
|
||||||
|
while [[ $LOOP_COUNT -gt 0 ]]
|
||||||
|
do
|
||||||
|
for TOWEL_MATCH in "${!MATCH_LIST[@]}"
|
||||||
|
do
|
||||||
|
read -r -a TOWEL_LIST <<< "${MATCH_LIST[$TOWEL_MATCH]}"
|
||||||
|
# Iterate over towels and find subsequent match
|
||||||
|
for TOWEL_IDX in "${!TOWEL_LIST[@]}"
|
||||||
|
do
|
||||||
|
TOWEL=${TOWELS[$TOWEL_IDX]}
|
||||||
|
if match_towel "$TOWEL" "$TOWEL_MATCH" "$DESIGN"
|
||||||
|
then
|
||||||
|
#printf "Match found for %s towel : %s\n" "${TOWEL_MATCH}" "$TOWEL"
|
||||||
|
unset "TOWEL_LIST[$TOWEL_IDX]"
|
||||||
|
# Add to combinations
|
||||||
|
MATCH_LIST["$TOWEL_MATCH$TOWEL"]=$( printf "%s " "${TOWEL_LIST[@]}" )
|
||||||
|
unset "MATCH_LIST[$TOWEL_MATCH]"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
(( LOOP_COUNT-- ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Calculate proper matches
|
||||||
|
for MATCH in "${!MATCH_LIST[@]}"
|
||||||
|
do
|
||||||
|
if [[ $MATCH == "$DESIGN" ]]
|
||||||
|
then
|
||||||
|
printf "Match found for design %s\n" "$DESIGN"
|
||||||
|
(( TOTAL_VALID++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove matches
|
||||||
|
unset MATCH_LIST
|
||||||
|
done
|
||||||
|
printf "Total valid designs: %s\n" "$TOTAL_VALID"
|
76
2024/day-19/solution-2.sh
Normal file
76
2024/day-19/solution-2.sh
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
TOWEL_FILE=$1
|
||||||
|
DESIGN_FILE=$2
|
||||||
|
|
||||||
|
read -r -a TOWELS <<< "$( < "$TOWEL_FILE" tr ',' ' ' | paste -s -d " " )"
|
||||||
|
read -r -a DESIGNS <<< "$( < "$DESIGN_FILE" paste -s -d " " )"
|
||||||
|
|
||||||
|
# Check if towel is a viable match
|
||||||
|
match_towel () {
|
||||||
|
TOWEL=$1
|
||||||
|
MATCH=$2
|
||||||
|
FULL_DESIGN=$3
|
||||||
|
|
||||||
|
TO_MATCH="$MATCH$TOWEL"
|
||||||
|
PARTIAL_DESIGN=${FULL_DESIGN::${#TO_MATCH}}
|
||||||
|
if [[ $PARTIAL_DESIGN == "$TO_MATCH" ]]
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
TOTAL_VALID=0
|
||||||
|
# Loop through designs
|
||||||
|
for DESIGN in "${DESIGNS[@]}"
|
||||||
|
do
|
||||||
|
# The idea is for each design, keep a sum of combinations
|
||||||
|
# for each index position of the DESIGN string
|
||||||
|
# Since the branches "multiply", just take the sum
|
||||||
|
# at the starting index, and add it to the end
|
||||||
|
# of the "combined" index
|
||||||
|
# for each possible combination.
|
||||||
|
printf "Starting design : %s\n" "$DESIGN"
|
||||||
|
declare -A POINTER_LIST
|
||||||
|
POINTER_LIST[0]=1
|
||||||
|
POINTER_END=$(( ${#DESIGN} ))
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
POINTER=${#DESIGN}
|
||||||
|
# Pick lowest pointer value
|
||||||
|
for P in "${!POINTER_LIST[@]}"
|
||||||
|
do
|
||||||
|
if [[ $P -lt $POINTER ]]
|
||||||
|
then
|
||||||
|
POINTER=$P
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
POINTER_VALUE=${POINTER_LIST[$POINTER]}
|
||||||
|
# Check if end has reached
|
||||||
|
if [[ $POINTER -eq $POINTER_END ]]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Loop through towels and remove earliest pointer
|
||||||
|
for TOWEL in "${TOWELS[@]}"
|
||||||
|
do
|
||||||
|
TOWEL_LEN=${#TOWEL}
|
||||||
|
END=$(( POINTER + TOWEL_LEN ))
|
||||||
|
if [[ ${DESIGN:$POINTER:$TOWEL_LEN} == "$TOWEL" ]]
|
||||||
|
then
|
||||||
|
POINTER_LIST[$END]=$(( ${POINTER_LIST[$END]} + POINTER_VALUE ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Done looping through for specific point
|
||||||
|
unset "POINTER_LIST[$POINTER]"
|
||||||
|
done
|
||||||
|
printf "Total matches for %s is %s.\n" "$DESIGN" "${POINTER_LIST[$POINTER_END]}"
|
||||||
|
TOTAL_VALID=$(( TOTAL_VALID + POINTER_LIST[$POINTER_END] ))
|
||||||
|
unset "POINTER_LIST"
|
||||||
|
done
|
||||||
|
printf "Total valid designs: %s\n" "$TOTAL_VALID"
|
8
2024/day-19/test-designs
Normal file
8
2024/day-19/test-designs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
brwrr
|
||||||
|
bggr
|
||||||
|
gbbr
|
||||||
|
rrbgbr
|
||||||
|
ubwu
|
||||||
|
bwurrg
|
||||||
|
brgr
|
||||||
|
bbrgwb
|
1
2024/day-19/test-towels
Normal file
1
2024/day-19/test-towels
Normal file
@ -0,0 +1 @@
|
|||||||
|
r, wr, b, g, bwu, rb, gb, br
|
Reference in New Issue
Block a user