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