Compare commits
41 Commits
ca493d881f
...
main
Author | SHA1 | Date | |
---|---|---|---|
0134815002 | |||
fd78069221 | |||
ce0033c6f5 | |||
0d518e1691 | |||
de2fd03c3c | |||
e02ee993c6 | |||
ac940aad0e | |||
f17b7f75d2 | |||
f6e91fa1fa | |||
37667c0990 | |||
415f757054 | |||
615f9ec252 | |||
23076697cf | |||
9492a8ae9a | |||
004d5a7bd3 | |||
fd10d06b88 | |||
937635d773 | |||
beac193288 | |||
3764b25f6d | |||
b33653672c | |||
fc7e08ef0e | |||
0f95c6367e | |||
58f828fef3 | |||
f948a2da13 | |||
792d86423f | |||
9e60df1c2e | |||
6e636d4c34 | |||
39e8e8735b | |||
d2d4bf7a64 | |||
d9a1e9fce3 | |||
a4fa64624a | |||
29a4e45e63 | |||
e0d3bcfe9e | |||
eff5810fe3 | |||
3bf816b20f | |||
c7c4a05cb0 | |||
ad1778c8f0 | |||
b4b2a6e794 | |||
da0db2fde1 | |||
ec2c4a97c9 | |||
9e0d86d996 |
54
2024/day-10/input
Normal file
54
2024/day-10/input
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
543067650323210321032110356789890110710189878760134567
|
||||||
|
612148941212306782345091235410765227893258759651021298
|
||||||
|
701238932301456798106787549323454336794567549842330807
|
||||||
|
898547215450589867287654678892961245987654456732498910
|
||||||
|
987656306769678956398013234781870301256003301201567821
|
||||||
|
234543215878760145478920105690210982340112210341056932
|
||||||
|
109650124981232230569834124567345673451234985452347845
|
||||||
|
018744323890341021656765033438454589298545676701037796
|
||||||
|
199803210787650110765017842129823672107655677812378987
|
||||||
|
785012345654789541874326956010510563201234389983405676
|
||||||
|
174321498723498632903455467173421454102348210234514430
|
||||||
|
065430239014323721212762398982567876218959650149623521
|
||||||
|
145540128765017890101871081071018967327968743898734678
|
||||||
|
236692134984178768718981012567894458456876212798604329
|
||||||
|
987783005673269659654108923458763349663212108789015012
|
||||||
|
896654012562154546743267830309854218767103419276126787
|
||||||
|
765780123473043432890154321212903109878756578125435698
|
||||||
|
434099874984012301740125654567812893469017647030165556
|
||||||
|
323101065765101787434436763058906732154178736543256765
|
||||||
|
013298187890678696325569892143215440043289128954343894
|
||||||
|
010367296541549045016678765014300351234567037760012983
|
||||||
|
329458305032132134787867410967891267653438546891898012
|
||||||
|
458789414145010120196986323898763298344129655432743210
|
||||||
|
567076523236678743285898456777654101201098766653658901
|
||||||
|
456167654107549658374567689985403100312434985567877014
|
||||||
|
343228943298938569843210576876312238920125676656986323
|
||||||
|
651014543498127478755765435410278947437876985543235434
|
||||||
|
743223672567078369876890324320127656506987234350145632
|
||||||
|
894102981089569232125981210451256543215432122341076541
|
||||||
|
765091234676352101034674323401237894101341001456789830
|
||||||
|
014780365445443032126501012532345743103210112565898321
|
||||||
|
123689876034321145098432107645236743254101101876543210
|
||||||
|
094545763125210056788943258896107858969010332987674301
|
||||||
|
785430432106782169877652349787567967678321245696784561
|
||||||
|
876021569045893458965601654343478914565414326781093870
|
||||||
|
987109878010432167014298710234323901258905015492012901
|
||||||
|
789219894324569052123109620123217892109876012323458692
|
||||||
|
654308765543678743013234538994106543010870965410069783
|
||||||
|
789877787632189852101110145885287676521961871012178654
|
||||||
|
034565896601087601211001406776896789437652676523468743
|
||||||
|
121053795542194512389132312345445676548943989430549012
|
||||||
|
262342187634765433498545434531230107401232104321678298
|
||||||
|
876533014123892324567696526540043298340981010780890187
|
||||||
|
983414523016101019876587017832134781256672125690743296
|
||||||
|
032101654327892100345678789901295690764543434321652345
|
||||||
|
123089789236743981234589654800387789835678987787601336
|
||||||
|
854176590187656876104310343211456876544549016098543223
|
||||||
|
965765410194545675465231230898565963233432145123210112
|
||||||
|
876894321243232980370110141767653210112321039654101101
|
||||||
|
146765232100101061289879852632154100203410128789210322
|
||||||
|
036787103761267876518768763543069911012543454376325412
|
||||||
|
123498654854356987405650654985678892327632567215436701
|
||||||
|
210567569983543292314321569876301765438761078904589898
|
||||||
|
325456478754330101223433478765432654349652987615678765
|
151
2024/day-10/solution-1.sh
Normal file
151
2024/day-10/solution-1.sh
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||||
|
MAP_LEN=$( < "$FILE" wc -l )
|
||||||
|
read -r -a MAP_ARRAY <<< "$( paste -s -d "" <"$FILE" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
printf "%s " "${MAP_ARRAY[@]}"
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
MAP_SIZE=${#MAP_ARRAY[@]}
|
||||||
|
for (( i=0; i<MAP_SIZE ; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "Trailhead found at position %s\n" "$i"
|
||||||
|
TRAILHEADS+=( "$i" )
|
||||||
|
elif [[ ${MAP_ARRAY[i]} -eq 9 ]]
|
||||||
|
then
|
||||||
|
printf "Peak found at position %s\n" "$i"
|
||||||
|
PEAKS+=( "$i" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "%s " "${TRAILHEADS[@]}"
|
||||||
|
printf "\n"
|
||||||
|
printf "%s " "${PEAKS[@]}"
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
get_nine () {
|
||||||
|
|
||||||
|
# Trails are explored areas
|
||||||
|
# Paths are areas to explore
|
||||||
|
GET_NUM=$1
|
||||||
|
DIRECTIONS=$2
|
||||||
|
TRAIL=$3
|
||||||
|
COMBINATIONS=()
|
||||||
|
|
||||||
|
# For each direction, get multiplication of prime number
|
||||||
|
# corresponding to each direction
|
||||||
|
# Modulus for valid directions is 0
|
||||||
|
# 2 : Up
|
||||||
|
# 3 : Down
|
||||||
|
# 7 : Left
|
||||||
|
# 13 : Right
|
||||||
|
if [[ $(( DIRECTIONS % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL - MAP_WIDTH ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 3 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL + MAP_WIDTH ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 7 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL - 1 ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 13 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL + 1 ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
#PRINT1=$( printf "%s " "$TRAIL" )
|
||||||
|
#PRINT2=$( printf "%s " "${COMBINATIONS[@]}" )
|
||||||
|
#printf "trail: %s, Get: %s, combinations: %s \n" "$PRINT1" "$GET_NUM" "$PRINT2" >&2
|
||||||
|
|
||||||
|
# Check if the end has been reached
|
||||||
|
# or no matching neighbors
|
||||||
|
if [[ $GET_NUM -eq 9 ]] || [[ ${#COMBINATIONS[@]} -eq 0 ]]
|
||||||
|
then
|
||||||
|
# Exit recursion
|
||||||
|
printf "%s " "${COMBINATIONS[@]}"
|
||||||
|
#printf "%s " "${COMBINATIONS[@]}" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recurse
|
||||||
|
NEXT_NUM=$(( GET_NUM+=1 ))
|
||||||
|
read -r -a RESULTS <<< "$(
|
||||||
|
for INDEX in "${COMBINATIONS[@]}"
|
||||||
|
do
|
||||||
|
RESULT=$(
|
||||||
|
get_nine \
|
||||||
|
"$NEXT_NUM" \
|
||||||
|
"$( get_valid_directions "$INDEX" )" \
|
||||||
|
"$INDEX"
|
||||||
|
)
|
||||||
|
printf "%s " "$RESULT"
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
printf "%s " "${RESULTS[@]}"
|
||||||
|
#printf "%s " "${RESULTS[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
get_valid_directions () {
|
||||||
|
|
||||||
|
IDX=$1
|
||||||
|
NUM=1
|
||||||
|
|
||||||
|
# Basically check for bounds
|
||||||
|
# For each direction, get multiplication of prime number
|
||||||
|
# corresponding to each direction
|
||||||
|
# 2 : Up
|
||||||
|
# 3 : Down
|
||||||
|
# 7 : Left
|
||||||
|
# 13 : Right
|
||||||
|
if [[ $(( IDX / MAP_LEN )) -gt 0 ]]
|
||||||
|
then
|
||||||
|
(( NUM*=2 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX / MAP_LEN )) -le $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
(( NUM*=3 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX % MAP_WIDTH )) -ne 0 ]]
|
||||||
|
then
|
||||||
|
(( NUM*=7 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX % MAP_WIDTH )) -ne $(( MAP_WIDTH - 1 )) ]]
|
||||||
|
then
|
||||||
|
(( NUM*=13 ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%s" "$NUM"
|
||||||
|
}
|
||||||
|
|
||||||
|
ITER=9999
|
||||||
|
TOTAL=0
|
||||||
|
for TRAILHEAD in "${TRAILHEADS[@]}"
|
||||||
|
do
|
||||||
|
read -r -a PEAKS <<< "$( get_nine "1" "$( get_valid_directions "$TRAILHEAD" )" "$TRAILHEAD" )"
|
||||||
|
COUNT=$( printf "%s " "${PEAKS[@]}" | grep -Eo '[0-9]*' | sort -u | wc -l )
|
||||||
|
(( TOTAL+=COUNT ))
|
||||||
|
(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ;then break; fi
|
||||||
|
done
|
||||||
|
printf "%s\n" "$TOTAL"
|
144
2024/day-10/solution-2.sh
Normal file
144
2024/day-10/solution-2.sh
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||||
|
MAP_LEN=$( < "$FILE" wc -l )
|
||||||
|
read -r -a MAP_ARRAY <<< "$( paste -s -d "" <"$FILE" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
#printf "%s " "${MAP_ARRAY[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
|
||||||
|
MAP_SIZE=${#MAP_ARRAY[@]}
|
||||||
|
for (( i=0; i<MAP_SIZE ; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} -eq 0 ]]
|
||||||
|
then
|
||||||
|
#printf "Trailhead found at position %s\n" "$i"
|
||||||
|
TRAILHEADS+=( "$i" )
|
||||||
|
#elif [[ ${MAP_ARRAY[i]} -eq 9 ]]
|
||||||
|
#then
|
||||||
|
# #printf "Peak found at position %s\n" "$i"
|
||||||
|
# PEAKS+=( "$i" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#printf "%s " "${TRAILHEADS[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
#printf "%s " "${PEAKS[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
|
||||||
|
get_nine () {
|
||||||
|
|
||||||
|
# Trails are explored areas
|
||||||
|
# Paths are areas to explore
|
||||||
|
GET_NUM=$1
|
||||||
|
DIRECTIONS=$2
|
||||||
|
TRAIL=$3
|
||||||
|
COMBINATIONS=()
|
||||||
|
|
||||||
|
# For each direction, get multiplication of prime number
|
||||||
|
# corresponding to each direction
|
||||||
|
# Modulus for valid directions is 0
|
||||||
|
# 2 : Up
|
||||||
|
# 3 : Down
|
||||||
|
# 7 : Left
|
||||||
|
# 13 : Right
|
||||||
|
if [[ $(( DIRECTIONS % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL - MAP_WIDTH ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 3 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL + MAP_WIDTH ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 7 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL - 1 ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $(( DIRECTIONS % 13 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
INDEX=$(( TRAIL + 1 ))
|
||||||
|
if [[ ${MAP_ARRAY[INDEX]} -eq $GET_NUM ]]
|
||||||
|
then
|
||||||
|
COMBINATIONS+=( "$INDEX" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
#PRINT1=$( printf "%s " "$TRAIL" )
|
||||||
|
#PRINT2=$( printf "%s " "${COMBINATIONS[@]}" )
|
||||||
|
#printf "trail: %s, Get: %s, combinations: %s \n" "$PRINT1" "$GET_NUM" "$PRINT2" >&2
|
||||||
|
|
||||||
|
# Check if the end has been reached
|
||||||
|
# or no matching neighbors
|
||||||
|
if [[ $GET_NUM -eq 9 ]] || [[ ${#COMBINATIONS[@]} -eq 0 ]]
|
||||||
|
then
|
||||||
|
# Exit recursion
|
||||||
|
printf "%s " "${#COMBINATIONS[@]}"
|
||||||
|
#printf "%s " "${COMBINATIONS[@]}" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recurse
|
||||||
|
NEXT_NUM=$(( GET_NUM+=1 ))
|
||||||
|
TOTAL=0
|
||||||
|
for INDEX in "${COMBINATIONS[@]}"
|
||||||
|
do
|
||||||
|
COUNT=$(
|
||||||
|
get_nine \
|
||||||
|
"$NEXT_NUM" \
|
||||||
|
"$( get_valid_directions "$INDEX" )" \
|
||||||
|
"$INDEX"
|
||||||
|
)
|
||||||
|
(( TOTAL += COUNT ))
|
||||||
|
done
|
||||||
|
printf "%s" "$TOTAL"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_valid_directions () {
|
||||||
|
|
||||||
|
IDX=$1
|
||||||
|
NUM=1
|
||||||
|
|
||||||
|
# Basically check for bounds
|
||||||
|
# For each direction, get multiplication of prime number
|
||||||
|
# corresponding to each direction
|
||||||
|
# 2 : Up
|
||||||
|
# 3 : Down
|
||||||
|
# 7 : Left
|
||||||
|
# 13 : Right
|
||||||
|
if [[ $(( IDX / MAP_LEN )) -gt 0 ]]
|
||||||
|
then
|
||||||
|
(( NUM*=2 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX / MAP_LEN )) -le $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
(( NUM*=3 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX % MAP_WIDTH )) -ne 0 ]]
|
||||||
|
then
|
||||||
|
(( NUM*=7 ))
|
||||||
|
fi
|
||||||
|
if [[ $(( IDX % MAP_WIDTH )) -ne $(( MAP_WIDTH - 1 )) ]]
|
||||||
|
then
|
||||||
|
(( NUM*=13 ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%s" "$NUM"
|
||||||
|
}
|
||||||
|
|
||||||
|
TOTAL=0
|
||||||
|
for TRAILHEAD in "${TRAILHEADS[@]}"
|
||||||
|
do
|
||||||
|
COUNT=$( get_nine "1" "$( get_valid_directions "$TRAILHEAD" )" "$TRAILHEAD" )
|
||||||
|
(( TOTAL+=COUNT ))
|
||||||
|
done
|
||||||
|
printf "%s\n" "$TOTAL"
|
8
2024/day-10/test-input-1
Normal file
8
2024/day-10/test-input-1
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
1
2024/day-10/test-result-1
Normal file
1
2024/day-10/test-result-1
Normal file
@ -0,0 +1 @@
|
|||||||
|
36
|
1
2024/day-11/input
Normal file
1
2024/day-11/input
Normal file
@ -0,0 +1 @@
|
|||||||
|
2 54 992917 5270417 2514 28561 0 990
|
66
2024/day-11/solution-1.sh
Normal file
66
2024/day-11/solution-1.sh
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
read -r -a ROCK_LIST <<< "$( cat input )"
|
||||||
|
BLINK_NUM=25
|
||||||
|
|
||||||
|
ROCK_RETURN=()
|
||||||
|
ROCK_NUM=0
|
||||||
|
blink_rock () {
|
||||||
|
|
||||||
|
#printf "Blinking rock : %s\n" "$ROCK_NUM" >&2
|
||||||
|
|
||||||
|
# Remove leading zeroes
|
||||||
|
ROCK_NUM=$(( 10#$ROCK_NUM ))
|
||||||
|
# Rule 1 : Convert 0 to 1
|
||||||
|
if [[ $ROCK_NUM -eq 0 ]]
|
||||||
|
then
|
||||||
|
ROCK_RETURN=( 1 )
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 2 : If even number of digits, split half half
|
||||||
|
DIGIT_COUNT=${#ROCK_NUM}
|
||||||
|
if [[ $(( DIGIT_COUNT % 2 )) -eq 0 ]] && [[ $DIGIT_COUNT -gt 0 ]]
|
||||||
|
then
|
||||||
|
HALF=$(( DIGIT_COUNT / 2 ))
|
||||||
|
read -r -a ROCK_RETURN <<< "$( printf "%s %s " "${ROCK_NUM:0:$HALF}" "${ROCK_NUM:$HALF}" )"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 3 : Multiply by 2024
|
||||||
|
ROCK_RETURN=( $(( ROCK_NUM * 2024 )) )
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ROCKS_TO_BLINK=()
|
||||||
|
BLINKED_ROCKS=()
|
||||||
|
# Updates the global array
|
||||||
|
blink_rocks () {
|
||||||
|
|
||||||
|
BLINKED_ROCKS=()
|
||||||
|
for ROCK in "${ROCKS_TO_BLINK[@]}"
|
||||||
|
do
|
||||||
|
ROCK_NUM=$ROCK
|
||||||
|
blink_rock
|
||||||
|
BLINKED_ROCKS+=( "${ROCK_RETURN[@]}" )
|
||||||
|
done
|
||||||
|
#printf "BLINKED_ROCKS: " >&2
|
||||||
|
#printf "%s " "${BLINKED_ROCKS[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
FINAL_LIST=()
|
||||||
|
for ROCK_NUM in "${ROCK_LIST[@]}"
|
||||||
|
do
|
||||||
|
printf "Rock: %s\n" "$ROCK_NUM"
|
||||||
|
ROCKS_TO_BLINK=( "$ROCK_NUM" )
|
||||||
|
for (( i=0 ; i< BLINK_NUM; i++ ))
|
||||||
|
do
|
||||||
|
blink_rocks
|
||||||
|
ROCKS_TO_BLINK=( "${BLINKED_ROCKS[@]}" )
|
||||||
|
done
|
||||||
|
FINAL_LIST+=( "${BLINKED_ROCKS[@]}" )
|
||||||
|
done
|
||||||
|
printf "%s " "${FINAL_LIST[@]}"
|
||||||
|
printf "\n"
|
||||||
|
printf "%s\n" "${#FINAL_LIST[@]}"
|
106
2024/day-11/solution-2-2.sh
Normal file
106
2024/day-11/solution-2-2.sh
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
|
||||||
|
# Get max num size by squaring the largest number
|
||||||
|
MAX_NUM_SIZE=0
|
||||||
|
while read -r NUM
|
||||||
|
do
|
||||||
|
if [[ ${#NUM} -gt $MAX_NUM_SIZE ]]
|
||||||
|
then
|
||||||
|
MAX_NUM_SIZE=${#NUM}
|
||||||
|
fi
|
||||||
|
done <<< "$( < input tr " " "\n" )"
|
||||||
|
(( MAX_NUM_SIZE*=2 ))
|
||||||
|
|
||||||
|
# Just pre-compute a large number of digits
|
||||||
|
{
|
||||||
|
# Rule 1
|
||||||
|
printf "0 1 \n"
|
||||||
|
|
||||||
|
# Rule 2 : If even number of digits, split half half
|
||||||
|
for (( i=10 ; i<100; i+=1 ))
|
||||||
|
do
|
||||||
|
DIGIT_COUNT=${#i}
|
||||||
|
HALF=$(( DIGIT_COUNT / 2 ))
|
||||||
|
printf "%s %s %s \n" "$i" "$(( 10#${i:0:$HALF} ))" "$(( 10#${i:$HALF} ))"
|
||||||
|
done
|
||||||
|
for (( i=1000 ; i<10000; i+=1 ))
|
||||||
|
do
|
||||||
|
DIGIT_COUNT=${#i}
|
||||||
|
HALF=$(( DIGIT_COUNT / 2 ))
|
||||||
|
printf "%s %s %s \n" "$i" "$(( 10#${i:0:$HALF} ))" "$(( 10#${i:$HALF} ))"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Rule 3
|
||||||
|
for (( i=1; i<10; i+=1 ))
|
||||||
|
do
|
||||||
|
printf "%s %s \n" "$i" "$(( i * 2024 ))"
|
||||||
|
done
|
||||||
|
for (( i=100; i<1000; i+=1 ))
|
||||||
|
do
|
||||||
|
printf "%s %s \n" "$i" "$(( i * 2024 ))"
|
||||||
|
done
|
||||||
|
} | sort -n > kv-cache
|
||||||
|
printf "Cache built. KV size: %s \n" "$( wc -l kv-cache )"
|
||||||
|
|
||||||
|
# Load cache file
|
||||||
|
declare -A KV_CACHE
|
||||||
|
while read -r KEY VALUE
|
||||||
|
do
|
||||||
|
KV_CACHE[$KEY]="$VALUE"
|
||||||
|
done < kv-cache
|
||||||
|
|
||||||
|
# Use this function for cache misses
|
||||||
|
NUM=0
|
||||||
|
get_num () {
|
||||||
|
|
||||||
|
NUM=$1
|
||||||
|
|
||||||
|
# Rule 1 : Convert 0 to 1
|
||||||
|
if [[ $NUM -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "%s 1 \n" "$OCCUR"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 2 : If even number of digits, split half half
|
||||||
|
DIGIT_COUNT=${#NUM}
|
||||||
|
if [[ $(( DIGIT_COUNT % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
HALF=$(( DIGIT_COUNT / 2 ))
|
||||||
|
printf "%s %s \n" "$OCCUR" "$(( 10#${NUM:0:$HALF} ))"
|
||||||
|
printf "%s %s \n" "$OCCUR" "$(( 10#${NUM:$HALF} ))"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 3 : Multiply by 2024
|
||||||
|
printf "%s %s \n" "$OCCUR" "$(( NUM * 2024 ))"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Start the loop
|
||||||
|
tr " " "\n" < "$FILE" | sort -n | uniq -c > temp-input
|
||||||
|
for (( i=0; i<750; i++ ))
|
||||||
|
do
|
||||||
|
printf "%s Position %s\n" "$( date )" "$i"
|
||||||
|
#cat temp-input
|
||||||
|
while read -r OCCUR NUM
|
||||||
|
do
|
||||||
|
if [[ -v KV_CACHE[$NUM] ]]
|
||||||
|
then
|
||||||
|
for VAL in ${KV_CACHE[$NUM]}
|
||||||
|
do
|
||||||
|
printf "%s %s \n" "$OCCUR" "$VAL"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
get_num "$NUM"
|
||||||
|
fi
|
||||||
|
done < temp-input |
|
||||||
|
tee temp-output |
|
||||||
|
sort -n -k2 |
|
||||||
|
uniq -c |
|
||||||
|
awk '{sums[$3] += $1 * $2 } END {for (i in sums) {print sums[i], i}}' |
|
||||||
|
sponge temp-input
|
||||||
|
done
|
||||||
|
printf "Final count: %s\n" "$( awk '{print $1}' < temp-input | paste -s -d "+" | bc )"
|
107
2024/day-11/solution-2.sh
Normal file
107
2024/day-11/solution-2.sh
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
declare -A KV_CACHE
|
||||||
|
read -r -a ROCK_LIST <<< "$( cat input )"
|
||||||
|
DUMP_KV_CACHE=0
|
||||||
|
BLINK_NUM=75
|
||||||
|
# KV Cache provides n depth search,
|
||||||
|
# but must always be fully divisible by BLINK_NUM
|
||||||
|
DEPTH=5
|
||||||
|
if [[ $(( BLINK_NUM % DEPTH )) -gt 0 ]] ;then printf "BLINK_NUM DEPTH mismatch.\n" && exit ; fi
|
||||||
|
|
||||||
|
ROCK_RETURN=()
|
||||||
|
ROCK_NUM=0
|
||||||
|
blink_rock () {
|
||||||
|
|
||||||
|
#printf "Blinking rock : %s\n" "$ROCK_NUM" >&2
|
||||||
|
|
||||||
|
# Remove leading zeroes
|
||||||
|
#ROCK_NUM=$(( 10#$ROCK_NUM ))
|
||||||
|
# Rule 1 : Convert 0 to 1
|
||||||
|
if [[ $ROCK_NUM -eq 0 ]]
|
||||||
|
then
|
||||||
|
ROCK_RETURN=( 1 )
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 2 : If even number of digits, split half half
|
||||||
|
DIGIT_COUNT=${#ROCK_NUM}
|
||||||
|
if [[ $(( DIGIT_COUNT % 2 )) -eq 0 ]] && [[ $DIGIT_COUNT -gt 0 ]]
|
||||||
|
then
|
||||||
|
HALF=$(( DIGIT_COUNT / 2 ))
|
||||||
|
read -r -a ROCK_RETURN <<< "$( printf "%s %s " "$(( 10#${ROCK_NUM:0:$HALF} ))" "$(( 10#${ROCK_NUM:$HALF} ))" )"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rule 3 : Multiply by 2024
|
||||||
|
ROCK_RETURN=( $(( ROCK_NUM * 2024 )) )
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ROCKS_TO_BLINK=()
|
||||||
|
BLINKED_ROCKS=()
|
||||||
|
# Updates the global array
|
||||||
|
blink_rocks () {
|
||||||
|
|
||||||
|
BLINKED_ROCKS=()
|
||||||
|
for ROCK in "${ROCKS_TO_BLINK[@]}"
|
||||||
|
do
|
||||||
|
ROCK_NUM=$ROCK
|
||||||
|
blink_rock
|
||||||
|
BLINKED_ROCKS+=( "${ROCK_RETURN[@]}" )
|
||||||
|
done
|
||||||
|
#printf "BLINKED_ROCKS: " >&2
|
||||||
|
#printf "%s " "${BLINKED_ROCKS[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
read -r -a FINAL_LIST <<< "$( printf "%s " "${ROCK_LIST[@]}" )"
|
||||||
|
POSITION=0
|
||||||
|
while [[ $POSITION -lt $BLINK_NUM ]]
|
||||||
|
do
|
||||||
|
printf "%s Starting position %s, current len: %s, kv size: %s\n" "$( date )" "$POSITION" "${#FINAL_LIST[@]}" "${#KV_CACHE[@]}"
|
||||||
|
INTER_LIST_1=()
|
||||||
|
# Essentially move $DEPTH steps at a time
|
||||||
|
for ROCK in "${FINAL_LIST[@]}"
|
||||||
|
do
|
||||||
|
# Check if this is already cached
|
||||||
|
if [[ -v KV_CACHE["$ROCK"] ]]
|
||||||
|
then
|
||||||
|
# Retrieve cached entry
|
||||||
|
read -r -a X <<< "${KV_CACHE[$ROCK]}"
|
||||||
|
INTER_LIST_1+=( "${X[@]}" )
|
||||||
|
#printf "Cache hit. Key: %s, Value: " "$ROCK"
|
||||||
|
#printf "%s " "${KV_CACHE[$ROCK]}"
|
||||||
|
#printf "\n"
|
||||||
|
else
|
||||||
|
# Build cache entry
|
||||||
|
ROCKS_TO_BLINK=( "$ROCK" )
|
||||||
|
for (( i=0; i<DEPTH; i++ ))
|
||||||
|
do
|
||||||
|
blink_rocks
|
||||||
|
read -r -a ROCKS_TO_BLINK <<< "$( printf "%s " "${BLINKED_ROCKS[@]}" )"
|
||||||
|
done
|
||||||
|
KV_CACHE[$ROCK]=$( printf "%s " "${BLINKED_ROCKS[@]}" )
|
||||||
|
INTER_LIST_1+=( "${BLINKED_ROCKS[@]}" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
read -r -a FINAL_LIST <<< "$( printf "%s " "${INTER_LIST_1[@]}" )"
|
||||||
|
|
||||||
|
# All rocks are calculated $DEPTH ahead
|
||||||
|
(( POSITION+=DEPTH ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Dump KV cache for debugging
|
||||||
|
if [[ $DUMP_KV_CACHE -eq 0 ]]
|
||||||
|
then
|
||||||
|
printf "Number of keys in KV cache: %s\n" "${#KV_CACHE[@]}"
|
||||||
|
printf "Dumping KV CACHE\n"
|
||||||
|
for KEY in "${!KV_CACHE[@]}"
|
||||||
|
do
|
||||||
|
printf "Key: %s, Value: %s\n" "$KEY" "${KV_CACHE[$KEY]}"
|
||||||
|
done | sort
|
||||||
|
fi
|
||||||
|
#printf "%s " "${FINAL_LIST[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
printf "%s\n" "${#FINAL_LIST[@]}"
|
1
2024/day-11/test-input-1
Normal file
1
2024/day-11/test-input-1
Normal file
@ -0,0 +1 @@
|
|||||||
|
0 1 10 99 999
|
1
2024/day-11/test-input-2
Normal file
1
2024/day-11/test-input-2
Normal file
@ -0,0 +1 @@
|
|||||||
|
125 17
|
140
2024/day-12/input
Normal file
140
2024/day-12/input
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
AAAAARRRRRRRRRRROOOOOOOOOOOOWWWWWWWWWWWWWMMMMXXQQQQQQQWWWXXXXXXXXQQQQQQQQQQQQQQQQQQQDDDDDDBBBBBBBBBBBBBBBBBRRRRRRRRRRREEEEEEEEEEEEEJJJJJJJJJ
|
||||||
|
AAAAARRRRRRRROOROOOOOOOOOOWWWWWWWWWWWWWWWWWMMMMQQQQQQQQWXXXXXXXXXQQQQXQQQQQQQQQQQQQQDDDDDDBBBBBBBBBBBBBBBBBRRRRRRRREEEEEEEEEEEEEZEJJJJJJJJJJ
|
||||||
|
OAAAARRRRRRRRROOOOOOOOOOOWWWWWWWWWWWWWWWWWWMMMMQQQQJQQQWXXXXXXXXXXXXXXXQQQQQQQQQQQQQDDDDDBBBBBBBBBBBBBBBBBBRZRRRRRRRREEEEEEEEEEEJJJJJJJJJJJJ
|
||||||
|
AAAAARRRRRRRRYHOOOOOOOOOOWWWWWWWWWWWWWWWWWWMMMMMMQQQQQQXXXXXXXXXXXXXXXXQQQQQQQQQQQQQDDDDDBBBBBBBBBBBBBBBBBBZZRRRRRRREEEEEEEEEEEEJJJJJJJJJJJJ
|
||||||
|
AAAARRRRRRRYYYOOOOOOOOOOOOWWWWWWWWWWWWWWWWLMMMMMQQQQQQQQXXXXXXXXXXXXXXQQQQQQQQQQQQQDDDDDDDDBBBBBBBBBBBBBBBZZZZRRRRREEEEEEEEEEEEEJJJJJJJJJJJJ
|
||||||
|
AAAARRRRRRYYYVOOOOOOOOOOWWWWWWWWWWWWWWWWWWWWGGQQQQQQQQQQQXXXXCCXXXXXIIQQQQQQQQQQQYYEEDDDDDDBBUBBBBNBBBBBBBZZZZRRRREEEEEEEEEEEEEEEEJJJJJJJJJJ
|
||||||
|
AAAARRRRRRYYYOOVOOOOOOOWWWWWWWWWWWWWWWWWWWWWGVQQQQQQQQQQQXXCXCCXIIIIIQQQQQQQQQQQYYEEDDYDDDHBBBBBHHBBBUBBBJZZZRRRRRREEEEEEEEEEEEEEEJJJJJJJJJJ
|
||||||
|
AAARRRRRYYYYYYYVPOOOOOOOOOOWYYWWWWWWWWWWWWWWGVVQQQQQQQQQHHHCCCCCIIIIIQQQQQQQQQQYYYYYYYYDHHHHHHHHHBBBBBBBYJZZZZZRRREEEEEEEEEGGEEEDDDJJJJJJJJJ
|
||||||
|
RAAARRRYYYYYYYPPPOPOOOOOOOOOYYYYWYWPWWWWSVVVVVVVQQQQQQQQHHHHHHNIIIIIIQQQIQQQQQJJJYYYYYYDHHHHHHHHBBBBBBBBBJJJJZRRRRRREEEEEEEGGEEEKKDKJJJJJJJJ
|
||||||
|
RRRRRMRYYYYYYUPPPPPOOOOOOOOXXXYYYYYPPWWWPPVVVVVVVVQQQHHHHHHHNHNIIIIIIIIIIQQJJJJJJYYYYYYYYHHYHHHHHBBBBBBJBJJJJZRRREEEEEEEEEEGGEEEKKKKJJJJJJJJ
|
||||||
|
RRRMMMYYYYYYYPPPPAPOOOOOOHXXXXYXYYYPPWPPPPVVVVVVVQHHHHCHHHHNNNNNNIIIIIIVJJJJJJJJJYYYYYYYYYYYYHHHHHHJJJJJJJJJJRRRRREXEEEEEEGGGGGGKKKKJJJJJJEG
|
||||||
|
RRRMMMMYYYYYYPPPPOOOOOOOOXXXXXXXXXPPPPPPPPPVVVVVVVVVHHHHHHBNNNNNNNIIIIIVJJJJJJJJJYYYYYYYYYYAYAAHHAAAJJJJJJJJJEERRREEEEGGGGGGGGGGRRKKKJJJEJEE
|
||||||
|
RRRMMMMMMYYYMMMPPOOOOOOBBXXXXXXNPPPPPPPPPPPVVVVVVDPPPHHHHHNNNNNNNNIIIIIVJJJJJJJJJYYYYYYYYYYAYAAHHAAJJJJJJJJEJXEERRRREGGGGGGGGGGGRRKKGGEJEEEE
|
||||||
|
RRMMMMMMYYMMMMMPMMOOOOWWXXXXXXXXKKKKKPGPPPPPPPPPPPPPPPPHHHENENNNNNIIIIIJJJJJJJJJJYYYYYYYYYAAAAAAAAAJJJJJJJEEEEEERRRRRRTGGGGGGGGGGRGGGEEEEEEE
|
||||||
|
RRMMMMMMMMMMMMMMMMMWWWWXXXXXXXXXKKKKKGGPPPPPPPPPPPPPPPPPHHEEEEENNNIIIIIJJJJJJJJJJJYYYYYYYYAAAAAAAAAJJJJJJEEEEEEEEERRRRTGZGGGGGGGGGGGGGEEEEEE
|
||||||
|
RRRMMMMMMMMMMMMMMMWWWWWXXXXXXGGGGKGUUUGGGYPPPPPPPPPPPPPPPPEEEEEEEEIIIIIJJJJJJJJJJJYYYYYYYYYAAAAAAAAJJJJJJJJEEEEEEERRRRTGGGGGGGGGGGGGGGEEEEEE
|
||||||
|
RRRMMMMMMMMMMMMMWWWWWWWWGGGGXGGGKKGGGGGYYYYPPPPPPPPPPPPPPPPPCCEEIIIIIJOJJJJJJJJJJJYYYYYYYYYAAAAAAJJJJJJJJJJEEEEEERRRRRTTGGGGGGGGGGGGGGEEEEEE
|
||||||
|
RRRRRMMMMMMMMMMMMMWWWWWWGGGGGGGKKKGGGGGYYYYPPPPPMPPPPPPPCPPCCXXXXXXJJJJJJJJJJJJJJJYYYYYYYYYAAAAAAJJJJJJJJJJJEEEEETTRRTTTTGGGGGGGGGGGGGEEEEEE
|
||||||
|
RRRRRMTMMMMMMLWWWWWWWWWWWWGGGGKKGGGGGGGGYPPPPPPPMPPPPPPPCCCCCCXXXXXXXXJJJJJJJJJJJQYYYYYYYYYAAAAAAAJJJJJJJJJJEEEETTTRTTTTTTTGGGGGGGGGGEEEEEEE
|
||||||
|
RRRYYMTTMMMMLLWWWWWWWWWWWWWAGGGGGGGGGGGGYGPPPPPPMMPPPPPPCCCCCCCXXXXXXXXJJJJJJJJJJJJYYYYYYYAAAAAAJAJJJJJQQQEEEETTTTTTTTTTTIIIGGNGGGGGGEEEEEEE
|
||||||
|
RRRYYMTTMMMMLLLLLWWWWWWWWWWAAAAGGGGGGGGGGGGPPPMMMAAAAPPCCCCCCXXXXXXXXXXXXXJJJJJJJYYYYYLLLLLAAAAAJJJJJJJJQQEEQETTTTTTTTTIIIIIINNGNGGGPEEEEEEE
|
||||||
|
YYYYYYJTMMJMLLLLLLLWWWWWWWAAAAAAAGGGGGGGGGLMMMMMMAMAAPCCCDCCCCCDDDXXXXXXXXXJXXXJJYYYYYLLLLLLLANNNJNNJJJQQQQQQTTTTTTTTIIIIIIIINNNNNGGEEEEEEEE
|
||||||
|
YYYYYYJTJJJLLLLLLLLWWWWWWZAAAAAAAGGGGGGGGLLLLMMMMMMAAPCCCDDCCCDDDDDDXXXXXXXXXXXWHHYHYLLLLLLLLLLLNNNNNJJQQQQQQTTTTTTCIIIIIIIIINNNNNNNEEEEEERE
|
||||||
|
YYYYYYJJJJJLJJLLLLWWWWWWWAAAAAAAAAGGGGGGGLLMMMMMMMMCCCCCDDDDDDDDDDDMDXXXXXXXXXXXHHHHLLLLLLLLLLLLNNNNNNNQQQQQQQTCCCCCIGIIIIIIICCCCNEEEEEERRRR
|
||||||
|
YYKKYYJJJJJJJJLLLLLWWWWJWAAAAAAAAGGGGGGGGLLMMMMMMMMXXXXDDDFDDDDDDDDDDXXXXXXXXXXHHHHHLLLLLSSLLLLLLLNNNNNQQQQQQQQQQCCCCCIIIIIIICCCCNNNEEEERRRR
|
||||||
|
YYKKKYJJJJJLLLLLLLLLWWWLQAAAAAAZZZZZZZZGLLMMMMMMMMMMXXXDDDDDDDDDDDDDXXXXXXXXXXXHHHHHLSSSSSSSSLLLLNNNNNQQQQQQQQQQQCCCCCIIIIIIIICCCNNNNERRCRRR
|
||||||
|
YYKKKJJJJJJLLLLLLLLLWWLLLAEAAAAZZZZZZZZMMMMMMMMMMMMMMMXDDDDDDDDDDDDDXXXXXZXXXXXTHHHLLLSSSSSSSSSSLLLLQQQQQQQQQQQQXXXCCCIIIIIIIICCCNNNNNRRRRRR
|
||||||
|
YYKKKJJJJJJJLLLLLLLLLLLLLEEAAAAZZZZZZZZZTMTMMMMMMMMXXXXXDDDDDDDDDDDZXXXEZZVXXXOTTHHHLLSSSSSSSSSLLLLLLQQQQQQQQQOQXXXXXCCCCCICCCCCCCNRRRRRRRRR
|
||||||
|
KKKKKJJJJJJJLLLLLLLLLLLLEEEEEAAZZZZZZZZZTTTTMMMMMMMMTTXXXDDDDDDDDDDZXXEEZZXXSSTTTTSHLLSSSSSSSSSSLLUULQQEEQEEQQQXXXXXCCCCCCCCCCCCCCNRRRRRRRRR
|
||||||
|
KKKKKKKJKJJJJLLLLLLLNMLLEEEECZZZZZZZZZZZTTTMMMMMTTTMTTXXXDDDDDDDDDZZZZZZZSSSSSSSTSSSSSSSSSSSSSLLLLUUUUUUEEEEEEEXXXXXXCCCCCCCCCCCCRRRRXRRRRRR
|
||||||
|
KKKKKKKKKJKKKKLLLLLLNNNNEEECCZZZZZZZZZZZTTTTTTTTTTTTTTTXXDDDDDDDDZZZZZZZZSSSSSSSSSSSMMSSISSSSLLKKKUUUUUUUUEEEXXXPPPPPCCCCCCCCCCZRRRRRRRRRRRR
|
||||||
|
KKKKKKKKKKKKKKLLLLLLLNNNNNNCCCZZZZZZZZZZZZZZZTTTTTTTTTGXXXDDDVVZZZZZZZZSSSSSSSSSSSSSSMSSZZZZZZZKKUUUUUUUUEEEEXXXPPPPPCCCCZCZZZZZDDDRRRRRRRRR
|
||||||
|
KKKKKKKKKKKKKKLLLLLNNNNNNNNNCCZZZZZZZZZZZZZZZXTTTGTTGGGGGXDDDVVZZZZZZZZSSSSZSSSSSSSSMMSMMZZZZZZKKDUUUUUUUPPPPPPPPPPPPCCCCZZZZZZTZZDRRRRRRRRR
|
||||||
|
KKMMMMMMMMMMKKKLLLNNNNNNNNNNCCZJJJZZZZZZZZZZZXXXXGGGGGGGGDDDDVVVZZZZZZZZZZZZZSSSSSSSMMMMMZZZZZZKUUUUUUUUEPPPPPPPPPPPPCCZZZZZZZZZZZDZRRRRRRRR
|
||||||
|
KKMMMMMMMMMMMMMMLNNNNNNNNNNNNCZJJJJJRRZZZZZZZXXXXFFGGGGGGGVVVVFVVFYZZZZZZZZZZSSSSSSSSSZZZZZZZZKKUUUUUUUUEPPPPPPPPPPPPXCCCZZZZZZZZPZZRRRYYRRR
|
||||||
|
KKMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNJJJJRZZZZZZZXXXXXGGGGGGGGVVVVFFFFZZZZZZZZZZZZSSSSSSSSKZZZZZZZZKKYUUUUPPPPPPPPPPPPPPPUKRKZZZZZZZZZZIZRMRRRRR
|
||||||
|
KKMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNJJJRRZZZZZZZXXXXGGGGGGGGGGVVVFFFFZZZZZZZZZZZSSSSSSSSSSZZZZZZZZYYYYYUUPPPPPPPPPUPPPPPUKKKZZZZZZZZZZZZQQORRRR
|
||||||
|
KMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNJJJRZZZZZZZXXXXGGGGGGGGGVVVVVFFFZZZZZZZZZHHHSSSSSSTSZZZZZZZZZZYYYUUEPPPPPPPPPUPPPPPKKKKKKZZZZZZZZQMQQORRRR
|
||||||
|
UMMMMMMMMMMMMMMMNLNNCNNNNNNNNNNNJJJVVRZZZZZZZZZZZZZGGGGGGVVVVVVFFTTJZZZZZZHHHHSSRRSTTZZZZZZZZZZZYYYYYEPPPPPPPPPUUUKKKKKKKKKZZZZZKKPPPPPPPPRR
|
||||||
|
UMMMMMMMMMMMMMMMLLLLCNNNNNNNNNNNRRRRRRZZZZZZZZZZZZZGGGGGGGGVVVVVVVTZZZZZZZZHHHSHRRRZZJZZZZZZZSZYYYYYYYPPPPPPPPPKUKKKKKKKKKKNNNNOOOPPPPPPPPRR
|
||||||
|
UMMMMMMMMMMMMMMMLLCCCCCCNNNNNNPPPRRRRRZZZZZZZZZZZZZGGGGGGGGGVVFVVVTTZZZZTTTEEHHHHZZZZZZZZZZZZSYYYYYYYYYPPPBBBUUKKKKKKKKKKKNNNNNNOOPPPPPPPPRL
|
||||||
|
UMMMMMMMMMMMMMMMMLCCCCCGCCCNNPPPPPPPPRRRRVRVZZZZZZZGGGGGGGGGGGFFFFFTTZZTTEEEEEEHSSZZZZZZZZZZZZZYYYYYYYBPPPBBBKKKKKKKKKKKKKNOONNOOOPPPPPPPPQQ
|
||||||
|
UMMMMMMMMMMMMMMMMMCCCCCCCCCCNPLLLPPPPPRRVVRVZZZZZZZGGGGGGGGLGFFFFFFTTTZTEYEEEEEHHSZZZZZZZZZZZZZZZYYYYYBPPPBKKKKKKKKKKKKKKOOOOOOOOOPPPPPPPPQQ
|
||||||
|
UUMMMMMMMMMMMMMMMMCCCCCCDDCCULLLPPPPPPRUVVVVZZZZZZZGGGGGGGGGGFFFFFTTTTTTEEEEEEEEEEZZZZZZZZZZZZZSYYYYYYYPPPBBBKKKKKKKKKKKKOOOOOOOOOPPPPPPPPPQ
|
||||||
|
UUUMMMMMMMMMMMMMMMMCCCCCCCCCUULLLPPPVVVVVVVVZZZZZZZGGGEEEEYYGFFFFFTTTTEEEEEEEEEEEEZZZZZZZZZZZZZYYYYYYYBPPPBBBKYKKKKKKKKKKOOOOOOWWWPPPPPPPPPQ
|
||||||
|
UUUUMMMMMMMMMMGGGGMCCCCCCCCUULLLLLLPVVVVVVVVZZZZZZZGGEEEEEEEEFFFFFTTTTTEEEEEEEEEEEEEZZZZZZZZZZZWYYYYYYYPPPBBBBKKKKKKKKKKKFOOOOOWWWPPPPPPPPPQ
|
||||||
|
GGUGMMMMZZMMMMGGGGTCCCCCCCCCUULLLLPPVVVVVVVVVFHHGGGTEEEEEEEEFFFFFFFFFTTTEEEEEEEEEEEEEZZZZZZZZZYYYMYYYYYPPPBBBBBBBKKKKFFFFFOOOOOWWWWWLLPPPPPF
|
||||||
|
GGGGGMMZZZZZZZGGGGTTCCCCCCUUUULLLLPPRVVVVVVVFFHHGGGEEEEEEEEEFFFFFFFFTTTTEEEEEEEEEEEEEZZZZZZZZZCYYYYYYYYYBBBBBBBBBKKKKKFFFKOOOOWWWWWWMMPPPPPF
|
||||||
|
UGGGGDDZZZZZZMGGGGTTEECCCCUUULLLLLLPPZVVVVVVFFFFEGGEEEEEEEEEFFFFFFUYUETTEUEEEEEEEEEEEEZZZZZZZZCCCCYYYYYYBBBBBBBFBBBKFFFFFKKOOKWWPPPPPPPPPPFF
|
||||||
|
GGGGGGGGGGGGGGGGGGTEEEEECCCUULLLLLZZZZZFFVFFFFFFEEEEEEEEEEEEFFFFFUUUUEEEEEEEEEEEEEEEEEEEZZZZCCCYYYYYYYYYBYYBBBFFFBBKFFFKKKPPPPPPPPPPPPPPPPFF
|
||||||
|
GGGGGGGGGGGGGGGGGGTPEPECCCUUUUUULZZZZZZFFFFFFFFFEFEEEEEEEEEEEFFFFFUUUEZEEEEEEEEEEEEEEEEEEZZCCCYYYYYYYYYYYYYYQFFFFKKKFFFFFKPPPPPPPPPPPPPPPPFF
|
||||||
|
GGGGGGGGGGGGGGGTTTTPPPPPUUUUUULLLLZZZZZFFFFFFFFFFFEEEEEEEEEEEFFFFFFUUUZEEELEEEEEEEEEEEEEEECCCCYYYYYYYYYYYYYYQQFFFFFKFFFKKKPPPPPPPPPPPPPPPSSF
|
||||||
|
ZGGGGGGGGGGGGGGTTTKPPPPPQUUULLLLLLLLLLLILFFFFFFFFFFFFEEEEEEEEFFFFFFFUUUUUUUTEEEEEEEEEEEEEEECVCCYYYYYYYYYYYYYQFFFFFFFFFFFFKPPPPPPPPWWWWWWWWSS
|
||||||
|
GGGGGGGGGGGGGGGTTKTPPPPQQQUQBBLLLLLLLLLLLFFFFFFFFFFFFEEEEEEEBHFFFFYYUUUUUUUTEEBBBBBBBBBEEEECVCCYYYYYYYYYYYYQQQFFFFFFFFFFFKPPPPPPPPWWWWWWWWSS
|
||||||
|
GGGGGGGGGGGGGGGTTTTQQQPQQQQQQQJJLLLLLLLLFFFFFFFFFFFFEEEEEEEEHHHFXFUUUUUUUUUTEEBBBBBBBBBEECCCVCCYYYYYYYYYYYYYQQQQFFFFFFFFFFPPPPPPPPWWWWWWWWSS
|
||||||
|
GGGGGGGGGGGGGGGTTTTQQQQQQQQFFLLLLLLLLLLLLFFFFFFFIFYYPPEEEHHHHHHHUUUUUUUUUUUEEEBBBBBBBBBEEEVVVCCYYYYYYYYYYYYYQQQFFFFFFFFFFFPPPPPPPPWWWWWWSSSS
|
||||||
|
GGGGGGGGGGGGGGGTTTTQQQQQQQQQFLGLLLLLLLLLLFFFFFFFCFYCPPEHHHHHHHHDUUUUUUUUUUUUUEBBBBBBBBBEEEVVVCYYYYYYYYYYYYYYYFFFFFFFFFFFFFPPPPPPPPWWWWWWSSSS
|
||||||
|
GGGGGGGGGGGGGGGTTTTQQQQQQQQFFLLLLLLLLLLHFFFFFCCCCCCCPPPPPPHHPZZDDUUUUBBBBBBBBBBBBBBBBBBEEETEVVVVVVVYVYYYYYKKKKKFFFFFFFFFFFPPPPPPPPWWWWWWSSSB
|
||||||
|
GGGGGGGGGTTTTTPTTTTTTQQQQQQQQELLLLLLLLLHHCFFFCCCCCCCPPPPPHHHPPZDDDDUUBBBBBBBBBBBBBBBBBBEEEEEEVVVVVVVVVYYKKKKYKKKFFFFFFFFFFFFMMWWWWWWWWWWDSSB
|
||||||
|
AAAAGGGGGSXTTTPTHHHHHQQQQQQQEEEELLLLLLLHCCCCCCCCCCCCPPPPPPPHPTDDDDDUABBBBBBBBBBBBBBBBBBEEEEEEVVVVVVVVVYYYKKKYYKKKFFFFFFFFFMMMMWWWWWWWWWWDDSB
|
||||||
|
AAAAGGGGGSXTDDSAHUHHHQQQQQEEEEEEELLLZZLHCCCCCCCCCHHPPPPPPPPPPDDDDDDDDBBBBBBBBBBBBBBBBBBBBBBVVVVVVVVVVVVYYKKKYOYKKFFFFFFMMMMMMMWWWWWWWWWWDDSB
|
||||||
|
AAAAAASSSSSSSSSHHHHHHHHQQQEEEEEEELLLZZZCCCCCCCCCCHHPPPPPPPPPDDDDDDDDDBBBBBBBBBBBBBBBBBBBBBBVVVVVVVVVVVVYYKKYYYYKFFFJQFFQNNNNMMWWWWMWWWWWMDSB
|
||||||
|
AAAAAASSSSSSSSSHHHHHHHQQQQEEEEEENNZZZZZCCCCCCCCCHHHHHPPPPPPPDDDDDDDDDBBBBBBBBBBBBBBBBBBBBBBNVVVVVVVVVVVYYYYYYYKKKKJJQQQQNNNNMMWWWWMMMMMMMMBB
|
||||||
|
AAAAAASSSSSSSSSSHHKKHKKQQEEEEEENNNNZZZZCCCCCCCCHHHHHPPPPPPPPDDDDDDDDDBBBBBBBBBBBBBBBBBBBBBBBVVVVVVVVVVVYYYYYYYYYYKJJJJJNNNNNNRWWWWMMMMMMMBBB
|
||||||
|
AAAAAASSSSSSSSSSHHKKKKKQQQEEERRNNNNZZZZZCCCCCCCCHPPPPPPPPPDDDDDDDDDDDBBBBBBBBBBBBBBBBBBBBBBBBVVVVVVVVVVYHYYYYYYYFJJJJJJNNNNRRRWWWWMMMMMMMBBB
|
||||||
|
AAAAASSSSSSSSSSSXHKKRRQQQQEEEERRNZZZZZLZZZKKKCCPPPPPPPPPPPPPOODDDDDDDDDDDGGGTTBBBBBBBBZZZBBBBBVVVVVVAAAAAAYYYYVYJJJJJJJNNJNRCCWWWWMMMMMMMBBB
|
||||||
|
AAAAASSSSSSSSSSSRRRRRRRBQEERRRRZZZZZLLLZZLKKKKPPPPPPPPPPAAAYAODDDDDDDDDDDGGGTTBBBBBBBBBBBBBBBBVVVVVVAAAAAAYYYYYJJJJJJJJJJJJCCTWWWWMMMMMMMBBB
|
||||||
|
ALAVVSSSSSSJSSSSRRRRRRRRARRRRRRRZZZZZZLLLLKKKKPPPPPPPPAAARAAADDDDDDDDDDDDDGGTTBBBJJBBBBBBBBBVVVVVVVAAAAAAAAYYYYJJJJJJJJJJCCCCCWWWWMMMMMMMMBB
|
||||||
|
VVAVVVVSSSVSSSSSZRRRRRRRRRRRRRZZZZZZZLLKLLKKKKKKPPKPPPAAAAAAAADDDDDDDDDDGGGGTTBBBAABBBBBBBBBVVVAAAAAAAAAAAAYJJJJJJJJJJJJJCCCCCWWWWMMMMMCMCCC
|
||||||
|
VVVVVVVVVVVVSVOSRRRRRRRRRRRRRZZZZZZZZEGKKKKKKKKKKKKPAAAAAAAAAADDDDDDDDDDGGGTTTGAAAABBBBBBBBBVXVZAAAAAAAAJJJJJJJJJJJJJJGJJVCCCCWWWWMMMMCCCCCC
|
||||||
|
ZZVVVVVVVVVVVVOOORRRRRRRRRREEEEEEEZZEEKKKKKKKKKKKPPPEAAAAAAAAACCDDDDDDDDGGTTTTAAAAAABBBBBBBIIAAAAAAAAAJJJJJJJJJJJJJJJJGGGGCCCCCCCCCMMCCCCCCC
|
||||||
|
ZZZVVVVVVVVVVVZZZRRRRRRRREREEWEEEEEEEEEKKKKKKKKKKPPPEAAAAAAAACCCAADDDDDGGGTTTTAAAAAABBBBBBBIIIITAAHHHAAJJJJJJJJJJJJJGJGGGGGCCCCCCCCCCCCCCCCC
|
||||||
|
ZZZVVVAAVVVVVZZZZRRRRRRRREEEEWEEEEEEEEEKKKKKKKKKFPPPEEEEEEAACCCCUUZZZDDQQQTTTAAQQQQQABDBBBBIITTTAHHHAAAJJJJJJJJJJLGGGGGGGGGGGGCCCCCCCCCCCCCC
|
||||||
|
ZZZZVVAAAVZVZZZZZZERRTRREEEEEEEEEEEEEEEKKKKKPPPFFPPPEBEEEECCCCCUUUZZZZQQQTTTTQQQQQQQABBBHBJTTTBTTHHHHHHHJJJJJJJJLLGFGGGGGGGGGGCCCCCCCCCCCCCC
|
||||||
|
ZZZZVZGGZZZZZZZZZZZZTTRRREEEEEEEEEEEEEEKKKKPPPPPFPPPPBKEEECCCUCCUUZZZZQQQQQQQQQQQQQQAUUUWWWTTTTTGHAHXXHJVCJVVJJLLLLGGGGGGGGGGGGGGGCCCCCCCCCC
|
||||||
|
ZZZZZZZGZZZZZZZZZZZQQTTTREEEEEEEEEEEEEEEKKPPPPPPPPPPPBKCECCCCUCCUUZZZZQQQQQQQQQQQQQQQQUUUJWWWTTTHHHHHHHHVCVVVVVLLVLVGGGGGGGGGGGGPGCCCCCCCCCC
|
||||||
|
ZZZZZZZGZZZZZZZZZZZZQTTTQEEEEEEEEEEEEEEEPPPPPPPPPPPPPBKCCCCCUUUUUUZZZZQQQQQQQQQQQQQQQQUUWWWWWTTTHHHHHHHHVVVVVVVVVVVVGGGGGGGGGGRRRCCCRCCRCCYC
|
||||||
|
ZZZZZZZZZZZZZZZZZZZQQTQQQQEEQEEEEEEEEEEEEPMPPPPPPOOPPKKCCUUUUUUUUUQQQQQQQQQQQQQQQQQQQQUUUWWWMMTTTMMHHHHHVVVVVVVVVVGGGGGGGGGGGRRRRRCCRCRRCCYF
|
||||||
|
ZZZZZZZZZZZZZZZZZZQQQQQQQQQQQEEEEEEEEEEEEPPPPPPPPOOKKKKCCURBRRUUUQQQQQQQQQQQQQQQQQQQQQUUWWWMMMMMMMMHHHHVVVVVVVVVVVGGGGGGGGGGGGGGRRRRRRRRYCYY
|
||||||
|
ZZZZZZZZZZZZZZZZQQQQQQQQQQQQEEEEEBDEEEEEEDPPPDDPKKKKKKKKCRRRRIRUUCQQQQQQQQQQQQQQQQQUUUUUWWMMMMMMMMMMHHHXXVVVVVVVVVGGGGGGGGGGGGGGRRRRRRRYYYYY
|
||||||
|
ZZZZZZZZZZZZZVVZQMMMQQMYQQQQEEEEEEDDEEEEEDPDDDDDKKKKKKCCCRRRRRRURCQQQQQQQQQQQQQQQQQUUUUUWWMMMMMMBBBBBHBXXVVXVUUKKKKGGGGGGGGGGGGGGRRRRRRRYYYY
|
||||||
|
ZZZZZZZZZZZZMMVMMMMMMMMYYQYYHHEEDDEEEEEEEDDDDDDDKKKKKKKKCCRRRRRRRCCQQBOOQQQQQQQQQQQUUUUUUUUUMMBBBBBBBBBXXXXXXUUUUKGGGGFFGGGGGGGRRRRRRYYYYYYY
|
||||||
|
ZZZZZZZZZZZWMMVMMMMMMMYYYYYYYHHHHHEEEEEDDDDDDDIDKKKKKKKKKCRRRRRRCCCQBBBBBBBBQQQQQQQQUUUBUUUMMBBBBBBBBBBXXXXXUUUUUULUFGFFGGGGGGGRFRYYYYYYYYYY
|
||||||
|
ZZZZZZZZZZZWMMMMMMMMMYYYYYYYYHHHHDEEEEEDDDDDDDKKKKKKKKKKKCCCCRCRCCCIVBBBBBBBQQQQQQUUUUUBBBMMMMBBBBBBBBBXXXXUUUUUUUUUUFFFFGGGFGFFFFFYYYYYYYYY
|
||||||
|
ZZZZZZZZMMMMMMMMMMMMMYYYYYYYHHHHHDDDDDDDDDDDDDKKKKKKKKKCCCCCCRRRCCCIBBBBBBQQQQQQQQUUVNNNBBBMMMBBBBBBBBBXXXXUUUUUUUUUUFFFFFFFFFFFFFFYYYYYYYYY
|
||||||
|
ZZZZZZZZZMMMMMMMMMMMYYYYYYYYHHHHYYKDDDKKDDDDDDKKKKKKGGKCCCCCCCCCCCCIIBBBBBBQQQQQOGUUVNNNBBBBNNBBBBBBBBBBXXXUUUUUUUUUUFFFFFHHHHFFFFYYYYYYYYYY
|
||||||
|
ZZZZZZZZZMMMMMMMMMYYYYYYYYYYYYYYYYKDKDKDDDDDKDKKKKKKGGGGCCCCCCCCCCIIBBBBBBBBQQQOOOOONNNNBNNBNNNNBBBBBBBXXXUUUUUUUUUUUFFFFHHHHFFHHFHYYYYYYYYY
|
||||||
|
ZZZZZZZZZMMMMMMMMYYYYYYYYYYYYKKKKKKKKKKDDDDKKKKKKGGKGGGGGCCCCCCIIIIIBBBBBBBBQQQQOOOENNNNNNNNNNNNBBBBTTBXXXUUUUUUUUUUUFFFFFFHHHFHHHHBYYYYYYYY
|
||||||
|
ZZZZZZZZZMMMMMMMMYCYYYYYYYYYYYYKKKKKKKKKKKKKKGKKGJGGGGGGGGGGCCCOIIIBBBBBBBBBBKQOOOOOONNNNNNNNNNZBBBBBTTTTTUUUUUUUUUUFFFFFFHHHHHHHHHYYYYYYYYY
|
||||||
|
ZZZZZZZZMMMMMMMMYYYYYYYYYYYBYBBWWWKKKKKKKKKKKGGGGGJGGGGGGGGGGCOOOBBBBBBBBBBBKKKOOOOOONNNNNNNNNNNBBTTTTTTTTAUUUUUUUUUFFFFFFHHHHHHHHHHHYYYYYYY
|
||||||
|
ZZZZZZZZOOOMZMMZZZYYYYYYYYBBBBBWWWWKKQKQKKKKGGGGGGGGGGGGGGGGGCOOBBBBBBBBBBBKKKOOOOOOONNNNNNNNNNNBBTTTTTTTAAUUUUUUUUFFFFFFFFFHHHHHHHHHYYYYYYY
|
||||||
|
ZZMZMZZOOOOOZMMZZZYYYYYYYYYBBBBWBWWKQQQQQKKKGGGGGGGGGGGGGGFGFFFOOOOBOOBBBBBBKOOOOOOOONNNNNNNNNNNNBBBTTTTTTTUUUUUUUFFFFFFFFFFFFHHHHHHHYYYYYYY
|
||||||
|
ZLMMMOOOOOOOZZZZZYYYYZYYYYYBBBBBBBWKKKQQQQKKKKGGGGGGGGGGGGFFFFFFOOOOOOOBKKKKKOOOOOOYYNNNNNNNNNNNNNNNTTTTTVTTOFFFFUFFFFFFFFFFFHHHHHZZZZYYYYYY
|
||||||
|
MMMMMOMMOOOOBZZZZZYYZZYZBBBBBBBJBHWHQQQQTTTKKKKGGGGGGGGGGFFFFFFFOOOOOOOBKKKKKOOOOGOXYYNNNNNNNNNNOEOOTTTTTTOOOOFFFFFFFFFFFVVFFFHZZZZZZZYZYYYY
|
||||||
|
MMMMMMMMOOOOBZZZZZZYZZZZZZZBBBJJJHWHQQQQTTTTTGGGGGFFFGGGFFFFFOOOOOOOOOOOHHHHHGGGOGGXYYYNNNNNNPPPOOOOOOTOOOOOOOFFWWWWFFFFFFVVVZZZZZZZZZYZYYYY
|
||||||
|
MMMMMMMMOOOOBZZZZZZZZZZZZZZBJJJJJHHHHQQTTTTTTTDGGFFFFFFFFFFFFOOOOOOOOOOHHHHHGGXGGGGXXYYNNNNNPPPPPPOOOOOOOOOOOFFWWWWFFFFFVVVVVZZZZZZZZZZZZYYY
|
||||||
|
MMMMMMMOOOOBBZZZZZZZZZZZZZZZJJJJJHHHHHTTTTTTTTDDDDFFFFFFFFFPPFOOOOOOOOOHHHKKXXXXXXXXXXNNNNNNPPPPPPOOOOOOOOOIOOOOWWWWWWFFFVVVVZZZZZZZZZZZZYYZ
|
||||||
|
MMMMMMOOOBBBBZZZZZZZZZZZZZJJJJJJJHHHHTTTDTTTTDDDDDFFFFFFHFFFFFOOOOOYOOHHHHHXXXXXXXXXCXXNGGNPPPPPPPOOOOOOOOIIIWWWWWWWWWWWFVVVVZZZZZZZZZZZZZZZ
|
||||||
|
MMMMMMOOBBBBBBZZZZZZZZZZZZZZJJJJJJJJHHHTDTTTTDDDDDFFFFFFFFFFFOOOOOOYYHHHHHXXXXXXXXXXXTUUUUNPPPNPPOOOOOOOOOOIWWWWWWWWWWWWWWWZZZZZZZZZZZZZZZZZ
|
||||||
|
MMMMMMMOOBBBBBBBZZZDDDZZZJJJJJJJJJJJHHHDDTTTTDDDDDFFFFFFFFFFFOOOOOYYYHHHHHHHXXXXXXXXXTUUUNNNNNNNOOOOOOOOFFRRWWWWWWWWWWWWWRRRZZZTZZZZZZZZPZZZ
|
||||||
|
MMMMMMMBBBBBBBBBZZZZDDDDJJJJJJJJHHJHHHHDDDDDDDDDDDFKFFFFFFLFFFOOOOYYYYHHHHHHXXXXXXXXXXUUUNNNNNNNNOOFFFFFFRRRRRWWWWWWWWWWWWWRRZZTZZZZZZZZPZPP
|
||||||
|
MMMMMMMMMBBBBBZZZZZDDDDDDDEJJJJJHHHHHHHDHDDDDDDDDFFKFFFFFFFFFOOOOOOYYYYHHHHHCXXXXXXXXUUNNNNNNNNNNNNFFFFFFRRRRRWWWWWWWWWWRWWRZZTTZZIPPZZPPPPP
|
||||||
|
MMMMMMMMBBBBBBZZZZDDDDDDDDDJJJJJHHHHHHHHHDDDDDDDDFFFFFFFFFFFOOOOOODDYYYYHHHHCCXXXXXXXUUUUNNNNNNNNNNFFFFFFSRRRRRWWWWWWWWRRRRRZZZZZPIPPPPPPPPP
|
||||||
|
NMMMNMNMBBBBBBBZZZZZDDDDDDDHJHHHHHHHHHHHRHDDDDDLFFFFFFFFFFFFOOOOODDDYYYYHYYYYXXXXXXXXXUUUNNNNNNNNNNNFFFFSSSSRRWWWWWWWWWRRRRRZZZZPPIPPPPPPPPP
|
||||||
|
NNNMNMNNBBBBBBBBZZZZPDDDDDDHHHHHHHHHHHHHHHLLLLLLLZFFFFFFFFFFOOOOODYYYYYYYYYYYYXXXXXXXXUUUUNNNNNNNNNFFFFFSSSSSSKKWWWWWWWRRRRRZZZZPPPPPPPPPPPP
|
||||||
|
NNNNNNNNNBBBBBBBZZZZZDDDDDDHHHHOHHHHHHHHHHHLLLLLLZZFFFFFFFFFFOOYYYYYYYYYYYYYYYYXXXXXXUUUUUNNTNNNNNFFFFFFFSSSSSSWWBWWWWWWZRZZZZZZZZPPPPPPPPPP
|
||||||
|
NNNNNNNNNBBBBBBBBZZZZZDDDDDHHHOOOOHHHHHHHHHHHLLLFFFFFFFFFFFFFOOYYYYYYYYYYYYYYYYXXUJXXUUUUUUNNNNWWFFFFFFSSSSSSSSSSWWWWWWWZZZZZZZZZZPPPPPPPPPP
|
||||||
|
NNNNNNNNBBBBBBBUUUZZZZDDDDHHHOOOOOHHHHHHHHHHHHHHHHFFFLFFOOOOOOOOOYYYYYYYBOYYYYYYYUUXUUUUUUUNNWWWFFFFFFFFFSSSSSSSSSSWWWZWZZZZZZZZZZZPPPPPPPPP
|
||||||
|
NNNNNNNNNBBBBBBBKUKRKKKDDHHHHHOOOOHHHHHHHHHHHHHHHHHFFFFFOOOOOOOOOOOZYYRYOOOYYYYYYUUUUUUUUUUUUUWWWFFFFFFFSSSSSSSSSSWWWZZZZZZZZZZZZZZZPPPPPPPP
|
||||||
|
NNNNNNNNYBBJBBXXKKKRKKPPPHHHHHHOOOOOHHHHHHHHHHHHHHIFFFFFOOOOOOOOZZOZYYLLOOOOOOYOUUUUUUUUUUUUUUWFFFFFFGGQQSSSSSSSSSSSWZZZZZZZZZZZZZZPPPPPPPPP
|
||||||
|
NNNNNNXBBBBBXXXKKKKRKKPPHHHHHHHOOOOOHHHHHHHHHHHFFFFFFFFFKOOOOOZOZZZZZZLLLLOOOOOOCUUUUUUUUUUUUUWWWVFFFFGGGSSSSSSSSSSSSSSZZZZZZZZNNNBPPPPNPPPP
|
||||||
|
NNNNNNBBBBBXXKXKKKKKKKKHHSHHHHOOOOOOHHHHHHHHHHHHHHFFFFZKKOKKZZZZZZZZZLLLLOOOOOOOCUUKUUUKUUUXVUWVVVVGGGGGGGGSSSSSSSSSSSSZZZZZZZZZNBBBPNNNNPPP
|
||||||
|
NNNNNTTTBBBXXKKKKKKKKKSHHSHHHHHOOOOOOOHHHHHHHHHHHHFFFFZKKKKKZZZZZZZZZZLLLLLOOOOOOOKKUKKKUUVVVVVYVVVYGGGGGGGGSSSSSSSSSSSSZZZZZZZZNNNBPNNNSPPP
|
||||||
|
NNNNNTTTTMBXKKKKKKKKKKSHSSSHHHHOOOOOOOHHHHHHHHHHHHHFZZZKKKKEEEZZZZZLLLLLLLLOOOOOKKKKUKKZUVVVVVVVVVVYGGGGGGSSSSSSSSSSSGGGGGGZZZZZNNNNGNNNNPNN
|
||||||
|
NTTNTTTTTTBXKKKKKKKKKKKKSSSHHHXOOOOOOPFFHHFHHFHHHHHZZXZZKKKEEEEEZPUULLLLLLLOOOOOZKKKKKZZCVVVVVVVVVVGGGGGGSSSSSSSSSSSSGGGGGGZGZZZNNNNNNNNNNNN
|
||||||
|
TTTNTTTTTTTTKNKKKKKKKKKKKKKVPHPFFOOOPPFFHHFFHFHHHHZZZXXXEEEEEEEEPPPUULLLLLOOOOOOZZKKZZZZZQVVVVVVVVVMGGGGGGMMMMSSSSSSSGGGGGGGGGZNNNNNNNNNNNNN
|
||||||
|
TTTTTTTTTTTITTTKKKKKKKKKKKKVPPPPPPPPPPFFFFFFHFFFFFXXXXEEEEEEEEPPPPPLLLLLLLLOPOCCZZKZPZZZZVVVVVVVVVVMMGGGGGMMMMSSSSGSSGGGGGGGGGZNNNNNNNNNNNNN
|
||||||
|
TTTTTTTTTTTTTEEEKKKKKKKKKKKPPPPPPPPPPPPFFFFFFFFFFFXXXXXXEEEEEPPJPPPLPPLLPPPPPPCZZZZZZZZZZVVVVVVVVVVMMMGGMMMMMSSGSSGGGGGGGGGGNZZZUNNNNNNNNNNN
|
||||||
|
TTTTTTTTTTTTTFEEEKKKKKKKKKKPPPPPPPPPPPPFFFFFFFFFFXXXXXXXXEEEXPPPPPPLPPPLPPPVPCCPZZZZZZZZZZVVVVVVVVVVMMGGMMMMMGGGGGGGGGGGGGGGNNNUUNNNNSNNNNNN
|
||||||
|
TTTTTTTTTTTTFFFEEFKKKKKHKKKPPPPPPPPPPPPFPPFFFFFFFXXXXXXXXEXXXOOPPPPPPPPPPPPPPPPPZZZZZZZZZZZVVVVVVMMVMMMMMMMGGGGGGGGGGGGGGGGGNNNNNNNSSSSNNNNN
|
||||||
|
TTTTTTTTTTTTTFFFFFZKKKWLLLKGPPPPPPPPPPPPPFFFFFFXXXXXXXXXXXKXXXPPPPPPPPPPPPPPPPPPZZZZZZZZZZZZVVVMMMMMMMMMMMMGGGGGGGGGGGGGGGGGGNNNNNNNSMSSNNNV
|
||||||
|
TTTTTTTTTTTFFFFFFFFFFFLLLLPPPPPPPPPPPPPFFFFFFFFFXXXXXXXXXXXXXXXPPPPPPPPPPPPPPPPPZZZZZZVZZZZZZZVMMMMMMMMFMMGGGGGGGGGGGGGGGGGGGNNNNNNNNMNSNVVV
|
||||||
|
TTTTTTTTKKKKFFFFFFFFFFLLLLLLZPPPPPPPPPPFFFFFFFFFXXXXXXXFXXSSSXPPPPPPPPPPPPPPPPPPZZZZZVVVZVZZZMMMMMMMMMFFFFFGGGGGGGGGGVGVVVVVGNNNNNNNMMNNNNNV
|
||||||
|
TTTTTTTKKKKKKFFFFFFFFFLLLLLLZZYYPPPPPPPPFFFFFRRFXXXXXXFFXXSSSSPPPPPPPPHPPPPPPPZZZZZZZQVVVVVVZMMMMMMMMMFFFFFGGGGGGGGVVVVVVVVNNYNNNNNYSSSSSSNS
|
||||||
|
TTTBBBBBKKKKFFFFFFFFFFFLLLLLLLYYYPQQPYPPFFFFRRRRRXXXXXFFFTTSSSPPPPPHHHHHPHPPJJJBLBBBVVVVVVVVMMMMMMMMMMFFFFFFGGGGGGNNVVVVVVVNYYYYYYYYSSSSSSSS
|
||||||
|
TTBBBBBBBBKFFFFFFFFFFFLLLLLLLYYYYYQYYYYFFFFFFRRRRXXXXXXXFTTTTDDDDHHHHHHHHHHHHJJBBBBBVVVVVVVVVMMMMMMMKFFFFFFFFGGGGGNNVZZVVVNNYYYYYYYSSSSSSSSS
|
||||||
|
BBBBBBBBBYKFFFFFFFFFFFLLLLLLYYYYYYYYYYFFFFRRRRRRRRRXXXXFFFTTDDDDDHHHHHHHHHHHHHBBDKBBVVVVVVVVMMMMMMKKKFFFFFFFFFFGFGNNNVVVVVNNYYYYYYSSSSSSSSSS
|
||||||
|
BSBSSSSUYYKFFFFFFFFFFLLVVVVYYYYYYYYYYYFFFFFRRRRRRRRRRGXTTTTTTDDDDIHHHHHHHHHHDDDDDKKKVVVVVVVVMMMMMKKKKKKTFFFFFFFFFNNNNVVVVVNTTRYPYYSSSSSSSSSS
|
||||||
|
SSSSSSSSYYYYYYFFFFFFFVLVVVVVVYYYYYYYYYYFFFFRRRRRRRRRRRTTTTTTTTDDDDDHHHHHHHHHHDDDKKKKVVVVVVVVVVMMMMKKKTTTFFFFFFFFFFNNNNNVVVNNTRYYYSSSSSSSSSSS
|
||||||
|
SSSSSSSUUYYYYYFFFFFHVVVVVVVVVVYYYYYYFFFFFFRRRRRRRRRRRRRTTTTTTTDDDDDDHHHHHHHHQHKKKKKKVVVVVVVSSMMMMMMEEETMFMVVYXFAAFNNNNNNVNNNTTTTYSSSSSSSSSSS
|
||||||
|
SSYSSSUUUYYYYYWFFFFVVVVVVVVVVYYYYYYYFFFRRRRRRRRRRRRRRRRTTTTTTTDDDDDDDDDDHHHHHHKKKKKKKVVVVVSSSMMMMMMEEEMMMMYYYYFAAAYNNNNNNNTNTTTTSSSSSSSSSSSS
|
||||||
|
SSSSSSSSUYYYYNSFFFFVVVVVVVYYYYYYYYYYKFFRRRRRRRRRRRRRRRTTTTTTTDDDDDDDDDDDHHHHHIKKKKKKIIIVVVSESMMMMMMEMMMMMMMYYYYYAAYNNNNNTTTTTTTTTSSSSSSSSSSS
|
||||||
|
SSSSSSCCYYYNNNSSSSSGGVVVVEEYYYYYYYYYKFFRRRRRRRRRRRRRRRTTTTTDDDDDDDDDDDDTHHHHHIKIKKIIIIIIIIEEMMMMMMEEEMMMMMMYYYYYYYYNYNNNTTTTTTTTYYSSSSSSSSSS
|
||||||
|
SSSSSSCCCCIIIIGGSSSGVVVVVVVYYYYYYYYYKFFIIRRRRRRRRRRRRRRRTTTTTDDDDDDDTTDTHHHAHIIIIIIIIIIIIIIEEMEEEEEEEMMMMLYYYYYYYYYYYYNNNTTTTTYTYXYMSSSSSSSS
|
||||||
|
SSSSTTCTCIIIIIIISSGGGVVVOOOOOYYYYYYYYIIIIIRRRRPRRRRRTRRRTTTTTDDDDDDDTTDTTHBAAIIIIIIIIIIIIIIEEEEEEEEEEEMMMMYYYYYYYYYYZZNNNTTTTTYYYXYMSSSSSSSS
|
||||||
|
TTTTTTTTTIIIIIIIIGGGGGVVVVYYYYYYYYYYYIIIIIRRRRRRRRRRRRRTTTTTTTDDDTDDDTTTTAAAAAIIIIIIIIIEEIEEEEEEEEEEEEMMMMMMMYYYYYYYZZZZZZZTTTYYYYYYYSSSQSSS
|
||||||
|
TTTTTTTTIIIIIIIIIGGGGGVVVVGGYYYYYYYYYIIIIHTRRRHRRRRRRRHTTTTTTTTTDTTTTTTTTTAAAAIIIIIIIIIEEEEEEEEEEEEEEEMMMMMYYYYYYYYYYZZZZZZTTTTYYYYYSSSSQSSS
|
||||||
|
TTTTTTTTIIIIIIIIIIIGGGGGGGGGGYYYYYYYIIIIIHRRRHHHRRRRRRHTTTTTTTTTTTTTTTTTTTAAIAIIIIIIIIIIEEEEEEEEEEEEEEMMMMMMYYYYYYYYYYTZZZTTTTTTTYYYYYSSSRSR
|
||||||
|
TTTTTTTTIIIIIIIGGGGGGGGGGGGGYYYYYYYYYIIIIHHHHHHHHHHHHHHHHHTTTTTTTTTTTTTTTAAAIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEMYYYYYYYYYYYTXZZTTTTTTTTYBYRSRRRSR
|
||||||
|
TTTTTTTXIIRIRIIIGGGGGGGGGGGGYYYYYYEYIIIIIHHHHHHHHHHHHHHHHHHTTTTTTTTTTTTTAAAIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEEMYYYYYYYYYTTTTTTTTTTTTTTBBYRRRRRRR
|
128
2024/day-12/solution-1.sh
Normal file
128
2024/day-12/solution-1.sh
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FUNCNEST=99999
|
||||||
|
FILE=input
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$FILE" paste -s -d "" | sed -E 's/(.)/\1\ /g' )"
|
||||||
|
MAP_LEN=${#MAP_ARRAY[@]}
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||||
|
MAP_WIDTH_INV=$(( 0 - MAP_WIDTH ))
|
||||||
|
MAP_HEIGHT=$( < "$FILE" wc -l )
|
||||||
|
printf "Len: %s Width: %s Height: %s\n" "$MAP_LEN" "$MAP_WIDTH" "$MAP_HEIGHT"
|
||||||
|
|
||||||
|
# Check if tiles are adjacent and do not violate bounds
|
||||||
|
check_adjacent () {
|
||||||
|
|
||||||
|
# Check for out of map bounds
|
||||||
|
if [[ $2 -lt 0 ]] || [[ $2 -gt $MAP_LEN ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DIFF=$(( $2 - $1 ))
|
||||||
|
# Valid adjacent distances
|
||||||
|
if [[ $DIFF -eq 1 ]] || [[ $DIFF -eq -1 ]] || [[ $DIFF -eq $MAP_WIDTH ]] || [[ $DIFF -eq $MAP_WIDTH_INV ]]
|
||||||
|
then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for left/right bounds
|
||||||
|
if [[ $DIFF -eq 1 ]] && [[ $(( $2 % MAP_WIDTH )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ $DIFF -eq -1 ]] && [[ $(( $1 % MAP_WIDTH )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Basically recurse over mapping and "consume" all adjacent tiles
|
||||||
|
check_and_unset () {
|
||||||
|
|
||||||
|
IDX=$1
|
||||||
|
local KV_I=${IDX%% *} # Remove trailing whitespace
|
||||||
|
(( AREA++ ))
|
||||||
|
VALUE=${KV_CACHE[$KV_I]}
|
||||||
|
unset "KV_CACHE[$KV_I]" # "Take" it
|
||||||
|
printf "max: %s peri: %s area: %s key: %s val: %s\n" "$MAX_PERI" "$PERI_NUM" "$AREA" "$1" "$VALUE" >&2
|
||||||
|
|
||||||
|
(( PERI_NUM+=MAX_PERI ))
|
||||||
|
unset IFS; read -r -a VAL_ARRAY <<< "$VALUE"
|
||||||
|
for VAL in "${VAL_ARRAY[@]}"
|
||||||
|
do
|
||||||
|
(( PERI_NUM-- ))
|
||||||
|
VAL_IDX=${VAL%% *}
|
||||||
|
if [[ -v KV_CACHE[$VAL_IDX] ]] # Check if tile has been "taken"
|
||||||
|
then
|
||||||
|
check_and_unset "$VAL_IDX"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
while read -r CHAR
|
||||||
|
do
|
||||||
|
# Get all indexes for a plant
|
||||||
|
read -r -a CHAR_ARRAY <<< "$(
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} == "$CHAR" ]]
|
||||||
|
then
|
||||||
|
printf "%s " "$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
|
||||||
|
{
|
||||||
|
printf "For char %s \n" "$CHAR"
|
||||||
|
printf "%s " "${CHAR_ARRAY[@]}"
|
||||||
|
printf "\n"
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
declare -A KV_CACHE
|
||||||
|
|
||||||
|
IFS=':'; while read -r VAR1 VAR2
|
||||||
|
do
|
||||||
|
printf "VAR1: %s VAR2: %s\n" "$VAR1" "$VAR2" >&2
|
||||||
|
KV_CACHE[$VAR1]=$VAR2
|
||||||
|
done <<< "$(
|
||||||
|
|
||||||
|
# Find all adjacent tiles
|
||||||
|
for (( i=0; i<${#CHAR_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
NUM_ADJ=0
|
||||||
|
printf "%s:" "${CHAR_ARRAY[i]}"
|
||||||
|
MIN=$(( $(( i-MAP_WIDTH )) < 0 ? 0 : $(( i-MAP_WIDTH )) ))
|
||||||
|
MAX=$(( $(( i+MAP_WIDTH )) < MAP_LEN ? $(( i+MAP_WIDTH )) : $(( MAP_LEN )) ))
|
||||||
|
for (( j=MIN; j<=MAX; j++ )) # There can only be MAP_WIDTH number of elements within valid range
|
||||||
|
do
|
||||||
|
if check_adjacent "${CHAR_ARRAY[i]}" "${CHAR_ARRAY[j]}"
|
||||||
|
then
|
||||||
|
printf "%s " "${CHAR_ARRAY[j]}"
|
||||||
|
(( NUM_ADJ++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
#printf "Num adj for %s idx %s is %s\n" "$CHAR" "${CHAR_ARRAY[$i]}" "$NUM_ADJ" >&2
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
|
||||||
|
# Iterate through
|
||||||
|
for CH in "${CHAR_ARRAY[@]}"
|
||||||
|
do
|
||||||
|
CHAR=${CH%% *} # Remove trailing whitespace
|
||||||
|
if ! [[ -v KV_CACHE[$CHAR] ]]; then continue; fi
|
||||||
|
MAX_PERI=4
|
||||||
|
PERI_NUM=0
|
||||||
|
AREA=0
|
||||||
|
check_and_unset "$CHAR"
|
||||||
|
printf "char: %s max: %s peri: %s area: %s\n" "$CHAR" "$MAX_PERI" "$PERI_NUM" "$AREA" >&2
|
||||||
|
printf "%s\n" "$(( PERI_NUM * AREA ))"
|
||||||
|
done
|
||||||
|
# Get all plants
|
||||||
|
done <<< "$( < "$FILE" grep -o '[A-Z]' | sort -u | grep -o '[A-Z]*' )" |
|
||||||
|
paste -s -d "+" | bc
|
112
2024/day-12/solution-2.sh
Normal file
112
2024/day-12/solution-2.sh
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FUNCNEST=99999
|
||||||
|
FILE=test-input-1
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$FILE" paste -s -d "" | sed -E 's/(.)/\1\ /g' )"
|
||||||
|
MAP_LEN=${#MAP_ARRAY[@]}
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$FILE" | wc -c ) -1 ))
|
||||||
|
MAP_WIDTH_INV=$(( 0 - MAP_WIDTH ))
|
||||||
|
MAP_HEIGHT=$( < "$FILE" wc -l )
|
||||||
|
printf "Len: %s Width: %s Height: %s\n" "$MAP_LEN" "$MAP_WIDTH" "$MAP_HEIGHT"
|
||||||
|
|
||||||
|
# Check if tiles are adjacent and do not violate bounds
|
||||||
|
check_adjacent () {
|
||||||
|
# Check for out of map bounds
|
||||||
|
if [[ $2 -lt 0 ]] || [[ $2 -gt $MAP_LEN ]] ; then return 1 ; fi
|
||||||
|
|
||||||
|
DIFF=$(( $2 - $1 ))
|
||||||
|
# Valid adjacent distances
|
||||||
|
if [[ $DIFF -eq 1 ]] || [[ $DIFF -eq -1 ]] || [[ $DIFF -eq $MAP_WIDTH ]] || [[ $DIFF -eq $MAP_WIDTH_INV ]] ; then : ; else return 1 ; fi
|
||||||
|
|
||||||
|
# Check for left/right bounds
|
||||||
|
if [[ $DIFF -eq 1 ]] && [[ $(( $2 % MAP_WIDTH )) -eq 0 ]] ; then return 1 ; fi
|
||||||
|
if [[ $DIFF -eq -1 ]] && [[ $(( $1 % MAP_WIDTH )) -eq 0 ]] ; then return 1 ; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Basically recurse over kv and "consume" all adjacent tiles
|
||||||
|
# All tiles that are consumed are adjacent
|
||||||
|
check_and_unset () {
|
||||||
|
|
||||||
|
local KV_I=${1%% *} # Remove trailing whitespace
|
||||||
|
(( AREA++ ))
|
||||||
|
VALUE=${KV_CACHE[$KV_I]}
|
||||||
|
unset "KV_CACHE[$KV_I]" # "Take" it
|
||||||
|
|
||||||
|
printf "max: %s peri: %s area: %s key: %s val: %s\n" "$MAX_PERI" "$PERI_NUM" "$AREA" "$1" "$VALUE" >&2
|
||||||
|
|
||||||
|
# As a square, expect width and height to always be preserved
|
||||||
|
# Recursion should always be in sequence
|
||||||
|
|
||||||
|
unset IFS; read -r -a VAL_ARRAY <<< "$VALUE"
|
||||||
|
# Loop through adjacent tiles and recurse
|
||||||
|
for VAL in "${VAL_ARRAY[@]}" # VAL_ARRAY is always sorted
|
||||||
|
do
|
||||||
|
VAL_IDX=${VAL%% *}
|
||||||
|
if [[ -v KV_CACHE[$VAL_IDX] ]] # Check if tile has been "taken"
|
||||||
|
then
|
||||||
|
check_and_unset "$VAL_IDX"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
while read -r CHAR
|
||||||
|
do
|
||||||
|
# Get all indexes for a plant
|
||||||
|
read -r -a CHAR_ARRAY <<< "$(
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[$i]} == "$CHAR" ]]
|
||||||
|
then
|
||||||
|
printf "%s " "$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
|
||||||
|
#{
|
||||||
|
# printf "For char %s \n" "$CHAR"
|
||||||
|
# printf "%s " "${CHAR_ARRAY[@]}"
|
||||||
|
# printf "\n"
|
||||||
|
#} >&2
|
||||||
|
|
||||||
|
declare -A KV_CACHE
|
||||||
|
IFS=':'; while read -r VAR1 VAR2
|
||||||
|
do
|
||||||
|
#printf "VAR1: %s VAR2: %s\n" "$VAR1" "$VAR2" >&2
|
||||||
|
KV_CACHE[$VAR1]=$VAR2
|
||||||
|
done <<< "$(
|
||||||
|
# Find all adjacent tiles
|
||||||
|
for (( i=0; i<${#CHAR_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
NUM_ADJ=0
|
||||||
|
printf "%s:" "${CHAR_ARRAY[i]}"
|
||||||
|
MIN=$(( $(( i-MAP_WIDTH )) < 0 ? 0 : $(( i-MAP_WIDTH )) ))
|
||||||
|
MAX=$(( $(( i+MAP_WIDTH )) < MAP_LEN ? $(( i+MAP_WIDTH )) : $(( MAP_LEN )) ))
|
||||||
|
for (( j=MIN; j<MAX; j++ )) # There can only be MAP_WIDTH number of elements within valid range
|
||||||
|
do
|
||||||
|
if check_adjacent "${CHAR_ARRAY[i]}" "${CHAR_ARRAY[j]}"
|
||||||
|
then
|
||||||
|
printf "%s " "${CHAR_ARRAY[j]}"
|
||||||
|
(( NUM_ADJ++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
#printf "Num adj for %s idx %s is %s\n" "$CHAR" "${CHAR_ARRAY[$i]}" "$NUM_ADJ" >&2
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
|
||||||
|
# Iterate through
|
||||||
|
for CH in "${CHAR_ARRAY[@]}"
|
||||||
|
do
|
||||||
|
CHAR=${CH%% *} # Remove trailing whitespace
|
||||||
|
if ! [[ -v KV_CACHE[$CHAR] ]]; then continue; fi
|
||||||
|
PERI_NUM=4 # Number of perimeters of a square
|
||||||
|
AREA=0
|
||||||
|
ROW=0
|
||||||
|
check_and_unset "$CHAR"
|
||||||
|
printf "char: %s max: %s peri: %s area: %s\n" "$CHAR" "$MAX_PERI" "$PERI_NUM" "$AREA" >&2
|
||||||
|
printf "%s\n" "$(( PERI_NUM * AREA ))"
|
||||||
|
done
|
||||||
|
# Get all plants
|
||||||
|
#done <<< "$( < "$FILE" grep -o '[A-Z]' | sort -u | grep -o '[A-Z]*' )"
|
||||||
|
done <<< "$( < "$FILE" grep -o '[A-Z]' | sort -u | grep -o '[A-Z]*' )" |
|
||||||
|
paste -s -d "+" | bc
|
4
2024/day-12/test-input-1
Normal file
4
2024/day-12/test-input-1
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
AAAA
|
||||||
|
BBCD
|
||||||
|
BBCC
|
||||||
|
EEEC
|
5
2024/day-12/test-input-2
Normal file
5
2024/day-12/test-input-2
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
||||||
|
OXOXO
|
||||||
|
OOOOO
|
10
2024/day-12/test-input-3
Normal file
10
2024/day-12/test-input-3
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
RRRRIICCFF
|
||||||
|
RRRRIICCCF
|
||||||
|
VVRRRCCFFF
|
||||||
|
VVRCCCJFFF
|
||||||
|
VVVVCJJCFE
|
||||||
|
VVIVCCJJEE
|
||||||
|
VVIIICJJEE
|
||||||
|
MIIIIIJJEE
|
||||||
|
MIIISIJEEE
|
||||||
|
MMMISSJEEE
|
1
2024/day-12/test-result-1
Normal file
1
2024/day-12/test-result-1
Normal file
@ -0,0 +1 @@
|
|||||||
|
140
|
1
2024/day-12/test-result-2
Normal file
1
2024/day-12/test-result-2
Normal file
@ -0,0 +1 @@
|
|||||||
|
772
|
1
2024/day-12/test-result-3
Normal file
1
2024/day-12/test-result-3
Normal file
@ -0,0 +1 @@
|
|||||||
|
1930
|
1279
2024/day-13/input
Normal file
1279
2024/day-13/input
Normal file
File diff suppressed because it is too large
Load Diff
45
2024/day-13/solution-1.sh
Normal file
45
2024/day-13/solution-1.sh
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
read -r -a INPUT_ARRAY <<< "$( sed -E 's/.*X[\+\=]([0-9]+), Y[\+\=]([0-9]+)/\1 \2 /g' < "$FILE" | paste -s -d " " )"
|
||||||
|
printf "%s\n" "${INPUT_ARRAY[@]}" >&2
|
||||||
|
INPUT_LEN=${#INPUT_ARRAY[@]}
|
||||||
|
|
||||||
|
TOTAL_TOKEN=0
|
||||||
|
for (( i=0 ; i < INPUT_LEN; i+=6 ))
|
||||||
|
do
|
||||||
|
A=${INPUT_ARRAY[i]}
|
||||||
|
C=${INPUT_ARRAY[i+1]}
|
||||||
|
B=${INPUT_ARRAY[i+2]}
|
||||||
|
D=${INPUT_ARRAY[i+3]}
|
||||||
|
X=${INPUT_ARRAY[i+4]}
|
||||||
|
Y=${INPUT_ARRAY[i+5]}
|
||||||
|
|
||||||
|
I=$(( ( B*Y - D*X ) / ( B*C - D*A ) )) # Button A
|
||||||
|
J=$(( ( X - A*I ) / B )) # Button B
|
||||||
|
|
||||||
|
TOKEN=$(( I*3 + J*1 ))
|
||||||
|
|
||||||
|
{
|
||||||
|
printf "Answer: I= %s, J= %s\n" "$I" "$J"
|
||||||
|
printf "Verify answer : %s to %s, %s to %s\n" "$(( A*I + B*J ))" "$X" "$(( C*I + D*J ))" "$Y"
|
||||||
|
printf "Total cost: %s\n" "$(( I*3 + J*1 ))"
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
if ! [[ $(( A*I + B*J )) -eq $X ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif ! [[ $(( C*I + D*J )) -eq $Y ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif [[ $I -lt 1 ]] || [[ $J -lt 1 ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif [[ $I -gt 100 ]] || [[ $J -gt 100 ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
(( TOTAL_TOKEN+=TOKEN ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Total token: %s\n" "$TOTAL_TOKEN"
|
63
2024/day-13/solution-2.sh
Normal file
63
2024/day-13/solution-2.sh
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
read -r -a INPUT_ARRAY <<< "$( sed -E 's/.*X[\+\=]([0-9]+), Y[\+\=]([0-9]+)/\1 \2 /g' < "$FILE" | paste -s -d " " )"
|
||||||
|
#printf "%s\n" "${INPUT_ARRAY[@]}" >&2
|
||||||
|
INPUT_LEN=${#INPUT_ARRAY[@]}
|
||||||
|
|
||||||
|
TOTAL_TOKEN=0
|
||||||
|
for (( i=0 ; i < INPUT_LEN; i+=6 ))
|
||||||
|
do
|
||||||
|
A=${INPUT_ARRAY[i]}
|
||||||
|
C=${INPUT_ARRAY[i+1]}
|
||||||
|
B=${INPUT_ARRAY[i+2]}
|
||||||
|
D=${INPUT_ARRAY[i+3]}
|
||||||
|
X=$(( 10000000000000 + ${INPUT_ARRAY[i+4]} ))
|
||||||
|
Y=$(( 10000000000000 + ${INPUT_ARRAY[i+5]} ))
|
||||||
|
|
||||||
|
# Check if moduluses are eq 0 before proceeding
|
||||||
|
I_MODULUS=$(( (B*Y - D*X) % (B*C - D*A) ))
|
||||||
|
echo "I_MODULUS: $I_MODULUS"
|
||||||
|
if [[ $I_MODULUS -eq 0 ]]
|
||||||
|
then
|
||||||
|
I=$(( ( B*Y - D*X ) / ( B*C - D*A ) )) # Button A
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
J_MODULUS=$(( ( X - A*I ) % B ))
|
||||||
|
echo "J_MODULUS: $J_MODULUS"
|
||||||
|
if [[ $J_MODULUS -eq 0 ]]
|
||||||
|
then
|
||||||
|
J=$(( ( X - A*I ) / B )) # Button b
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Numbers have to be positive ints
|
||||||
|
if [[ $I -lt 1 ]] || [[ $J -lt 1 ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "( $B*$Y - $D*$X ) / ( $B*$C - $D*$A )" >&2 # Button A
|
||||||
|
echo "( $X - $A*$I ) / $B )" >&2 # Button B
|
||||||
|
printf "Answer: I= %s, J= %s\n" "$I" "$J"
|
||||||
|
printf "Verify answer : %s to %s, %s to %s\n" "$(( A*I + B*J ))" "$X" "$(( C*I + D*J ))" "$Y"
|
||||||
|
printf "Total cost: %s\n" "$(( I*3 + J*1 ))"
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
TOKEN=$(( I*3 + J*1 )) # Calculate token cost
|
||||||
|
|
||||||
|
# Verify numbers with results for positions
|
||||||
|
if ! [[ $(( A*I + B*J )) -eq $X ]] # X position
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
elif ! [[ $(( C*I + D*J )) -eq $Y ]] # Y position
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
(( TOTAL_TOKEN+=TOKEN ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Total token: %s\n" "$TOTAL_TOKEN"
|
15
2024/day-13/test-input-1
Normal file
15
2024/day-13/test-input-1
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Button A: X+94, Y+34
|
||||||
|
Button B: X+22, Y+67
|
||||||
|
Prize: X=8400, Y=5400
|
||||||
|
|
||||||
|
Button A: X+26, Y+66
|
||||||
|
Button B: X+67, Y+21
|
||||||
|
Prize: X=12748, Y=12176
|
||||||
|
|
||||||
|
Button A: X+17, Y+86
|
||||||
|
Button B: X+84, Y+37
|
||||||
|
Prize: X=7870, Y=6450
|
||||||
|
|
||||||
|
Button A: X+69, Y+23
|
||||||
|
Button B: X+27, Y+71
|
||||||
|
Prize: X=18641, Y=10279
|
500
2024/day-14/input
Normal file
500
2024/day-14/input
Normal file
@ -0,0 +1,500 @@
|
|||||||
|
p=30,37 v=-50,-64
|
||||||
|
p=24,42 v=55,12
|
||||||
|
p=10,56 v=-49,82
|
||||||
|
p=67,69 v=-58,60
|
||||||
|
p=82,98 v=-57,61
|
||||||
|
p=29,1 v=20,-40
|
||||||
|
p=41,61 v=-95,92
|
||||||
|
p=92,68 v=38,80
|
||||||
|
p=26,82 v=58,79
|
||||||
|
p=84,42 v=11,-45
|
||||||
|
p=71,10 v=-76,21
|
||||||
|
p=42,3 v=-93,-25
|
||||||
|
p=53,102 v=93,-63
|
||||||
|
p=33,4 v=-13,-94
|
||||||
|
p=20,100 v=57,-32
|
||||||
|
p=17,50 v=51,39
|
||||||
|
p=75,41 v=-84,39
|
||||||
|
p=83,53 v=-64,-96
|
||||||
|
p=15,38 v=28,-72
|
||||||
|
p=35,23 v=-9,-69
|
||||||
|
p=26,92 v=10,56
|
||||||
|
p=19,54 v=-42,4
|
||||||
|
p=50,6 v=-72,28
|
||||||
|
p=88,19 v=-90,-29
|
||||||
|
p=11,85 v=-5,87
|
||||||
|
p=22,22 v=-49,60
|
||||||
|
p=70,81 v=-33,37
|
||||||
|
p=43,47 v=-93,35
|
||||||
|
p=5,32 v=-1,39
|
||||||
|
p=91,70 v=96,-44
|
||||||
|
p=10,87 v=-38,94
|
||||||
|
p=67,6 v=32,-99
|
||||||
|
p=54,41 v=-47,68
|
||||||
|
p=2,59 v=-75,-53
|
||||||
|
p=27,20 v=-46,5
|
||||||
|
p=22,28 v=-13,-75
|
||||||
|
p=51,29 v=99,66
|
||||||
|
p=98,28 v=-38,-30
|
||||||
|
p=26,53 v=-49,48
|
||||||
|
p=39,83 v=-67,3
|
||||||
|
p=34,59 v=-46,-57
|
||||||
|
p=96,92 v=83,26
|
||||||
|
p=18,70 v=59,23
|
||||||
|
p=41,84 v=-27,-1
|
||||||
|
p=5,40 v=-30,20
|
||||||
|
p=86,83 v=-59,87
|
||||||
|
p=3,76 v=12,-76
|
||||||
|
p=49,88 v=6,83
|
||||||
|
p=37,79 v=90,-5
|
||||||
|
p=78,42 v=21,50
|
||||||
|
p=78,55 v=-12,-95
|
||||||
|
p=66,14 v=31,1
|
||||||
|
p=53,47 v=-64,62
|
||||||
|
p=67,18 v=-89,58
|
||||||
|
p=87,10 v=-78,-29
|
||||||
|
p=62,86 v=-14,91
|
||||||
|
p=78,74 v=17,-81
|
||||||
|
p=12,62 v=-40,45
|
||||||
|
p=45,102 v=-91,-32
|
||||||
|
p=38,1 v=-99,97
|
||||||
|
p=39,81 v=55,-84
|
||||||
|
p=43,22 v=-85,65
|
||||||
|
p=44,30 v=43,35
|
||||||
|
p=58,22 v=-41,-48
|
||||||
|
p=59,35 v=-35,-45
|
||||||
|
p=93,23 v=-24,13
|
||||||
|
p=28,98 v=-39,96
|
||||||
|
p=95,34 v=-27,55
|
||||||
|
p=18,70 v=92,-27
|
||||||
|
p=7,76 v=-11,75
|
||||||
|
p=1,23 v=-98,-37
|
||||||
|
p=8,87 v=-3,-70
|
||||||
|
p=59,22 v=97,-71
|
||||||
|
p=69,79 v=-36,-23
|
||||||
|
p=34,82 v=-15,-35
|
||||||
|
p=5,7 v=-36,44
|
||||||
|
p=76,70 v=-79,-6
|
||||||
|
p=77,36 v=13,85
|
||||||
|
p=68,60 v=80,14
|
||||||
|
p=13,96 v=92,94
|
||||||
|
p=37,37 v=-93,-38
|
||||||
|
p=1,66 v=1,11
|
||||||
|
p=10,10 v=94,-37
|
||||||
|
p=97,86 v=-30,-5
|
||||||
|
p=69,11 v=-76,21
|
||||||
|
p=30,90 v=22,-96
|
||||||
|
p=33,26 v=-31,97
|
||||||
|
p=48,81 v=37,-54
|
||||||
|
p=19,37 v=72,33
|
||||||
|
p=49,88 v=36,-69
|
||||||
|
p=1,61 v=12,44
|
||||||
|
p=48,83 v=-72,91
|
||||||
|
p=39,6 v=-56,-55
|
||||||
|
p=94,98 v=44,-70
|
||||||
|
p=68,60 v=95,-99
|
||||||
|
p=44,52 v=-83,-61
|
||||||
|
p=44,81 v=89,51
|
||||||
|
p=4,44 v=36,-7
|
||||||
|
p=17,9 v=-77,-93
|
||||||
|
p=35,77 v=53,38
|
||||||
|
p=60,79 v=86,-81
|
||||||
|
p=16,81 v=85,69
|
||||||
|
p=54,10 v=-2,36
|
||||||
|
p=55,73 v=-43,-42
|
||||||
|
p=20,86 v=-11,-47
|
||||||
|
p=57,32 v=3,88
|
||||||
|
p=82,66 v=89,-42
|
||||||
|
p=90,4 v=-59,-55
|
||||||
|
p=8,20 v=-76,69
|
||||||
|
p=18,77 v=-79,-65
|
||||||
|
p=100,29 v=-24,66
|
||||||
|
p=22,3 v=-44,-47
|
||||||
|
p=52,49 v=-90,68
|
||||||
|
p=16,72 v=45,31
|
||||||
|
p=57,99 v=33,-82
|
||||||
|
p=51,56 v=16,9
|
||||||
|
p=28,90 v=88,-74
|
||||||
|
p=76,24 v=-43,-10
|
||||||
|
p=21,31 v=-36,-90
|
||||||
|
p=68,99 v=27,-40
|
||||||
|
p=0,84 v=69,83
|
||||||
|
p=100,88 v=-97,32
|
||||||
|
p=65,52 v=85,-4
|
||||||
|
p=31,61 v=-76,71
|
||||||
|
p=75,101 v=-70,55
|
||||||
|
p=43,17 v=74,-33
|
||||||
|
p=56,89 v=62,-54
|
||||||
|
p=3,50 v=-96,69
|
||||||
|
p=77,70 v=-49,53
|
||||||
|
p=69,69 v=-78,72
|
||||||
|
p=76,78 v=54,-8
|
||||||
|
p=32,75 v=-34,-11
|
||||||
|
p=42,100 v=47,75
|
||||||
|
p=70,28 v=97,4
|
||||||
|
p=88,42 v=75,39
|
||||||
|
p=64,20 v=-74,89
|
||||||
|
p=78,17 v=-72,-98
|
||||||
|
p=14,79 v=30,26
|
||||||
|
p=47,50 v=16,38
|
||||||
|
p=21,75 v=59,-73
|
||||||
|
p=82,74 v=81,30
|
||||||
|
p=25,62 v=11,-1
|
||||||
|
p=94,83 v=67,40
|
||||||
|
p=82,62 v=16,-5
|
||||||
|
p=26,97 v=67,50
|
||||||
|
p=6,77 v=-44,72
|
||||||
|
p=76,94 v=-17,77
|
||||||
|
p=55,27 v=-62,-75
|
||||||
|
p=86,14 v=-90,-97
|
||||||
|
p=51,66 v=78,-20
|
||||||
|
p=21,68 v=22,87
|
||||||
|
p=50,83 v=-68,-8
|
||||||
|
p=52,81 v=3,-8
|
||||||
|
p=10,82 v=36,-35
|
||||||
|
p=99,10 v=38,-65
|
||||||
|
p=56,61 v=-67,-55
|
||||||
|
p=46,39 v=-60,73
|
||||||
|
p=65,64 v=29,-65
|
||||||
|
p=11,5 v=91,-12
|
||||||
|
p=93,69 v=38,57
|
||||||
|
p=62,56 v=-68,61
|
||||||
|
p=31,86 v=-48,79
|
||||||
|
p=94,17 v=-90,86
|
||||||
|
p=71,37 v=-91,35
|
||||||
|
p=97,48 v=58,-69
|
||||||
|
p=95,11 v=75,-52
|
||||||
|
p=37,62 v=-87,38
|
||||||
|
p=63,76 v=97,41
|
||||||
|
p=9,74 v=78,-52
|
||||||
|
p=13,87 v=96,83
|
||||||
|
p=26,50 v=-46,-69
|
||||||
|
p=8,68 v=-43,-62
|
||||||
|
p=45,9 v=39,-2
|
||||||
|
p=29,79 v=-19,87
|
||||||
|
p=56,5 v=11,-16
|
||||||
|
p=92,68 v=25,99
|
||||||
|
p=98,2 v=-63,-13
|
||||||
|
p=29,102 v=-93,-36
|
||||||
|
p=73,9 v=56,-28
|
||||||
|
p=36,66 v=-83,-46
|
||||||
|
p=94,80 v=-43,-38
|
||||||
|
p=53,79 v=23,97
|
||||||
|
p=50,10 v=-91,-37
|
||||||
|
p=14,43 v=98,-49
|
||||||
|
p=3,78 v=78,-1
|
||||||
|
p=46,46 v=-31,-31
|
||||||
|
p=94,101 v=38,-70
|
||||||
|
p=56,23 v=-37,9
|
||||||
|
p=50,66 v=38,91
|
||||||
|
p=70,26 v=17,-34
|
||||||
|
p=7,92 v=7,-76
|
||||||
|
p=75,36 v=-45,-30
|
||||||
|
p=71,0 v=62,-51
|
||||||
|
p=72,92 v=12,9
|
||||||
|
p=34,39 v=84,84
|
||||||
|
p=73,88 v=-39,-26
|
||||||
|
p=51,81 v=-68,64
|
||||||
|
p=24,82 v=61,4
|
||||||
|
p=32,2 v=86,86
|
||||||
|
p=50,102 v=-30,-12
|
||||||
|
p=98,26 v=-67,14
|
||||||
|
p=96,88 v=35,-83
|
||||||
|
p=43,53 v=12,-99
|
||||||
|
p=77,50 v=56,-72
|
||||||
|
p=7,50 v=66,92
|
||||||
|
p=70,66 v=-6,38
|
||||||
|
p=60,29 v=-70,-33
|
||||||
|
p=70,11 v=89,24
|
||||||
|
p=93,58 v=-19,-74
|
||||||
|
p=96,68 v=98,30
|
||||||
|
p=70,68 v=-43,38
|
||||||
|
p=24,99 v=53,-28
|
||||||
|
p=98,38 v=-74,-9
|
||||||
|
p=69,49 v=-76,-23
|
||||||
|
p=9,75 v=-69,64
|
||||||
|
p=41,19 v=14,-71
|
||||||
|
p=0,23 v=38,-71
|
||||||
|
p=1,56 v=36,-23
|
||||||
|
p=55,52 v=-99,31
|
||||||
|
p=85,85 v=-22,75
|
||||||
|
p=18,78 v=69,-27
|
||||||
|
p=7,96 v=90,-89
|
||||||
|
p=96,85 v=40,-70
|
||||||
|
p=7,80 v=-92,87
|
||||||
|
p=81,6 v=46,-17
|
||||||
|
p=44,71 v=10,-19
|
||||||
|
p=12,72 v=73,-4
|
||||||
|
p=33,86 v=14,67
|
||||||
|
p=84,94 v=52,-24
|
||||||
|
p=34,66 v=-56,-65
|
||||||
|
p=31,60 v=-85,88
|
||||||
|
p=65,0 v=-35,-97
|
||||||
|
p=76,83 v=-12,60
|
||||||
|
p=15,29 v=64,-59
|
||||||
|
p=71,45 v=-68,43
|
||||||
|
p=19,77 v=92,95
|
||||||
|
p=6,85 v=-38,79
|
||||||
|
p=1,27 v=-59,33
|
||||||
|
p=38,12 v=-89,-10
|
||||||
|
p=45,27 v=51,66
|
||||||
|
p=23,100 v=-13,-70
|
||||||
|
p=18,43 v=-35,-59
|
||||||
|
p=63,28 v=72,-72
|
||||||
|
p=42,7 v=83,-5
|
||||||
|
p=28,99 v=29,-43
|
||||||
|
p=96,38 v=11,39
|
||||||
|
p=47,97 v=74,56
|
||||||
|
p=81,27 v=87,-64
|
||||||
|
p=63,6 v=39,93
|
||||||
|
p=15,43 v=-48,19
|
||||||
|
p=6,21 v=12,-65
|
||||||
|
p=52,70 v=-85,-14
|
||||||
|
p=96,53 v=-55,8
|
||||||
|
p=3,77 v=-98,-20
|
||||||
|
p=76,54 v=-86,-95
|
||||||
|
p=85,77 v=-49,-72
|
||||||
|
p=96,46 v=-84,39
|
||||||
|
p=42,79 v=-93,68
|
||||||
|
p=46,59 v=-17,7
|
||||||
|
p=52,16 v=-66,32
|
||||||
|
p=12,70 v=67,23
|
||||||
|
p=52,7 v=-21,67
|
||||||
|
p=13,62 v=-5,95
|
||||||
|
p=25,63 v=-83,19
|
||||||
|
p=91,25 v=54,24
|
||||||
|
p=28,9 v=-5,71
|
||||||
|
p=73,1 v=89,82
|
||||||
|
p=71,22 v=83,82
|
||||||
|
p=37,40 v=90,66
|
||||||
|
p=8,91 v=-3,-85
|
||||||
|
p=53,66 v=6,38
|
||||||
|
p=14,94 v=59,10
|
||||||
|
p=81,17 v=-12,-22
|
||||||
|
p=82,72 v=-20,-88
|
||||||
|
p=36,90 v=-47,-80
|
||||||
|
p=26,91 v=-77,-70
|
||||||
|
p=73,91 v=23,-40
|
||||||
|
p=76,68 v=21,53
|
||||||
|
p=64,30 v=-82,55
|
||||||
|
p=7,97 v=1,-13
|
||||||
|
p=69,87 v=57,-28
|
||||||
|
p=19,65 v=92,31
|
||||||
|
p=66,50 v=97,-53
|
||||||
|
p=86,54 v=13,84
|
||||||
|
p=23,51 v=-48,46
|
||||||
|
p=97,39 v=-61,-7
|
||||||
|
p=6,2 v=57,-42
|
||||||
|
p=51,71 v=-20,40
|
||||||
|
p=65,17 v=-76,-25
|
||||||
|
p=62,12 v=-14,-59
|
||||||
|
p=16,31 v=30,85
|
||||||
|
p=55,12 v=16,-23
|
||||||
|
p=22,45 v=96,-87
|
||||||
|
p=8,97 v=95,14
|
||||||
|
p=73,91 v=-96,-89
|
||||||
|
p=35,32 v=-50,-34
|
||||||
|
p=19,78 v=68,-89
|
||||||
|
p=88,23 v=-56,-58
|
||||||
|
p=63,20 v=74,29
|
||||||
|
p=81,79 v=-10,57
|
||||||
|
p=11,57 v=-40,-42
|
||||||
|
p=24,69 v=-83,-12
|
||||||
|
p=41,7 v=19,69
|
||||||
|
p=3,101 v=25,69
|
||||||
|
p=5,67 v=38,-88
|
||||||
|
p=66,50 v=-47,39
|
||||||
|
p=59,32 v=-93,16
|
||||||
|
p=71,48 v=45,-82
|
||||||
|
p=23,76 v=-46,83
|
||||||
|
p=27,9 v=-15,-78
|
||||||
|
p=39,57 v=99,-63
|
||||||
|
p=64,48 v=-39,-88
|
||||||
|
p=100,24 v=-78,-61
|
||||||
|
p=83,8 v=-88,-89
|
||||||
|
p=74,2 v=64,-65
|
||||||
|
p=58,54 v=-2,57
|
||||||
|
p=69,98 v=-66,-97
|
||||||
|
p=12,49 v=-69,27
|
||||||
|
p=66,9 v=60,-97
|
||||||
|
p=34,47 v=72,-26
|
||||||
|
p=48,4 v=66,62
|
||||||
|
p=64,22 v=-10,13
|
||||||
|
p=87,42 v=23,-87
|
||||||
|
p=32,67 v=6,-73
|
||||||
|
p=44,77 v=-1,-5
|
||||||
|
p=19,44 v=86,80
|
||||||
|
p=77,82 v=-86,3
|
||||||
|
p=90,99 v=43,-43
|
||||||
|
p=77,32 v=-28,-26
|
||||||
|
p=78,7 v=-14,2
|
||||||
|
p=15,69 v=-44,-69
|
||||||
|
p=80,23 v=-39,-74
|
||||||
|
p=93,39 v=-56,78
|
||||||
|
p=75,51 v=-47,-3
|
||||||
|
p=47,20 v=74,1
|
||||||
|
p=33,85 v=39,-47
|
||||||
|
p=33,2 v=36,50
|
||||||
|
p=46,43 v=81,-11
|
||||||
|
p=47,100 v=-62,-74
|
||||||
|
p=14,31 v=87,-78
|
||||||
|
p=63,56 v=41,43
|
||||||
|
p=80,57 v=41,47
|
||||||
|
p=57,26 v=2,12
|
||||||
|
p=56,25 v=5,-95
|
||||||
|
p=50,40 v=-66,35
|
||||||
|
p=67,30 v=27,-35
|
||||||
|
p=38,33 v=42,-10
|
||||||
|
p=12,4 v=28,59
|
||||||
|
p=2,48 v=54,30
|
||||||
|
p=10,8 v=88,-33
|
||||||
|
p=34,79 v=14,-35
|
||||||
|
p=52,99 v=60,14
|
||||||
|
p=25,66 v=-13,-50
|
||||||
|
p=94,44 v=7,-30
|
||||||
|
p=45,50 v=35,-30
|
||||||
|
p=72,96 v=-88,52
|
||||||
|
p=91,56 v=-24,19
|
||||||
|
p=83,92 v=17,-28
|
||||||
|
p=64,28 v=95,31
|
||||||
|
p=34,44 v=49,4
|
||||||
|
p=32,55 v=-52,-80
|
||||||
|
p=11,25 v=40,35
|
||||||
|
p=80,2 v=-6,-74
|
||||||
|
p=83,27 v=-48,61
|
||||||
|
p=23,53 v=-3,-92
|
||||||
|
p=60,44 v=-65,-48
|
||||||
|
p=46,102 v=-25,-97
|
||||||
|
p=8,6 v=-36,-2
|
||||||
|
p=87,88 v=13,18
|
||||||
|
p=40,84 v=-33,53
|
||||||
|
p=13,7 v=28,-78
|
||||||
|
p=60,10 v=27,21
|
||||||
|
p=92,50 v=44,4
|
||||||
|
p=81,55 v=-51,-76
|
||||||
|
p=9,102 v=32,-2
|
||||||
|
p=65,42 v=-6,54
|
||||||
|
p=9,96 v=-34,71
|
||||||
|
p=34,94 v=-87,94
|
||||||
|
p=74,62 v=90,-52
|
||||||
|
p=51,8 v=61,48
|
||||||
|
p=45,27 v=70,5
|
||||||
|
p=15,74 v=51,-62
|
||||||
|
p=92,49 v=83,-22
|
||||||
|
p=4,23 v=-28,32
|
||||||
|
p=30,54 v=41,-57
|
||||||
|
p=70,65 v=27,-4
|
||||||
|
p=39,43 v=-56,-38
|
||||||
|
p=68,75 v=-78,3
|
||||||
|
p=71,58 v=60,-65
|
||||||
|
p=7,73 v=98,49
|
||||||
|
p=7,54 v=-89,96
|
||||||
|
p=77,45 v=81,43
|
||||||
|
p=88,76 v=-37,13
|
||||||
|
p=62,41 v=99,39
|
||||||
|
p=65,76 v=77,52
|
||||||
|
p=72,97 v=-43,25
|
||||||
|
p=60,30 v=99,5
|
||||||
|
p=25,35 v=-23,-53
|
||||||
|
p=84,24 v=-88,-60
|
||||||
|
p=41,0 v=20,6
|
||||||
|
p=78,52 v=-18,-72
|
||||||
|
p=68,65 v=95,19
|
||||||
|
p=11,40 v=90,-56
|
||||||
|
p=69,40 v=35,58
|
||||||
|
p=82,44 v=13,-7
|
||||||
|
p=32,23 v=-21,32
|
||||||
|
p=61,8 v=68,-63
|
||||||
|
p=81,5 v=85,-74
|
||||||
|
p=55,67 v=66,57
|
||||||
|
p=15,6 v=71,-63
|
||||||
|
p=29,93 v=-32,72
|
||||||
|
p=51,31 v=-20,45
|
||||||
|
p=45,63 v=37,19
|
||||||
|
p=56,92 v=-37,-43
|
||||||
|
p=57,44 v=4,16
|
||||||
|
p=29,11 v=-50,93
|
||||||
|
p=8,1 v=42,-17
|
||||||
|
p=77,71 v=97,76
|
||||||
|
p=98,97 v=43,-84
|
||||||
|
p=71,51 v=-42,72
|
||||||
|
p=4,24 v=92,-10
|
||||||
|
p=37,71 v=14,-88
|
||||||
|
p=2,0 v=71,86
|
||||||
|
p=94,71 v=7,30
|
||||||
|
p=95,22 v=-44,-56
|
||||||
|
p=13,58 v=96,-4
|
||||||
|
p=10,75 v=-47,74
|
||||||
|
p=91,27 v=32,-68
|
||||||
|
p=94,31 v=48,-56
|
||||||
|
p=21,48 v=47,23
|
||||||
|
p=98,78 v=-73,79
|
||||||
|
p=69,66 v=-76,49
|
||||||
|
p=87,67 v=78,60
|
||||||
|
p=56,32 v=37,-29
|
||||||
|
p=75,1 v=-72,88
|
||||||
|
p=90,71 v=-64,-50
|
||||||
|
p=63,58 v=27,-40
|
||||||
|
p=0,27 v=-20,-25
|
||||||
|
p=32,4 v=-87,36
|
||||||
|
p=68,51 v=-78,-76
|
||||||
|
p=80,78 v=-82,-77
|
||||||
|
p=33,7 v=47,-44
|
||||||
|
p=42,98 v=80,75
|
||||||
|
p=44,97 v=-19,17
|
||||||
|
p=91,63 v=-33,98
|
||||||
|
p=60,48 v=75,92
|
||||||
|
p=41,32 v=-14,-84
|
||||||
|
p=7,29 v=-42,-11
|
||||||
|
p=2,70 v=-63,87
|
||||||
|
p=85,48 v=-16,-34
|
||||||
|
p=5,54 v=-82,51
|
||||||
|
p=56,95 v=-61,-62
|
||||||
|
p=5,57 v=-57,69
|
||||||
|
p=80,14 v=-82,-71
|
||||||
|
p=30,72 v=-52,-92
|
||||||
|
p=70,49 v=-41,27
|
||||||
|
p=71,82 v=60,-1
|
||||||
|
p=71,9 v=25,97
|
||||||
|
p=100,101 v=91,-57
|
||||||
|
p=5,48 v=44,38
|
||||||
|
p=95,75 v=65,83
|
||||||
|
p=34,47 v=-29,27
|
||||||
|
p=89,82 v=19,34
|
||||||
|
p=76,92 v=-29,-2
|
||||||
|
p=71,92 v=81,-70
|
||||||
|
p=17,68 v=90,-8
|
||||||
|
p=71,44 v=96,32
|
||||||
|
p=57,25 v=-10,54
|
||||||
|
p=75,67 v=-16,-62
|
||||||
|
p=46,87 v=-37,41
|
||||||
|
p=74,98 v=97,78
|
||||||
|
p=30,22 v=72,-38
|
||||||
|
p=41,17 v=-23,-21
|
||||||
|
p=67,34 v=85,61
|
||||||
|
p=63,58 v=31,42
|
||||||
|
p=96,5 v=-94,-17
|
||||||
|
p=64,102 v=99,29
|
||||||
|
p=99,39 v=-63,27
|
||||||
|
p=16,84 v=-40,-24
|
||||||
|
p=22,19 v=55,2
|
||||||
|
p=70,76 v=-98,-46
|
||||||
|
p=16,46 v=-40,16
|
||||||
|
p=37,10 v=7,-28
|
||||||
|
p=59,49 v=3,-90
|
||||||
|
p=38,38 v=-79,8
|
||||||
|
p=43,85 v=45,-58
|
||||||
|
p=99,23 v=-26,24
|
||||||
|
p=45,69 v=-70,-62
|
||||||
|
p=44,22 v=-73,21
|
||||||
|
p=24,17 v=-10,43
|
||||||
|
p=61,90 v=-70,98
|
||||||
|
p=69,65 v=-14,-81
|
||||||
|
p=23,93 v=-6,-99
|
||||||
|
p=80,30 v=-25,-25
|
||||||
|
p=31,53 v=-91,-92
|
||||||
|
p=45,2 v=78,21
|
||||||
|
p=50,47 v=-87,-45
|
||||||
|
p=32,86 v=84,-62
|
||||||
|
p=47,81 v=97,-92
|
||||||
|
p=99,95 v=78,-66
|
113
2024/day-14/solution-1.sh
Normal file
113
2024/day-14/solution-1.sh
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
#!/usr/bin/env/bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
MAP_WIDTH=101
|
||||||
|
MAP_HEIGHT=103
|
||||||
|
MEDIAN_WIDTH=$(( MAP_WIDTH / 2 - 1 ))
|
||||||
|
if [[ $(( MAP_WIDTH % 2 )) -eq 1 ]]
|
||||||
|
then
|
||||||
|
(( MEDIAN_WIDTH++ ))
|
||||||
|
fi
|
||||||
|
MEDIAN_HEIGHT=$(( MAP_HEIGHT / 2 - 1 ))
|
||||||
|
if [[ $(( MAP_HEIGHT % 2 )) -eq 1 ]]
|
||||||
|
then
|
||||||
|
(( MEDIAN_HEIGHT++ ))
|
||||||
|
fi
|
||||||
|
printf "Median width: %s, median height: %s\n" "$MEDIAN_WIDTH" "$MEDIAN_HEIGHT"
|
||||||
|
|
||||||
|
# Load bot positions and velocities
|
||||||
|
read -r -a BOT_ARRAY <<< "$( grep -Eo '[-0-9]*' "$FILE" | paste -s -d " " )"
|
||||||
|
#printf "%s " "${BOT_ARRAY[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
printf "Bot array size: %s\n" "${#BOT_ARRAY[@]}"
|
||||||
|
|
||||||
|
# Just move forward n seconds for every bot and save
|
||||||
|
# final positions
|
||||||
|
IFS=';'; read -r -a FINAL_ARRAY <<< "$(
|
||||||
|
SECONDS=100
|
||||||
|
for (( i=0; i<${#BOT_ARRAY[@]}; i+=4 ))
|
||||||
|
do
|
||||||
|
PX=${BOT_ARRAY[i]}
|
||||||
|
PY=${BOT_ARRAY[i+1]}
|
||||||
|
VX=${BOT_ARRAY[i+2]}
|
||||||
|
VY=${BOT_ARRAY[i+3]}
|
||||||
|
FINAL_X=$(( PX + ( VX * SECONDS ) ))
|
||||||
|
FINAL_Y=$(( PY + ( VY * SECONDS ) ))
|
||||||
|
printf "%s %s;" "$FINAL_X" "$FINAL_Y"
|
||||||
|
done <<< "${BOT_ARRAY[@]}"
|
||||||
|
)"
|
||||||
|
unset IFS
|
||||||
|
#printf "%s\n" "${FINAL_ARRAY[@]}" | head
|
||||||
|
printf "Final array size: %s\n" "${#FINAL_ARRAY[@]}"
|
||||||
|
|
||||||
|
# Get number of robots in each quadrant
|
||||||
|
Q1=0
|
||||||
|
Q2=0
|
||||||
|
Q3=0
|
||||||
|
Q4=0
|
||||||
|
ITER=9999
|
||||||
|
while read -r RAW_X RAW_Y
|
||||||
|
do
|
||||||
|
|
||||||
|
# Adjust positions to be on map
|
||||||
|
PX=$(( RAW_X % MAP_WIDTH ))
|
||||||
|
if [[ $PX -lt 0 ]]
|
||||||
|
then
|
||||||
|
PX=$(( MAP_WIDTH + PX ))
|
||||||
|
fi
|
||||||
|
PY=$(( RAW_Y % MAP_HEIGHT ))
|
||||||
|
if [[ $PY -lt 0 ]]
|
||||||
|
then
|
||||||
|
PY=$(( MAP_HEIGHT + PY ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if negative positions, should not happen
|
||||||
|
if [[ $PX -lt 0 ]] || [[ $PY -lt 0 ]]
|
||||||
|
then
|
||||||
|
printf "Negative final position. PX: %s PY: %s\n" "$PX" "$PY"
|
||||||
|
fi
|
||||||
|
if [[ $PX -ge $MAP_WIDTH ]] || [[ $PY -ge $MAP_HEIGHT ]]
|
||||||
|
then
|
||||||
|
printf "Out of bounds. PX: %s PY: %s\n" "$PX" "$PY"
|
||||||
|
fi
|
||||||
|
printf "PX: %s PY: %s\n" "$PX" "$PY"
|
||||||
|
|
||||||
|
# Allocate robot to quadrant
|
||||||
|
if \
|
||||||
|
[[ $PX -ge 0 ]] && \
|
||||||
|
[[ $PX -lt $MEDIAN_WIDTH ]] && \
|
||||||
|
[[ $PY -ge 0 ]] && \
|
||||||
|
[[ $PY -lt $MEDIAN_HEIGHT ]] # Q1
|
||||||
|
then
|
||||||
|
(( Q1++ ))
|
||||||
|
elif \
|
||||||
|
[[ $PX -gt $MEDIAN_WIDTH ]] && \
|
||||||
|
[[ $PX -lt $MAP_WIDTH ]] && \
|
||||||
|
[[ $PY -ge 0 ]] && \
|
||||||
|
[[ $PY -lt $MEDIAN_HEIGHT ]] # Q2
|
||||||
|
then
|
||||||
|
(( Q2++ ))
|
||||||
|
elif \
|
||||||
|
[[ $PX -ge 0 ]] && \
|
||||||
|
[[ $PX -lt $MEDIAN_WIDTH ]] && \
|
||||||
|
[[ $PY -gt $MEDIAN_HEIGHT ]] && \
|
||||||
|
[[ $PY -lt $MAP_HEIGHT ]] # Q3
|
||||||
|
then
|
||||||
|
(( Q3++ ))
|
||||||
|
elif \
|
||||||
|
[[ $PX -gt $MEDIAN_WIDTH ]] && \
|
||||||
|
[[ $PX -lt $MAP_WIDTH ]] && \
|
||||||
|
[[ $PY -gt $MEDIAN_HEIGHT ]] && \
|
||||||
|
[[ $PY -lt $MAP_HEIGHT ]] # Q4
|
||||||
|
then
|
||||||
|
(( Q4++ ))
|
||||||
|
else
|
||||||
|
printf "Skipped in the median. PX: %s PY: %s\n" "$PX" "$PY"
|
||||||
|
fi
|
||||||
|
(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ; then break ; fi
|
||||||
|
done <<< "$( printf "%s\n" "${FINAL_ARRAY[@]}" )"
|
||||||
|
|
||||||
|
# Calculate safety factor
|
||||||
|
SAFETY_FACTOR=$(( Q1 * Q2 * Q3 * Q4 ))
|
||||||
|
printf "Safety factor: %s\n" "$SAFETY_FACTOR"
|
87
2024/day-14/solution-2.sh
Normal file
87
2024/day-14/solution-2.sh
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env/bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
MAP_WIDTH=101
|
||||||
|
MAP_HEIGHT=103
|
||||||
|
MEDIAN_WIDTH=$(( MAP_WIDTH / 2 - 1 ))
|
||||||
|
if [[ $(( MAP_WIDTH % 2 )) -eq 1 ]]
|
||||||
|
then
|
||||||
|
(( MEDIAN_WIDTH++ ))
|
||||||
|
fi
|
||||||
|
MEDIAN_HEIGHT=$(( MAP_HEIGHT / 2 - 1 ))
|
||||||
|
if [[ $(( MAP_HEIGHT % 2 )) -eq 1 ]]
|
||||||
|
then
|
||||||
|
(( MEDIAN_HEIGHT++ ))
|
||||||
|
fi
|
||||||
|
printf "Median width: %s, median height: %s\n" "$MEDIAN_WIDTH" "$MEDIAN_HEIGHT"
|
||||||
|
|
||||||
|
# Load bot positions and velocities
|
||||||
|
read -r -a BOT_ARRAY <<< "$( grep -Eo '[-0-9]*' "$FILE" | paste -s -d " " )"
|
||||||
|
#printf "%s " "${BOT_ARRAY[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
printf "Bot array size: %s\n" "${#BOT_ARRAY[@]}"
|
||||||
|
|
||||||
|
# Load arrangements for every second
|
||||||
|
#for SECONDS in $( seq 1 9999 )
|
||||||
|
for SECONDS in $( seq 6514 6516 )
|
||||||
|
do
|
||||||
|
# Compute positions for each bot
|
||||||
|
printf "Working on +%s seconds.\n" "$SECONDS"
|
||||||
|
IFS=';'; read -r -a FINAL_ARRAY <<< "$(
|
||||||
|
for (( i=0; i<${#BOT_ARRAY[@]}; i+=4 ))
|
||||||
|
do
|
||||||
|
PX=${BOT_ARRAY[i]}
|
||||||
|
PY=${BOT_ARRAY[i+1]}
|
||||||
|
VX=${BOT_ARRAY[i+2]}
|
||||||
|
VY=${BOT_ARRAY[i+3]}
|
||||||
|
FINAL_X=$(( PX + ( VX * SECONDS ) ))
|
||||||
|
FINAL_Y=$(( PY + ( VY * SECONDS ) ))
|
||||||
|
printf "%s %s;" "$FINAL_X" "$FINAL_Y"
|
||||||
|
done <<< "${BOT_ARRAY[@]}"
|
||||||
|
)"
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
# Generate "empty" map
|
||||||
|
# Map is a 1d array
|
||||||
|
MAP_LEN=$(( MAP_HEIGHT * MAP_WIDTH ))
|
||||||
|
read -r -a MAP_ARRAY <<< "$(
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
printf ". "
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
|
||||||
|
# Calculate and map bot positions on the map
|
||||||
|
while read -r RAW_X RAW_Y
|
||||||
|
do
|
||||||
|
|
||||||
|
# Adjust positions to be on map
|
||||||
|
PX=$(( RAW_X % MAP_WIDTH ))
|
||||||
|
if [[ $PX -lt 0 ]]
|
||||||
|
then
|
||||||
|
PX=$(( MAP_WIDTH + PX ))
|
||||||
|
fi
|
||||||
|
PY=$(( RAW_Y % MAP_HEIGHT ))
|
||||||
|
if [[ $PY -lt 0 ]]
|
||||||
|
then
|
||||||
|
PY=$(( MAP_HEIGHT + PY ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate serial position and mark it
|
||||||
|
POSITION=$(( PX + (PY -1)*MAP_WIDTH ))
|
||||||
|
MAP_ARRAY[POSITION]=X
|
||||||
|
|
||||||
|
done <<< "$( printf "%s\n" "${FINAL_ARRAY[@]}" )"
|
||||||
|
|
||||||
|
# Print out map for manual review
|
||||||
|
#printf "%s" "${MAP_ARRAY[@]}" | fold -w $(( MAP_WIDTH )) | grep -o 'XXXXXXXXXX' && break
|
||||||
|
printf "%s" "${MAP_ARRAY[@]}" | fold -w $(( MAP_WIDTH ))
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
printf "Final array length: %s, map array length: %s\n" "${#FINAL_ARRAY[@]}" "${#MAP_ARRAY[@]}"
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
# Reset for next run
|
||||||
|
unset MAP_ARRAY
|
||||||
|
unset FINAL_ARRAY
|
||||||
|
done
|
50
2024/day-15/input-map
Normal file
50
2024/day-15/input-map
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
##################################################
|
||||||
|
#...O.O..O..O...O..........O.O.O.O.....O..O.#.O#.#
|
||||||
|
#...O.OO.O.......O#.......O.OO....O.#..#...OOO#..#
|
||||||
|
#O..O....O.O.O.O..O.OOO...O.OO......O....#O.....##
|
||||||
|
#OO.#O.........OOO....OO....O.O.O..#......OO.O...#
|
||||||
|
#OO........OOO#O..#O..OOO...O.O.O..OO.#OOOO...#.##
|
||||||
|
#....#.O.......O.#....OOOO.O..O..O.O##...O....#O##
|
||||||
|
#.....OOO....O..........O...OO......OO.OO#O...OO.#
|
||||||
|
#OO.O....O...OO.O.##....OOO.O...O...............##
|
||||||
|
#O.....O.....#.....#..O..#O.O.O..OO#O..O.OOO...O.#
|
||||||
|
#.O....O....O..O.O...#.O..O....O.O..O..O.....O...#
|
||||||
|
#.O.O.....OO.OOOO.O...#O..........O...#.#OO....O.#
|
||||||
|
#O..O.O.O..O.O....OOO..O#..O.O.O......#O..O.O.#O##
|
||||||
|
#..O#...O.OO.....#O..O..O....OOOO.O...#OOO..#.#.O#
|
||||||
|
#.O.....O#.............#.#..OO...OOO....O....OO###
|
||||||
|
#.#OO....OO..O#....OO..O#...OO..........O...OO...#
|
||||||
|
#.O.O.....OO.....O.OO.O#...O..O..O...O....O......#
|
||||||
|
#.O..O....O..O.....#O.O..O.....O..#O...OOOO.O...O#
|
||||||
|
#O...O....O.OOOO...OO.........O#..#.....#O.O#O#.O#
|
||||||
|
##...OO...O.....O..O#O...O.........O.#...#..#....#
|
||||||
|
#OOOO.OO.#...OO.#..O..#O...........OOOO.OO.O....O#
|
||||||
|
#....O..O.O.OO..O#......#.....OO..OO...O........##
|
||||||
|
#.O.#....#..........#..OO....OO....##........O.OO#
|
||||||
|
#..O.O..#.....O##O.O....OO......#O....O....#.....#
|
||||||
|
#....OO.OO#..OO..O.#....@#O.OOO.O..OO#...#O.OO...#
|
||||||
|
#..O.....O.........O.O........O#O......O.......O.#
|
||||||
|
#O.............O....#O.......O..#..#O.O.O...#....#
|
||||||
|
##...O...OOO..OO..OO.........OOOOO..O.O.O.OO..O.O#
|
||||||
|
#.#.OOO......#.O..OO.#...O#.O....O..#...#.O......#
|
||||||
|
#O.O..........O..O...O..OO....O#.O....O.OOO....#.#
|
||||||
|
#.O.#..OO.OO#..........#.O...O.OO.....O......O.O.#
|
||||||
|
#.......OO.O.#O..OO.OOO.O........O.............OO#
|
||||||
|
#O..OOO.#.OO.O.O.....O...O.O..OO.O...O#O##O..O...#
|
||||||
|
#O.#.O.#O....O..O......O.##O.OOO..O.OOO.O...#....#
|
||||||
|
#.#........O.OO...#.O...O.....O.##...#.O.OO.O..#O#
|
||||||
|
#..OO..O....#..O.O#O..O...#O...O#.O.O.O.O...O.#..#
|
||||||
|
#O.......O#.#O..O#..O..O...#.#.O...........OO....#
|
||||||
|
#O....................OO.O...O......#..#.OO......#
|
||||||
|
#OO#..O#....O.OOO.....OOO..#.O..#OO.#....#O.O.O..#
|
||||||
|
#.O..O.......O.O....#.O...OO....O.OOO...#........#
|
||||||
|
#.......O...#.....###...O.OO.....O...##..O.#...O.#
|
||||||
|
#.O.#O...O...O.O#.#..#.#O..O.OO...O#...OOOO.O...O#
|
||||||
|
##..OO..........O...O.#...OO#O...#O..O..O........#
|
||||||
|
#...O..O.OO...#O..O#....O....#......OOOO.O...O.O.#
|
||||||
|
#..O.O...O.O.#O..O.O..#.O.O.......#....O....O.O..#
|
||||||
|
#O.O.#.OO.....O.........O.##..OO...#.O..O........#
|
||||||
|
#O..O.OOO..#....O.O#O.O..O......O...O#.OOO.O.O.O.#
|
||||||
|
#.O....##.##O.O.OO##.O...O....#...#.OO.....O...O.#
|
||||||
|
#OOO.....#...OOO.O..OOO..O...O......#.O...O..##.O#
|
||||||
|
##################################################
|
20
2024/day-15/input-movements
Normal file
20
2024/day-15/input-movements
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<v^<^>^^^<<>v^^^v>>>>v><^<v<^^>v<>v^<><>v>^v^<>v^<^<>^>><^v<^^><v>v>><<^<^^<vv<vv><<^v^v><v^>^vv>v>>^v<<>>>^>>>^^>><v^^v<^>>vv>>^>>><<<^<<<^>^>v>^>v>^><<>><>^>^>^<v>^v<>v<<<^v>v^v>v>v^^v<^v<^>>v^v>^>v^^v<<^^<v^v^<<^<v^^^>v^v<v<><vv<vv^>>^<^v^vv>vv><>>><<v<vvvv<>^>><>^^<v>>^>v^<v<v^^vv><<><v>^v<^>>v<>^<<^v>>^v><<>^>>v<>^^v<<v<>>v^v>>^^^^>v^<<^v>>>>v<><>vvvv<>v><^<v>v>^^vv<<<<>>>v^><>^^^><v^>^^><^><<^^<^^v><v<<v<^>>>v^<^^^>vvv^<^>^^^>^>>^v>>^<<v>^vvv<<v^><^v>>><><vv<v>v^><<>^v<>v<^v<<><v>^<<v<<<>^vvv>>>^>^v^v^<v<^<^vv^>>>^<^^<>>v><<<<^>v>^v<v^v<^>v<>>>^>^vvv<v<<^^^vv^vv>>>^^<>v<<><v>^<v><^v^v>>^^><^<>v^>>vv><<<^v<^>v^^^vv>^v><<v^<<>vv<^v<^<>^^<<^^^<v^^>v>v>^^^><>v^>>v<<<v>>v^^vv^<<^<<v<v^^^v^>><vv^<>v>>v^^<>^<^>><v><>>vv>v><v<>^vvv><<<>^v<<^^v><>^<>vvv^>^v>^<v^<><<>v>v>v>v<^><v<>>^<>^<<<><v<<v<v<^>^^^v^v><>v>^v><<vvv<<^>v<vvv^><>>v^^<v><v<<<<<^<^<>><<<<^vv<^^>v>vvvv<<^v><^v^<v<vv^<v^^<>v><^<vv>><v<><vvv^^><vvvv<^v<<<><^^v^v^>^>v>>v<v<<>v^<>>>v^<vv<<v<^^v<^v>vv>>>vv>>>v<<>^<<<^v^v>><vvv^<
|
||||||
|
vv<><<>^<>>>^<^<v^<v<^<>>vv>>v^><<>v>^<v><>v<>^v<<>>v><v>><v^^^<^<v<<<>^v<><<^^<vvv^>>>>v^<<<^><<v><>v<^^>v<<^v^^^^<<^vv^>>vv<<<^^<^^v^>v>v<^<v^v^><>^<<v>^v>v^<v>^<v<v^^<<>v^>v^v><<v^^v><<>vv><v<>v^>^vv^><<^vv^v<<<^>v<>v<><><<v^v<^v^v^>>v>v^^<^^<>>>vv<v<><>><>>^v^><<^^^<<<vv><<>^<<<><<<vv^>vv^vv^vv>^v<<v<^><^^vv>^v^<<v>>>v<<vv><vv<v^<vvv>vv>>>>>^v>>^>^><^>v><v^v^^^^<><v^>v<vvv^^<vv<><><>^<><v><^<<v<<v><v<>><<>v^v<><^<vv^v><<^v^<<<>>^>><>v>^><^>v<^<><^vv<>^<<><v<vv><>>>>^^v<>v<^v^v><^<^^^^<^<^<>^v>v^<^<<^v><>>^>>vv>>^>v^v<>^v^<<vv>vv><^v>><>^^>>v^^^<><>^^^^^^vv^^>>>v^><^^^v>^v<^v^v<^^>>>v^>^<<v<v^v^>^^^<><><v>^vv<vvv^<v<<^^<^^><v<<vvv^^<<v^^v>^^^v<<^<v<v>v^v<<vvv^v<^<^<>^v<<<vv^>v<^>^^^>><^v^v^<>^^^><>^^v<>vv^<v^<^v<^><v>v>>^><>v<<<>^v>><<^>>v^<^>><v>^>^^^<v^^>^v<^^>^vv<^^v><>><<><><<v>>v<v^<^^v>v^<vv<<<>^v^vv><<<^<<>v>v^^>>v>^^^^^<v^>^>>>><>>^v>v^^>><^<<v^<v<^v^v<>^<v<<>^>vvv>v<<>vv<v^>v<v<v^v^v^vv<vv^^vvv<v>^<>^>^<^<v><><>^>^>v<<v>^vvv>^^^><^>v><<>^^<^vvvv^^<v^v><<vvvv^^<v>><>v>><<^vv
|
||||||
|
v><^vv^<<>v^v>>v>><v<>^vvv^v>>^v<^<^<vv<<<>><>^v>><>v<v^<>v^v<>v>><>v>^vv<^<^v^v>^^^^vv<^>^>><>v>^^vvv^<^^>^v^<v^^<<><^v>vvvv^^v<>v>v^>v>^<vvvv>^vv>^<v^<>v^<v<^<><<>><v>v>>>v^>><<^>^v^>>>^<>><>v<<v<v<<>>v><^v>v^vv<<><^<^v><>vvv>>>>>v><<v><^<><^>v^>^^>vv^v^>>>^v>^<v<>vv><^v><^>^<^><<vvvvv>>><^>^<<><^v<<>^<<v>vvvv<v>^<><v<^>>^^<><<v^<>>>^v><v^<<>^v^>>vvvv^<v<><^>>>>^^<<>^v>v^<v>^vv<>^^v^>^<v^>^<<v^<>><^<^v<<>>v><^v^>v>^>>v^<v^<^<^>v^<v>v<v<v>vv<v<vv>><v>v<<>v<^^><vv^^><<^><<<<><v><^vvv>>vv>^^vvv<<v^^<v^>><vv>v>^v><>^>>v^>>v^^v>><^^vv>vvv<>>>^^>vv^vv>v>v^>>^^<<<>^>v>v>>v^>><>>>^^>>v>^>^v<<><<<v><>vv<v^<<>>v<^v>v<<>v^vv^v^^^^<<<<<<<<^^>^>^v^v^^<vv<>^>v<^v^><<v<>><^<>^<<>^v^^v<<<>vvv<>v><vv<^^^v^vvv^vv<v><^v>>^vv>vv^v^>vv<^v^vv>^<<<vv^v<><v><<^>><><^>>v^><<>v><^^v<vv<^vvv><v<><>>><<v^^v^><<vvv^>v<^v>^^<^^v<>vv><><>^><v^v^^^>v>v>>^vv<<^v^^vv>><^^<^><^>>^^>^><^<^^>v>vvv><>^<>^<>v^<<^<^<^^v^<>v^^>v^>>>^<^vvv>>^^<v^^>^<>>v>><v<v>^^^^^^^><v<v^^<>v^>>^>v^>vv>^<>^<vvv><<v<<>>>v^<>vv^v^<^<<^v<<><v<
|
||||||
|
vv>^<>><>>^v<^>v>v^>v^><v^>>v^>^<^^<>>^vv>>>><vv<^v>^<^<<^<vv<<^<<<>>><<v<v^v^^<^>vvv<<>^v>^^^v><vv>vv<v<v>^v^vv<<v>^<<<<^>^<<v<v>^>>>^vvv^>^v<v<v^vvv<^v<v^^v<v^vvv<>^v<v>v<vv^<><<<>^>v<^^v<>v^<<><<>><^><^<^^>>>v><vvvv<^^v^>^^<v>><<>^v>v><<v><<>^^^v^>vvv^^<><>>^v^>><<>^^>><^^<v^^<<>^<^v^^><>vvv<>><v>v<><v>>v>^><v^><>^<<v>v<vv>>v<<>>v<>>><>>>>v<^^<^^v>v><<v>>^><vvv>>>>^^<<<^^<v>>^v^^<<>^<>><<^^>>vv<><^<>v^^<<^^>^^<<^^v^>><<v>>vv><^v^^<<^<<<>^v<^<^><><^^v<^vv>^^>^>^><<><<v<<^^>>^^v^<^<>>v>v<^<^>v^>v<^><<>^<>vv>^^>^><<>>^^>v^<^>v<<>vv^<<v>v^<<><><<^><v^^<v<>vvv><^^^^^>v<<<<><v<<vv>>v<<^v>^vvv^^<vv^>^^^v<<vvv><^vv^^vv<><^<<^>>vv<<<^^>>^^<^<^<>>vv>^>>^^<<<^v^<^>^>><<<v><^<^<>>><v^^v>^vv><<v^>v^>^vv^<><<>v<vvv<^<^^^<^v>v<^>^<^^^<<v^^v>v<>>^>^><v^v>>v><^vv<^>^>v<v<^<vv<^v<^>^>^^>^<v^>><<^vv<v<>^v^>v<<^v>v<^^<>v<>v>>v<v^^v^<<^v>vvv>^><^>^>^v<^<^^^>^>^><<<^^<>v<><^vv^^>>v<^vv^^>>>>^<^<v<^^v^><vv>>^v>v>><<<>^vv^^v<v>><<^>v>v^<^^v^vvv<><<<<<>>vvv<<>^v<>>>vvv<^^^>>^vv>^^<v^>^<v^<>^>>><>><^><^<v<^v
|
||||||
|
<v<v>>>><<>>^^><><>>^^v^vv>^>^>^^<<>><v^v>v^^v>^><<^<^v>v<>^>^<<>vvv<v<>>v^<^<vvv^<<>vv>>v<v>v^>^<>vv<^<><>v>^>^^v><^^><<<v<v^<><^<^^v^<vv^<v>v^<v>>^<v^<^<v<v^<<>>v^v><<^<<>^<>>vvv<><v<>^<><<vv^>>>^v<<>v>^<<<<<vvv^>>>^>^<>v<>>^^v>^<^<><<<v<v<<^><^v<<^>v^^vvv<<vv<^>vvv<<vv<>>><vv><<v^^>v>^vv<<>v<v>>^<^^^>^v^^>>>^vvv<>^v<<><>vvv><^^>>v>^<^>v^<v<^^^v><v>><^>>><^v><^<>^v><^<>>v><>v^^v><v^>v^v><>vv><<v>vv^v^vv^vv<^vvvv<v>^>^>v^<^<vvv<v<>^<>^^v>vv>^<><<v^<v^<v>^^^v>>v<^>^v^<^v^<^v>^v^v^v^^><v<>vv><<<vv>v^>>^v^<v^<<>>>><<>^<<vv^v<v>>>vvv>>><vv^>>v><^<^<^v><v<vv^<>^^<><^<><<v^v<vvvvv^<vv<vv>v^>v><v^^^^v^<^^^vv<^<<>v>v^><^v<^<<>vv^<>>>^<<v<vv>>^^<vv^v^><v^^vvvv>vv^v<^<^^<<<<^^^><>>^vv^<^>>v^^<v<^<^<<>^v><<<<vvv^^v>^><^v<<v^<>>>>v^v^v>v>^^^><<v><v><^>^^^^v<^^v>^>^v^^^>v^<<<vvv<v>^>vv^>v^<<v^^^><v^v<>^^<v^^^><><^<<<^^v^^>v^<v^><v>>><v>^>^^v>v^v^<<v^vv^><><>^^>>vv^<>^>>v^><>v<vv>^^<^<<^<<<^^<vv^^<^<>^^<vv>^v><<^<>vvv^v<^^<>v>v<v^v<>>^<^>^v>v>v<<<v^v<>v<<^>vvv^>v^v>^>^<>v<<^^<>^>v^vv><v^<v^<v>v<^<>
|
||||||
|
<v<^<><>vv<<>>^v^v<v^>^v^^<vvv^>>v^^>><v^><<^>vvv<<<>><^>v<>^<vvv>^v<^v<vv^>^^v<<vvvv>^<>v^vvv<<^v^^<<^<>v^<>^>v<^^^v<^^>^>v><<>^<<^^><<v^<^^^<^<>>^^^v<<>>v^^<<vv<<>v^<><^v^^v>^><v>>v^^vv^^>^^^>^<^v<<<v^^>>v^><^vv<v<^^^>><v^vv<^v>>v^vv^v><><>>>v><vv<><vv^>>v^<vv^<^>>>^v<<^<<>>v>v<^^<<>^>><^^^<vvv<><^<<^<>v^>>vv<v>v<<<><vv<>>vv>v^^<vv><v><vv><^>>>^<>>^<^>^^<>>v<^<vv<v<<v<<>v>><^>^^vv>^v<<^v^^v^>^><^^>v>^^<^v^<>^><<><>^>>><<^v><v^^>^^<v^<<<vv><><>>vv>^<vv^v<<v>v><vv^^vv^^v><>>v>v<>>^^><^<<><v<^^>v>^>^v<v>^^^^<>^>^>^><>vv<^vvv>^<<>v^v>vv>^>><<<v^<^>^^<>^<v>vv<^<^>>>><vv>v^>><v><v>^^>v<<^^vvv>>>v^^<^^>v<v>>v<<^v<>^v^>>v>^<<>v>v^v>v>>>^v^>^^v<^v<^<<^<>>>><><v^vv>^><^>vv^>>>^^vv^>^v<v<<<^<<>v^><^<v>^^>>>><<><v>>>>v^^>v^<vv^>>^>v<<<><^^>v<^<v^^v><^>>>^<v>v<><>>^<<<<^>>v^v<>^>>^>^<^^^^^<v<<<<^<^>v<>v<<^v^<<^^><>^>^^>>^><v>v<^vv><>v><>>^v^<>vvvv<v^<v<><^v^v<v<vv><><vvvv^^<>>>v<>><<v<^<v^<<<>v<>^><>v<><<<><^<>><vvv>v^>^v<<<<^<>>>>v^v<^<^^^^>^^v><<>vvv^>>v>^>>v^^v<vv^><>^^v>v<vv^^v<^v<<v>^vvv^^v^
|
||||||
|
<<^<vv>^^>v^^>^vv<^<<vv^><<^><<>v>v>>v><>><^>>v<v>v>v^>><^>v>^^><^>^<><^<v^<<<^<<^<><<>^v><<^^<^<v<>v<^<^v^^v^>v<>v><v>>>^^vv^><v>v>v^<v^v<^^><^^^>^>^^>^>>>v<<^>vv<><v<<<^v<<<>^v><v^vv>v^vv^^v^<<<<<>><>><>^>>v<v^<^><^<vv<v<^<><<v<v^v<^^^>><><>^v><^^v>^<v>vv<^v^><v<^v<><^v^^>>>>>^^<>^^^^><<vvv^^^<v<<v<<<<<^<<^<v^<<<<v^>vvv<>><<^^v>>v^v>>v><>><^v^vvvvv>^<vv><>>^v^v>>v>><<><v^^v<<^<<^^>^>^<<<<v<vv<v^<v>^^>^^v^<v^v^<><^>>^<><<>v<<<^>v<<<v>^^><><<v>v^v^<^^v<^>v^<^v><^^v><>^<>v^^<v<^>>^vv<>^<v^><^vvv^^>^><>^>^vv^v>v><v^<v><><>^<v<v>^vvv><>>^^^<<<^>vvv>vv<v>^vv<<>>>^^<vv>>^><>><v^<>^^vvv^vv><v^<^v<v^^<^><^^<<>>v>^^<^^^>^>v><v^v<<<<>v<><<<<<^^>^<v<>vv^>>><v>>vvvv>^>>v^>>><>v>^><^><<>v^>>>>v>^v^<<>>^v<^>v^^^>v><^><^^vvvv>^<<><>v<v><>><v^v^v<><<v<>v^>>^^v<v<<vv>>>>v^v>^v>v<><vvv>^^<v^v><<vvv<>v^<^v<>^>><>vv<>>^v^<^v<v<^>^vv<vvv<>v^<<<>^^^v^v><v><vv<v^^^^vv>>^<vv^v>vv>v^><<><^^^<v^<v>>^^^><<<<<>^^><<<><><v>><v>>v<^v^<v^vv<<^<<<>^<^><>><^>v^v<v<^^<<<<<>^<>>>>^vv^<>v<><<^^><<>^<>^><>>vvv^>vv<>><>><
|
||||||
|
>vv<^^^vvvvv<v>><>v><<v^><<>v<>^>>v>^>><^<^<^v<vv<^<<^^v>>^<>>^^>><^<^<<v>v><<<vvv^vvv^^>^><<<v>>^>^v^vv^<vv^<^>^^^^v^>^>^>><>>>v>v^>>^<^v<v<<<<v^v^^^v<<>v>>v^^^v^>^v>>v^<><^v<^<<<^>vv^^<<>^v>^v<<^<^^^<<>^<>^vv><>><>>^<v^v<>>^v<v^>^<<<^<<<><>><>v>^<<v<vv^v<><v^^^><<^>><>>v<<v<^^^^>>v>^>^v<<>>vvv<^<>>>^v^v<^>^^^^^^v<v>>>>v^^v^<><>^>^<^^vv^>v<>v^>vv<^^><<^<>vv>^v>>><<^<^^><>vv<<>>><<v<<<<><>^>>^<<>^<v>^<v<^^>^^>>>>^<v^<v<^<<v<<>v<^<vv<<<<^^>^<<^^<<v^v>v^^>^v^>>^v>>v>>><>vv<v^^v>^v<^vv^^^<<^v><>^v><<><vv^>^^^>>>v<^<^><<^^<<^^><<v<<><^v>^v^<^<^<>^^<^v^>v>>vv<<<v<<>v<>^<^v<>^v<v<<>>>v<v>^>^v^>>v<><^^^<^>><^>>^<^^^^<>v^^><^^><v^^v><v^^v^v<v<<^>><<<<v^<v<<v>>>^><<vvv<<^v^v<<<<<<<^>v<<vv^^<<^^^vv<vv^>^<><><><^<<<<<vv>v^v<<<^<vv^vv>^<v<^<^^^^>^<>^>v<^>^^^<^^><>^<<v<>^>^^v>v>>>^<^>v^>v<<vvv<>^^<^vvvv>v^><>^^><^^<>><^<v<^>>v>vv>>^><^^><vv^>^>^<<v^v><v>^^v>><>^<v<^<<>^<^<<<<>^v^v<v>^<^^<v<<<vv>v^<v<><^v<<^^>>v<>v>>v>>v<<>^v^^^vv^v<^^^>^<<>v^^v^^<v>>>>v<v>^vv<<<v^>><^>>^v^>vv<<>>><<v<>v<v<<v>><><<<
|
||||||
|
<vvv><v<<<^<v<>>><<>>v^^<v^vv><<>v<^<><<<>><^v^<v<<><<<>>vv<^^<>^<^^>^^<v<<^v<>^^v^><^>v<><^^^^<<<><<<^>^^>^v>^<><v<v>v^<>>>^v<<>v><vv><^><<>v^v>v^v^vv<^>^<vv^v^vv>^<<<<<^v><^^^v<v^^vvvv>^><>>>vvv^><><>>^>^>>^v>>vv<v^^>v><<<>>^<>>>vvv<><<>>^<<><>>v^<>^>v^v<v>v<<>v>v^>^v^>^><^^>^><^>v>^<<<>v<^><>^<>><^<<>^^^v^<^vv>>><<>^<^vv<vv^>v>^^><><vvv<^>^>>v>vv<<v<v>vv<vv<v^>^vv^>vvvvv>v<v>^<>^v>>>^^>v<<<vv<vv>^<>><^vv^<<>>vv>v^<^v^>><vv>v<v>v><>^^^^^v^>><^v<<v<v>vv<v^^<vv^>^^^>><><<v>>>v<>>vv<<<v<^><<<>^<^<^^<>>^vvv<<<v>>vv<><>>^>vv>^v><v^>><<^^>><<v>^<^v<<<>v^<^<<^^<<>>^^<<<^<vv>><^>vv><^>vv>v>^v<<^<^v>^<>>>^^^<v^<>v>vvv^>><<^^>^v<^vv>^vv<>^<v<><v<>>>>^><<<<^v^>v<^v^^vv^vv>vv>^>^>^<vv>>^^v^<<<>><>v<vv<vv^<><v^vv<^<v^^^v^vv^v<><^<<<>vv^>^<^v^v>><^><^^^>vv><^^v<v^<<<v^<^^^^^<<^>^^<v><<v^<v<^>>>^v>>v>^<^^>>v<>^vvv^<^<<<v>>v^>>><<v><^>>vv>^v>><><^>vvv>^v>^>>>^^^vv<<^vvv^^v>^^v^<<>v>v>>^^v^>v>><<v>^^^^v<^^<<<>><v^<><<<><v><^v^>^>v^>>>v>^^>>v<v>^^v>^vv^<<<>^<<^v<^>>>^v^v^>v<^^^>v><<^v<<<^v^^<^v^^<<<v>
|
||||||
|
^<<>^><^<<>vv><>v<>vv><>>vvv^>>^<><^^>v<^>^^<<^^<v<<v<v^>v<^^v<^v<v<>vv^^v^>v^>v^>>v>>><<<^<v^^v>^<v^v>^vv^v<><v><v>v>^>>>^>><v^<>v^^^^>v<<v<>^v>v<<>>>><v<<>vv>v><<><v<>^v>v<><vvv^<>><<>^<<v^>^<><v<<<<<^v^>v<v^<vv^><<>^<<vv<>vv>>>v^vvv>>^v<^^<v>v>v><^>><^>>v><v<^^^<v^>v^<v>vv<vv^v^^v<^^^>>><>vv><vvv^><><^v>><^>^vv>>^^v<>^<v<<<^>v^<>^><^>v>><>>><>v<^<v^>>v^<^^>v^v<v<>^^>>v^><>^<vvvvv<^>v<v>>><<^v>v><<<^v^><<^v^^v<>v>^v<<v<<^v^^^>>^<^>><<<v<v^>v<^<<v><>^>>>^<^v<^<<<>^^^<v<vvv<>>>>>v^><^<^<<<^><vv>^vv<>v^>vv^<^><<>><<><>><^>^<>>>v>>>^^>>v<v>v>v>vv^v>^v>^^<>^<^^vv^^v<>vv^><<>v><<^vv^^^><^vv^^<^^vv<<>^>^v<^v><vv>>v^<<>><^<v>>v^<<<<<>>^^vv<^v<>^>>><>>>>^vvv<>><^^>^v^^^v^v^^^v><>^v<<^><^>^>>v<^>vv<>vv^^<^vv^><^^vv>^v<^^vv>v><><<<>^v>^v>v^^v>>v<vv^<v^>>v><<v<^^^v<<>v>>v<v<<<>>v<v<<>>vv<v<<<^>>v>^v>><>>>^^^^<><>>>v<^<<vv>><>^v<vv>^v^^v<><^^v^^<<>^v><>^<v<^^v>v>^^><v<<<^vvv<vv^><^>^>vv^>^^^<<<>><<v>>v><<<<vv>^vv><<^^v>>vv>v>vv<vv<^^>^<>v>v<v<^>>^^v>^v<<^<><<^>^^^<<<^^>vv<v<^>v<<v>><<^v><>><<<<^>
|
||||||
|
^^<<^^vv^^v>>^>>><v<>v<vv<^><^v^^^^>v^><v^^v^v^^<^^><<^vvv>v^v>v^^^^<><v^<vv^<<><v<<<^><><vv>^>vv>v<>vv<>>^^<<><^^^v<^<^v><<^^<v<v<v<v<v<><<<<v<^>^<^>^^<<v^^^>>vv^^^v<v<<>><^<>^^vv<>v>>^>>^v^><>>^<>><v><>v^^<v^^^<^v<v><^><>^^<v^<<<<^vv<vv<<>>v<>^><vv^vvvv^v^>^vvvv<^<^^<v>^v^>vvvv><^^<vv^>^>v>^^<v^v<>v^v^^^>>>v<<^^^<>^^<<v<^v<^>^>^vv>v<vv^^<^<v><^v<<^vvv<>^>v<v^^vvv><vv^^^><><^<v^<vvv^<v<>vv>>^v>^vv>>v^<vv<v<vvv<v^<v^<<v<>>^<>^v>^vv^v>vv<^^^<v><<^><<><v^>^<<><v>>>>v^^>>><^^vv<>v<v<^>^<v>v^^v^vv^<^^>^>^^v>>v^<^<vvv^>^^<^vv^><v>v^>v^^v<v^v^^<^<^v>^vvv<^<^>vv>v<<v<>v>>><>>^>^^v>v<^>^<^>^^>^<vv>^<<^^^>>><>^<>v><^v>vv><><>>v<^vv<<<v<v>v^v^^v^vvv<>^v>v<^v>^^v<>>v>>^<^v<>v<^v<<v>>>vv>vvv<v^v<vv>^vv^v^^vv><<^v^vv>>^>><>vv>^v>^^><<^>v<<v^><<><><<v^^vv<>v<vv^><><<<v>^v><>vvv>><^<^v>v>v^<><^vvv<<v>^><>v>^v^<<>><^v>vv>><>v<vv^>v^^>v><^><>^<><v<>vvv>^v<v^v^<>>^v^v>v>><v<v^<^<v<<<<v<<^v><>vv^><<<>v^>vv^>><<<^<v^^v<><><<<^><<<^^^<>^>^<vvv^v^>^^><^^>^>v^v><v><^v<^^<^<<>^<^v<<>v^><^^>>^^v<^<v<>^><>>^>^^
|
||||||
|
>^>v<<v>v^^v<><<>v^v>^^^^>v<<v>>v>>><v<<v>><^^>^^v>><<v<<^^<v>^<<<v>^v<<v<v>v^>v>v^^^<^>v>>>v^^>><v^vvvvv<^vv>v^<^<^>>>v^v^>^>^>^^><^>^^^<>^v<^<^<vvv<>vvv<>>>^v<^^>^><<>v<>>^v<v<<<^>v<^v<^>^v<><^^^v>><v<<vvv>>v>^><<<>^><<>^>^^<v>>^^v<vv<>><<^<>v<vv<^<v^v^>vv<vv>v><>v^^^^<v><>^v^^vv><^^v><^<><<<^^<^vv<v<vv^>^^>^<<<v>^^^v>>>^^v^>>v^>v><><>^><^v>v^<<<^^^^<v>v<<>><<>v><><^v^^^<v<v^v^<<^<^v>v>v>^<<^>><><>vv<^v>v<>><><>><>v^vvv>^<^v<><v^v<<^<^>>v>vvv<v<>^<v><v^><^<^<<<<^<<^^^>><v><^>^v^^>v<>v^^<<^<>>v><>>^^^<>^<^^>^v^>v>^v^>><^><><v<>>v^^vvvv<vv^<v^^v^^^^v>^v>^<<<<>>>v^>^vv^^^^>v^>><>>^^>^v^v<<<v>>>v^><^><><>>v>^vv<<>v^>>>v<v><>v><v^^>>>^<<>><<<>><^v^v><v^v<<^^^>>v^<<<<<v<<^<<^<^<^<>^<^v^v><<><><v^<^<>v^^<<<^<>v><>v^v>v<^v^vv<v^<<>^v<<^<^>vv><>^<><>^>vv>^^<^v^>v><vv>vv<vv><>>>>^v<>v>>>>><vv<<v<v<vvv<>>vv>><><<>^^vv^vvvvv><<>v><<^<^<^>v<vv>><<^<<^<^^<^v<<^v^vv^^>v^^v>v>v>^v^^>vvv<>^v<vv^v^<vv^>^^vv<<^>>><<^<>>><^>>vv>^v^<<^v<^<v>><^<^v><>v^v>^<<<>v^v>><^>v<><v^v>>^^><v>>><^>^>>><v><<>^^>>^<<<
|
||||||
|
vvv>>^vv<>v<^<<><>>^><vvvv>v<><>^<<vv^v^^>>v^>>vv<^>vv<<^>>>v<v>^v^^>><v^^<^^^><^<vv^>^v^>v^v><vv>v^><^v^>>^<<>><v<<><>>><^^v<<>><<>v^^>><<v<><^>^v^^<^v^^v>vv^v<>><<^^<vvv^<^>^vv>^<<<^><^^^v<^>^<<<v^>vv^<>^<<<<<v<^<<^<v><>^<^<<<><^>^<^^^^>vv<>v^v>v<>^v^<<><v^v^<>>v<^>^v^v^vv>v><>^v<<^>v^v<<<>^<>v>v><>>^<><v>v<<v<v^^>v<<v<><^v<><<v<v<v<>^v<^vv<^>>vv>>^v><<>>^v><<vv^v^<<><^^>^v>^^<vv<<v>v><>v<^v>><<v<v>>vvv<>v>><v>>^v>^^^vv<<<<^v^<<v^<<<>>vv><^<<^<<<><>><^^>^^>>^<>^>>>^>^<>v>v^>><v><<<>><>>v<<<vvv>^>^<>^<<>^^>vv>>^<<>^<>>>>><>>>v<><v^<v><<^>v<<<v><<<^^v^vvvvvv>^^<v^><><<<<v<vvv^^^^v^^<v<><v<^^v^^<^^v>>^^v^v^^<v<v<vv>><>>^^^^^>>^>^^^v>>>v^>^<<^vv>^^<<^^^v<^>^^<><v^<<<>^<><<v^^>^^>>>>>v>^^v^^^^<><<^v^v>^v<^vvv>><^v>v>vvvv<^v<v><v^^<<<<<^v<<vv<v>^<^><<vv<>^<^vv^^v>>>>v^^v<>vv>v>v<<v<v^<vvv^^><v<<vv<<v<>>><<v<v^<^vv>>><><>v><v^<^v^^<^>>^^v^^>^<vv^vv><v<<v^v>v<^^>^v>v>^v<<^^vv><^>v<vv^^<<v^^^<>v>^<<>^v>>v<^^^v<v>>>>>vv<<>^v>v^<>^><><v<<vv<vvv><^^>>^^<>^>^<>>>vv<<<^^<<>vv><^<v<v<<^>^<^>><>v>^<
|
||||||
|
<>v>^^^^vv^^<>>^<^>>^^><<^<^v>^^^><v^><^^v^>v<<<^v<>v<v>><^>^v>v^>><<v<^<^v<v>v><>^<><>^>v>vvv>vv<<>>^<vvvv^<><><v^<<v<^>>v>>v^<<><<^^>v<vv^<^<<^<v^<<^^v<><vvv><>><<<<<>^>>v^>v>vv^^<v<><>v^<^>>^^^<^>>^<<<<<vvv^>><><<<^v>>^><v>><v^<^<<<vv<<>v^<<^^v<>^<^^^<^^<><>>>>>>^v^^<v^>v><>v^^^v><>^<>v>^^v>vv>^<vvv^v<vv>^>vv<><^>>^<^vv^>>^^<^^v^><^^<>>>^<^>v^vv^v><><<<><<v>>vv<^vvv><vvv^>>^^v<>vv^^v^<>v^vvv^vvv^^v^>^<><>v<v^<^v^<<<^^<^^^><<v<<>^v<>>v<><^<><<^^<<v^^<vvv>>^>^v<>v^<<^>^^>><vv>>vvv^>v<^><^v>^v^v^v<>v<><v<<<^vv><>v^><^^>v^>v^>^><>><^><<vvv><v^^^^>>v^^vv<^^<>^<^>vvv<>><>^^>><vv>vv<v><<v>v<v^<v>^>^<^vv><<><v<<>vvv^<>^^>>>>^v^v>>^v<v<<^^<v^^^<<<^>^vv<>^<>><<<>vv<vv<<<>v>^>v>v>v>^<^><>>>>><>^>^<>vv>v<v^<>>^<v>>vv>>^>>>^><>>>vv^>v^^v<<<>v>^>>^>><><^<<^^<<vv<<^<<^v<^<<^><>vvv>^<vvv^><^v^v><>>vv<vv^^^vv>^<vv>^>vvvvvvvv>^v^^^>^<vv<vv>>^^<>^v<<>v<>^v<<v^>vvv^^<vv<<<^v^>^vv>><<^<^v^>vv<>>>>^<<>><<<<<<v><v<<^>v>^>v>vv<<vvv<><<^<v<<<v><^><<>^v>>^>vv^v^<vv^<>^^><v^v<<vv^>vv^v>>v><^vv^^><v<^v^<vv^<^^
|
||||||
|
^>v^v<<<><^v^vvvv^>><>^v<>>v<^<<^v^vvvv>^><^><v<><v^>^v^v^<>v<v><>v<v^vv>>^^<<^^>vv^><v><vv<<><^v<<<vvv<<^vv<^^<v<^<v>>v^>><>^><<^>^v^><^>^^<>v><>^<<v^<<^^v^>><v^vv<^<v>vv^v<<><>>v^^<<^v<><^^v>>vv>v<<><<^^>><>>v>v><v<^<^<>^<>v<<><><v>^>>^^^>><^v^>v<>^v^>^v^<<^<v>v<>^><<v^<<vvv<^>>><vv<>^><^>^<<<<^<v<vv>v>>v<^v><v<<^v<>>v^>v^<<>v>^<<<^><><^^vvv><^v^v<><<^<>^^>>v<<^<^^<^^^vvv>^vvv<<v<><^<<<>^^^><<v><<^^><^^^v^v^><^^^<<v>^v<vv<<^<<v^<>v^<>v>^<>v<v^^v><^>^<^<v^^>><^<v^<>^<>v>>v^>v^<>>^v>><<^<^>^<^<^v^>>^<v<<v>>>^v>v<^^<v<>^>><>^><<>^>^>>v<^<vv^^^<>vv^v>^^^^v<v^v>^>^vvv>>^^v<v<v>>>>^>^^v><<^v>><v><^>^<^>^>^><vv>v<<<<v><v<>>^vvv><<v<^v>>^>^>v><v>^<>><v<v<>^^>^vvvv>^^<^><<>v^<^v^v>^>>^v^<><><<<<^^>^>^>>><><^<v^>^v>>v>v<<>^^v>v<<>^v>^>>v<^^<^<<v>v><>^>^v^<vv<^<<<^^^v>^><>>>>^v>v^^v>^<><^v>vv<^v^<>>^<<<^><^>>vv^vvvv<^<<^>>><v^^^^^<vv^<><^^>^>v>><<<<v^^^v>v>v>><><<v<>>^^><<>v^<><^v<^<>^><<<^<<<>^>^^<>vv><>v>v>>vv^v><<<vvv>>v>>^>vvv<^<^>>v^<<vv>^^<v>^>^^>v>>>v^<v^^v^<<<v<>v^vv>><>v<^<^^<^>>^<>vv>
|
||||||
|
v^<^v^<vv><<v^<^<v><^v<vv<v^vv^^v>><<><v>>^<<v<^>^vv><^>>>v^>v<v^<<v>v<<^>v^v<^><v<>vv^>>>^<vvv>>v<^><^>^^>>v^^v>vv><<<<>v>v>v><><^<<^vv><^v>v<<<v<^v^^<>^<v<^<v^<>>>^^<^v>v^>>v^vvv^<>^<v><><<^<vvv<>^v>>^vv^v><>v<>v<<vv>v^<>><^^<v^^>><>><>^><v<>^v<<><>v^<>><<^v><^>^>>^^^v^<^<>^v><v>^<v<^>vvv<^>^<v^>><><^<^^^><^^v>><v><^<<><v^>^<<^>^>>^^<^><<^<<><v^v>v<<v>^<>>v>>><>><>vv><>><^^^v<^>v<^v>v^v>><>v^<v^v^v<^>^<^<<><v^^vv<<v<^<^<<v>^<>v>^<^vvv<^>^^>^<^^^v^v<v^<>^>v>vv><><<><>v^vv<><>><v<v>v<^vv^v^v<^v<v>><>^>>v^>>vv><>>vv^v^^<vv<v<<^><^^^>^><<<<><<v^>><>v^v<>>vv>>>v^>v<><><>^<v^v<>v<<v>v><>><^<><^^<^>^<^<>^<<<v>vv>v^^<^vv><v^^^>vvv>^v>^<v^<<>>^^<>><<<><^vv^v^v<<^v>vvv<^>><vv^>>><<v>>v>>vvvv>^v<>v>v^>v>v^<^>^><^>^^>^<<v>>>v<v<>^><^>>>><v<^v<^^<>^>>^v^v^>^^>^>v>>^^<>><>v^>>><<><^<<^^>v>v<^>^<v^v>v<>>><v>^>v^vv^vv>>^^><v>><>>>>v<>^^^^^>>vv<>>^^>^>>^^^>v>^vv<<v^<>v<<^<^vv<<v>^^vv<>vv>v^<>vv^^<<<v<^<<>v<^><<^<vv>^^><^v<<><>>>>v<v<^^v<>^v^>>v<^>>>>>>v<^>>^^v<>>>^>vv<vv^<>><>^^^<>v^^^v>><<^v>^^^v>^>
|
||||||
|
^v<<<^<>>>^^v>>^^<>^>vvv<<>>><>v^<>^v>^v><^^v^<^v>^^^v><<vv>vv<>>^>^^<>v<<<>^v<^>^^v>^^<v^v^<<>vv><^^v^v^>v<<><><v>v^>>>v><v<v^^>>vv^>^<vv>><<<^>^>vv^>v><>v^^>v<>><<^<<^v>vv<<^^^<^<^^^vv<v>>>><<>^^^^^><><<^>>v>^^<^vv^v^^><<^>>><^vvv^<^vv>v^<v>^^<<^>^^<><v>^><^v^<>v<v><><v^v>>v<><v^<<>>^vvv><^>v^<^^vv<>>>^<>v>v>^<^v^vvvv>^^<>v^<v>>^v<v><<^<>v^><^^><v><^>>v>v^vv<<v<>^^^<>><<^>^v<><v^^>^v><^>v^v>>^<<^^<<^>^><><>>><^<<v<<v<^^<^<>^vv<<^^<v^<^<vv^<v>>v<<>v^v^v>^<^<<v<>^^^v><v^vv>v^><<^^v^v>^v^v^<^<v<^<<>vv<<vv<>>^v><^v>><vv<<^v^v^vv>^v<^^v><<^^<v^^^<^<v<^v>^>^^v><><v<^<><<^<>^<<^^^vv<>^<>>>^^<v>^^^v>^vvvv>>><>^>^>vv><v^vv<v><^v^v>>>>>v<v>^<>v^^v>>>>v<<><vv<v^>^^^^<^><v>v<^><<>vv>^^vv<v^v^v>><>^^<>v>v>v><>^>^v>>>v>v^^<^>>^<v^<<>>>>v>^^^vv>v>vv<<<<><>vv>><>^v^<<^>^>>>v<><v>><vv<<v^<vv>^>vv<>vvv<v^>v^>v<^<vv><v<vv^><v<^>^<^^v<>vv>><v<^^<>>^><>v^v<><vvv<>v<>^^v<><v<>><v^^v<<>^>>>>v>>^>v^^^<v>v>><vv^>>v^<v><>v<^>><<v^^><vv^<^>><<^<v<v<v^^^v^^v>^^v<<v<>^^<<^>v><vv^<<><>^v>v^v^^>^<^<<><^<<v>>v>v^^v
|
||||||
|
<^vv<>>>>^>>><^<><<^^<<^vvv<^^v<<^<<>v>v<vv^<<<><^^^v>v^<>v^>>v^v<^<><^^^v<<vv^^>v><^<^<^^^<v>>>vv>vv<v^>vvv<<<^v><<<<^v<<>^v<>v>v<vv>^^><^>>v>>^vv^v^v^<<v<v^<vv^<v>v>v^<^v<^>^<^<vv^^<<<<^<>>>vvv<>>v^v^><v<>><<^^>^^^>^v<v<^<vv>v>>v<><^vvv>>v<^^v<>>^^^^vvv^^>>>^^<v<>><v<<^>>><^<><v<><<^v<<^<^v>><<>^<><^^v^^<^^^<><<<v><^v<<<>v<<<>>v^><><v>>>^^><^v<<><v>>><>>v<^^<^^v>>vv^><<^v>^>>v<^^vvv<^<>^^^^^^vv>><<v>v^^^<^<v<>v<>^<^<vv^<v><><>vv><vv>>v^v<v<vv^>^<<<>>>v>^^^v<v>^vvv>^^<>^v^<^^<<^^>vvvvvv<>><<v^^<><^<^^^<<^v^><>^^>v<v^v^<^vvv^>>^v^<>^>^><<^>vvv>^vvv<vv<>>^v>^>v>>^v>v<^>v<v<<><v>v^>>vv<<><><v^<>><^v^<<>vv^v>^<<^vv>v><<vvvvv<v^>v<^vv^^>v<><v<^>^<^v<v^^>>v^v^vv^^v>v<><<^v<v<<^v>>v<^>v<v<v>v>>^v^<v<>^v<>>v^<<v>><^^<^^^<>><<<<>v><v<^^<>>^^<><^^v^<^vv>v>^v^<>><>^^>vvv><v^>^<>v^<<vv><v<vv^><v<<<^v<^>v<^v><<^<>^<<v^<v><^<^<v>^<<v><v^^<>><>vv^v^^<<v<>vvv^^<><<v<vv<^^^^>^v>>vvvv>><^><<<<vvv><<<vvvvv>v<^^<<^^v^><<<^<^^^v>v<>^<vv>vvv>^v<>>^>^^v<v^<<v<^v>^<v><vv^<<^v>v><<^><>vv<vvv^v>>v^vv>>^><v<v><
|
||||||
|
v^^v<><>^<<vv<><v^v<>^<<vvvv>^v^vv^v^vvv^>v^<^<>v^>^>^v^^v^^v>>v<>^v<^^<>^^^v<><^<v^<^>>>^<><>>^v^^^>^v<^<<>v^<><^><v^v^vv^v<vv>>vv^^v^><<>v>^<<vv><>^^><vv^>^v>><^<>^<>^^^^v<>v><v><<v^v>v<><^v^v>>v>>vvv<v^<v<<><v<vv>vv<^<^^v><^<<>^^^<v>>><<v^^<<<<^v^>vv>v^>>^^<>^<<<^<>^>^^><<>v>^><>vv^vv^<v<v>^^^>>^>vv^<>v^>>^<>v>^^>v^<^><<<<>^^v^>v^>^<^>><^>v>^<v<^<>^<<^>>><><<<v<v>^v>^v<v<><v<<^>v<>^>>^^<>^>v<<<><<v<^^v^v^v>><<v<<<<>><>>^vv>^>>vv^vv<>^>^<v<v^>>^v<><<^v<v>^<^v>^v<^<v<v<v^<v<<>^vv><v<v^^<<>>^vv>v<<<^^^><>>v>>>>v<>^<<v^>^<<^^v>>v^>v<>^>^<v<<v><vv<v<v<>><<<>^<>>v<<><<^v^^<><>><vv^>v>^vvv>><>v<><^>^v><<>^^>>v<vv>^><><>^^v<v^<<^<<>><v^>v>>^>^>^>>^<<^vv<v<v<^vvv^v><^v>v<^<v^^^<>>>^<v^^vvv>^^^>><>^<v<v^vv<^v^<v<v><<>vv>^^^>v>><v>v^>><vv^<^>>>v<><>v>vv>>><v<><>v<^<^v>>>>^vv<^^vv<><v><<>>v<v<<^<<>>v<<<^v^>v^>^^^>v>v<><<><>^vv>v><<vv>v<^<v>v^><<>v>><><v<><>><^v>^^^>><v><v^v^<<>v^v<<<<^>^v>>>>v<<<>>v^>>^>v^<><>>vv<^^v<^v<<^v>v>>v^^^><^^^v>^<^<<>>>v^v>v<>vv^>>v^v^<v<v<>^>>^^<<><>>vv><<>^^^^>^vv>^
|
||||||
|
>v<v>><<<vvvvv^v^<v^^<v>>^><<<<v><>^^>v^<><><v<<<<^vv^^<<>>^><>v<^vvv<v<^^^<^v<>^^<><>v^v><v<<>vv>^v<v<^>>^>^><^v>v<^>><^>v>^^vvvvv^v^<>vv<vv<v^<^><v><<^v^^><<<><>^>vvv^><<vv^<vv>v<<>v^>>v><>v<^<<^^^<>v<^^><>v^^>^v>><v<>^<v><v<v^vv^v<v^<<<<<<>>><>v^vv^>^v<v>>v<vv>^v>^^>^>^vv><>>>^<^v^v>^^<>v>vvvvv>>>^>^<^v^<v<<v<>^><<^>^>^>v>>^v<v<>^<vv><vv>^v<^>v<>>^^v<^^>><>^><>^><^>^<^<><>^>^<^><^<>^>v>v<<><v<^v><^^v><<^<^^><^vv>><^vv<<^>>^<^^v>>v<v<^^^vv<>vv^^^^^<v<<^v><<v<^<><><^^^<>^>^v>v<><>v<<v<<^v><v>>^^<<<>>><>><vv<>v>^vv>>^<<>^v^<vv<>^v^>vv^<v>>v^v^v^v<<<^^v<<v><v>>><<>v^>^>>v><^v><<^^^v<v>^v<>^^^><<v>^>^^v<^v>><>^>^>v^<<^^^vv<>^><vv<^>^<v<v>>>>><<<^v>^vv^^><^>><^><<v^vvv>^<<<<v^v^<<^v^>v^<^<v>>^><>v<v<^^<vv<^<v<^^^<<v^>^v^^v>v<v^>>v><v^vv<^<><v<>^v^<><>v<>>>vv^v^><<v^<<vv>^><<^>^^><v>v<^<v>^<^v><v<v<v>vvvv<>>v>v^<^^<^><<v<^>^^^vv>^>vv>^<>>v^<<^>>^>vv^<><<vvv^^<^^^<<>v^^^v<><vv>>^>^>v<<vv^^^^v>vv^>^^>>>v<<^>><>v>v>>^>>v^vvv>>v<<><v<vv>^<^v<v<^vv>v<v<<vv<v<vv><^>^<><<^v<^<^^>>^^^<>><^<v>>v<>^
|
135
2024/day-15/solution-1.sh
Normal file
135
2024/day-15/solution-1.sh
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
MAP_FILE=input-map
|
||||||
|
DIRECTIONS_FILE=input-movements
|
||||||
|
MAP_WIDTH=$(( $( head -1 "$MAP_FILE" | wc -c ) -1 ))
|
||||||
|
#MAP_HEIGHT=$( < "$MAP_FILE" wc -l )
|
||||||
|
|
||||||
|
# Load map
|
||||||
|
read -r -a TEST_ARRAY <<< "$( < "$MAP_FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$MAP_FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' )"
|
||||||
|
printf "%s " "${MAP_ARRAY[@]}" | fold -w $(( MAP_WIDTH * 2 ))
|
||||||
|
printf "\n"
|
||||||
|
MAP_LEN=${#MAP_ARRAY[@]}
|
||||||
|
|
||||||
|
# Count boxes
|
||||||
|
BOX_COUNT=0
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} == "O" ]]
|
||||||
|
then
|
||||||
|
(( BOX_COUNT++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "Box count: %s\n" "$BOX_COUNT"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
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 ))
|
||||||
|
|
||||||
|
if [[ ${MAP_ARRAY[$NEXT_POSITION]} == "O" ]] # Box in front
|
||||||
|
then
|
||||||
|
END_POSITION=$(( NEXT_POSITION + DIRECTION_VALUE ))
|
||||||
|
while [[ ${MAP_ARRAY[$END_POSITION]} == "O" ]]
|
||||||
|
do
|
||||||
|
(( END_POSITION+=DIRECTION_VALUE ))
|
||||||
|
done
|
||||||
|
if [[ ${MAP_ARRAY[$END_POSITION]} == '#' ]]
|
||||||
|
then
|
||||||
|
printf "Next: %s End: %s Stacked boxes. No change.\n" "${MAP_ARRAY[$NEXT_POSITION]}" "${MAP_ARRAY[$END_POSITION]}"
|
||||||
|
: # Boxes are stacked up against wall
|
||||||
|
elif [[ ${MAP_ARRAY[$END_POSITION]} == "." ]]
|
||||||
|
then
|
||||||
|
printf "Next: %s End: %s Robot: %s Move boxes and robot\n" "${MAP_ARRAY[$NEXT_POSITION]}" "${MAP_ARRAY[$END_POSITION]}" "${MAP_ARRAY[$ROBOT_POSITION]}"
|
||||||
|
# Move the box
|
||||||
|
MAP_ARRAY[END_POSITION]=O
|
||||||
|
MAP_ARRAY[NEXT_POSITION]=.
|
||||||
|
# Move the robot
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=.
|
||||||
|
ROBOT_POSITION=$NEXT_POSITION
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=@
|
||||||
|
fi
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_POSITION]} == "#" ]] # Wall in front, do nothing
|
||||||
|
then
|
||||||
|
printf "Next: %s Skipping\n" "${MAP_ARRAY[$NEXT_POSITION]}"
|
||||||
|
:
|
||||||
|
elif [[ ${MAP_ARRAY[$NEXT_POSITION]} == "." ]] # Empty space, move forward
|
||||||
|
then
|
||||||
|
printf "Next: %s Move robot forward\n" "${MAP_ARRAY[$NEXT_POSITION]}"
|
||||||
|
# Move the robot
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=.
|
||||||
|
ROBOT_POSITION=$NEXT_POSITION
|
||||||
|
MAP_ARRAY[ROBOT_POSITION]=@
|
||||||
|
fi
|
||||||
|
(( MOVES++ ))
|
||||||
|
|
||||||
|
done <<< "$( < "$DIRECTIONS_FILE" paste -s -d "" | sed -E 's/(.)(.)/\1 \2 /g' | tr ' ' '\n' )"
|
||||||
|
printf "Moves: %s\n" "$MOVES"
|
||||||
|
|
||||||
|
printf "%s " "${MAP_ARRAY[@]}" | fold -w $(( MAP_WIDTH * 2 ))
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
# Calculate GPS values for boxes
|
||||||
|
SUM=0
|
||||||
|
BOX_COUNT=0
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} == "O" ]]
|
||||||
|
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"
|
||||||
|
|
||||||
|
# Compare and test if walls have moved
|
||||||
|
for (( i=0; i<MAP_LEN; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${TEST_ARRAY[i]} == "#" ]]
|
||||||
|
then
|
||||||
|
if [[ ${TEST_ARRAY[i]} != "${MAP_ARRAY[i]}" ]]
|
||||||
|
then
|
||||||
|
printf "Index %s Wall changed.\n" "$i"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
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"
|
10
2024/day-15/test-input-map
Normal file
10
2024/day-15/test-input-map
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
##########
|
||||||
|
#..O..O.O#
|
||||||
|
#......O.#
|
||||||
|
#.OO..O.O#
|
||||||
|
#..O@..O.#
|
||||||
|
#O#..O...#
|
||||||
|
#O..O..O.#
|
||||||
|
#.OO.O.OO#
|
||||||
|
#....O...#
|
||||||
|
##########
|
10
2024/day-15/test-input-movements
Normal file
10
2024/day-15/test-input-movements
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vv>^<v^>v>^vv^v>v<>v^v<v<^vv<<<^><<><>>v<vvv<>^v^>^<<<><<v<<<v^vv^v>^
|
||||||
|
vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<<v<^v>^<^^>>>^<v<v
|
||||||
|
><>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^<v>v^^<^^vv<
|
||||||
|
<<v<^>>^^^^>>>v^<>vvv^><v<<<>^^^vv^<vvv>^>v<^^^^v<>^>vvvv><>>v^<<^^^^^
|
||||||
|
^><^><>>><>^^<<^^v>>><^<v>^<vv>>v>>>^v><>^v><<<<v>>v<v<v>vvv>^<><<>^><
|
||||||
|
^>><>^v<><^vvv<^^<><v<<<<<><^v<<<><<<^^<v<^^^><^>>^<v^><<<^>>^v<v^v<v^
|
||||||
|
>^>>^v>vv>^<<^v<>><<><<v<<v><>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^
|
||||||
|
<><^^>^^^<><vvvvv^v<v<<>^v<v>v<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<>
|
||||||
|
^^>vv<^v^v<vv>^<><v<^v>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<><<v>
|
||||||
|
v^^>>><<^^<>>^v^<v^vv<>v^<<>^<^v^v><^<<<><<^<v><v<>vv>>v><v^<vv<>v^<<^
|
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
|
@ -19,7 +19,7 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
)"
|
)"
|
||||||
printf "%s\n" "$LINE" >&2
|
#printf "%s\n" "$LINE" >&2
|
||||||
read -r -a IDX_ARRAY <<< "$LINE"
|
read -r -a IDX_ARRAY <<< "$LINE"
|
||||||
#printf "idx: %s " "${IDX_ARRAY[@]}" >&2
|
#printf "idx: %s " "${IDX_ARRAY[@]}" >&2
|
||||||
#printf "\n" >&2
|
#printf "\n" >&2
|
||||||
@ -32,17 +32,27 @@ do
|
|||||||
do
|
do
|
||||||
B=${IDX_ARRAY[j]}
|
B=${IDX_ARRAY[j]}
|
||||||
DIFF=$(( B - A ))
|
DIFF=$(( B - A ))
|
||||||
|
VDIFF=$(( (B / LEN) - (A / LEN) ))
|
||||||
HEAD=$(( A - DIFF ))
|
HEAD=$(( A - DIFF ))
|
||||||
TAIL=$(( B + DIFF ))
|
TAIL=$(( B + DIFF ))
|
||||||
printf "char: %s, i: %s, j: %s, DIFF: %s, HEAD: %s, TAIL: %s\n" "$CHAR" "$A" "$B" "$DIFF" "$HEAD" "$TAIL" >&2
|
HEADVDIFF=$(( (A / LEN) - (HEAD / LEN) ))
|
||||||
for VALUE in $HEAD $TAIL
|
TAILVDIFF=$(( (TAIL / LEN) - (B / LEN) ))
|
||||||
do
|
printf "char: %s, A: %s, B: %s, DIFF: %s, VDIFF: %s, HEAD: %s, HEADVDIFF: %s, TAIL: %s, TAILVDIFF: %s\n" "$CHAR" "$A" "$B" "$DIFF" "$VDIFF" "$HEAD" "$HEADVDIFF" "$TAIL" "$TAILVDIFF" >&2
|
||||||
if [[ $VALUE -gt ${#MAP_ARRAY[@]} ]] || [[ $VALUE -lt 0 ]]
|
# Check if out of bounds
|
||||||
|
if [[ $HEAD -lt ${#MAP_ARRAY[@]} ]] && \
|
||||||
|
[[ $HEAD -ge 0 ]] && \
|
||||||
|
[[ $HEADVDIFF -eq $VDIFF ]]
|
||||||
then
|
then
|
||||||
continue
|
SHADOW_ARRAY[HEAD]=X # Mark on shadow map
|
||||||
|
echo $VALUE >> values
|
||||||
|
fi
|
||||||
|
if [[ $TAIL -lt ${#MAP_ARRAY[@]} ]] && \
|
||||||
|
[[ $TAIL -ge 0 ]] && \
|
||||||
|
[[ $TAILVDIFF -eq $VDIFF ]]
|
||||||
|
then
|
||||||
|
SHADOW_ARRAY[TAIL]=X # Mark on shadow map
|
||||||
|
echo $VALUE >> values
|
||||||
fi
|
fi
|
||||||
SHADOW_ARRAY[VALUE]=X # Mark on shadow map
|
|
||||||
done
|
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
unset IDX_ARRAY
|
unset IDX_ARRAY
|
||||||
|
82
2024/day-8/solution-2.sh
Normal file
82
2024/day-8/solution-2.sh
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
LEN=$( head -1 "$FILE" | sed -E 's/(.)/\1\ /g' | awk '{printf NF}' )
|
||||||
|
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )"
|
||||||
|
read -r -a SHADOW_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )"
|
||||||
|
#printf "MAP_LEN: %s, NF: %s\n" "${#MAP_ARRAY[@]}" "$LEN" >&2
|
||||||
|
|
||||||
|
for CHAR in $( < "$FILE" grep -Eo '[^\.]' | sort -u | paste -s -d' ' )
|
||||||
|
do
|
||||||
|
# Get indices for antennae
|
||||||
|
LINE="$(
|
||||||
|
for (( i=0; i<${#MAP_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} == "$CHAR" ]]
|
||||||
|
then
|
||||||
|
printf "%s " "$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
#printf "%s\n" "$LINE" >&2
|
||||||
|
read -r -a IDX_ARRAY <<< "$LINE"
|
||||||
|
#printf "idx: %s " "${IDX_ARRAY[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
|
||||||
|
# Get all combinations
|
||||||
|
for (( i=0; i<${#IDX_ARRAY[@]}-1; i++ ))
|
||||||
|
do
|
||||||
|
A=${IDX_ARRAY[i]}
|
||||||
|
SHADOW_ARRAY[A]=X
|
||||||
|
for (( j=i+1; j<${#IDX_ARRAY[@]}; j++ ))
|
||||||
|
do
|
||||||
|
B=${IDX_ARRAY[j]}
|
||||||
|
SHADOW_ARRAY[B]=X
|
||||||
|
DIFF=$(( B - A ))
|
||||||
|
VDIFF=$(( (B / LEN) - (A / LEN) ))
|
||||||
|
# Assign heads
|
||||||
|
HEADC=1
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
HEAD=$(( A - DIFF * HEADC ))
|
||||||
|
if [[ ${SHADOW_ARRAY[HEAD]} == "X" ]]; then (( HEADC++ )); continue ; fi
|
||||||
|
HEADVDIFF=$(( (A / LEN) - (HEAD / LEN) ))
|
||||||
|
# Check if out of bounds
|
||||||
|
if [[ $HEAD -lt ${#MAP_ARRAY[@]} ]] && \
|
||||||
|
[[ $HEAD -ge 0 ]] && \
|
||||||
|
[[ $HEADVDIFF -eq $(( VDIFF * HEADC )) ]]
|
||||||
|
then
|
||||||
|
SHADOW_ARRAY[HEAD]=X # Mark on shadow map
|
||||||
|
(( HEADC++ ))
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# Assign tails
|
||||||
|
TAILC=1
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
TAIL=$(( B + DIFF * TAILC ))
|
||||||
|
if [[ ${SHADOW_ARRAY[TAIL]} == "X" ]]; then (( TAILC++ )); continue ; fi
|
||||||
|
TAILVDIFF=$(( (TAIL / LEN) - (B / LEN) ))
|
||||||
|
# Check if out of bounds
|
||||||
|
if [[ $TAIL -lt ${#MAP_ARRAY[@]} ]] && \
|
||||||
|
[[ $TAIL -ge 0 ]] && \
|
||||||
|
[[ $TAILVDIFF -eq $(( VDIFF * TAILC )) ]]
|
||||||
|
then
|
||||||
|
SHADOW_ARRAY[TAIL]=X # Mark on shadow map
|
||||||
|
(( TAILC++ ))
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#printf "char: %s, A: %s, B: %s, DIFF: %s, VDIFF: %s, HEAD: %s, HEADVDIFF: %s, TAIL: %s, TAILVDIFF: %s\n" "$CHAR" "$A" "$B" "$DIFF" "$VDIFF" "$HEAD" "$HEADVDIFF" "$TAIL" "$TAILVDIFF" >&2
|
||||||
|
done
|
||||||
|
done
|
||||||
|
unset IDX_ARRAY
|
||||||
|
|
||||||
|
done
|
||||||
|
#printf "%s" "${SHADOW_ARRAY[@]}" | fold -w "$LEN" | sed -E 's/(.)/\1\ /g'
|
||||||
|
#printf "\n"
|
||||||
|
printf "%s" "${SHADOW_ARRAY[@]}" | grep -o 'X' | wc -l
|
1
2024/day-9/input
Normal file
1
2024/day-9/input
Normal file
File diff suppressed because one or more lines are too long
58
2024/day-9/solution-1.sh
Normal file
58
2024/day-9/solution-1.sh
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
# Sparse sequence
|
||||||
|
read -r -a SPARSE_ARRAY <<< "$(
|
||||||
|
INDEX=0
|
||||||
|
FILE_ID=0
|
||||||
|
while read -r CHAR
|
||||||
|
do
|
||||||
|
if [[ $(( INDEX % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
for (( i=1; i<=$CHAR; i++ )) do printf "%s " "$FILE_ID"
|
||||||
|
done
|
||||||
|
(( FILE_ID++ ))
|
||||||
|
else
|
||||||
|
for (( i=1; i<=$CHAR; i++ ))
|
||||||
|
do
|
||||||
|
printf ". "
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
(( INDEX++ ))
|
||||||
|
done <<< "$( sed -E 's/(.)/\1\n/g' "$FILE" | grep -v '^$' )"
|
||||||
|
)"
|
||||||
|
#printf "%s" "${SPARSE_ARRAY[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
printf "Sparse array len: %s\n" "${#SPARSE_ARRAY[@]}"
|
||||||
|
|
||||||
|
# Reverse feed
|
||||||
|
read -r -a FEED_ARRAY <<< "$(
|
||||||
|
for (( i=0; i<${#SPARSE_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${SPARSE_ARRAY[i]} != "." ]]
|
||||||
|
then
|
||||||
|
printf "%s " "${SPARSE_ARRAY[i]}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
#printf "%s" "${FEED_ARRAY[@]}"
|
||||||
|
#printf "\n"
|
||||||
|
printf "Reverse feed len : %s\n" "${#FEED_ARRAY[@]}"
|
||||||
|
|
||||||
|
# Generate checksum for sparse array
|
||||||
|
CHECKSUM=0
|
||||||
|
i=0
|
||||||
|
j=$(( ${#FEED_ARRAY[@]} - 1 ))
|
||||||
|
for (( k=0; k<${#SPARSE_ARRAY[@]}; k++ ))
|
||||||
|
do
|
||||||
|
if [[ $i -gt $j ]]; then break ; fi
|
||||||
|
if [[ ${SPARSE_ARRAY[k]} == '.' ]]
|
||||||
|
then
|
||||||
|
(( CHECKSUM += k * FEED_ARRAY[j] ))
|
||||||
|
(( j-- ))
|
||||||
|
else
|
||||||
|
(( CHECKSUM += k * FEED_ARRAY[i] ))
|
||||||
|
(( i++ ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "%s" "$CHECKSUM"
|
119
2024/day-9/solution-2.sh
Normal file
119
2024/day-9/solution-2.sh
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
# Sparse sequence
|
||||||
|
read -r -a SPARSE_ARRAY <<< "$(
|
||||||
|
INDEX=0
|
||||||
|
FILE_ID=0
|
||||||
|
while read -r CHAR
|
||||||
|
do
|
||||||
|
if [[ $(( INDEX % 2 )) -eq 0 ]]
|
||||||
|
then
|
||||||
|
for (( i=1; i<=CHAR; i++ ))
|
||||||
|
do
|
||||||
|
printf "%s " "$FILE_ID"
|
||||||
|
done
|
||||||
|
(( FILE_ID++ ))
|
||||||
|
else
|
||||||
|
for (( i=1; i<=CHAR; i++ ))
|
||||||
|
do
|
||||||
|
printf "%s " '-1'
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
(( INDEX++ ))
|
||||||
|
done <<< "$( sed -E 's/(.)/\1\n/g' "$FILE" | grep -v '^$' )"
|
||||||
|
)"
|
||||||
|
#printf "%s" "${SPARSE_ARRAY[@]}" | fold -w 100
|
||||||
|
#printf "\n"
|
||||||
|
printf "Sparse array len: %s\n" "${#SPARSE_ARRAY[@]}"
|
||||||
|
SHADOW_ARRAY=( "${SPARSE_ARRAY[@]}" )
|
||||||
|
|
||||||
|
# Start by working backwards
|
||||||
|
j=$(( ${#SPARSE_ARRAY[@]} - 1 )) # Moveable index since file blocks jump
|
||||||
|
k=0 # SHADOW_ARRAY cursor
|
||||||
|
LAST_SKIP=9999
|
||||||
|
while [[ $j -ge 0 ]]
|
||||||
|
do
|
||||||
|
# Find a file
|
||||||
|
if [[ ${SPARSE_ARRAY[j]} -eq -1 ]]
|
||||||
|
then
|
||||||
|
# Not a file
|
||||||
|
(( j-- ))
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get file size
|
||||||
|
# j moved to index before file head
|
||||||
|
FILE_SIZE=0
|
||||||
|
ID=${SPARSE_ARRAY[j]}
|
||||||
|
while [[ ${SPARSE_ARRAY[j]} == "$ID" ]]
|
||||||
|
do
|
||||||
|
(( FILE_SIZE++ ))
|
||||||
|
(( j-- ))
|
||||||
|
done
|
||||||
|
#printf "File ID: %s, File size: %s\n" "$ID" "$FILE_SIZE" 2>&1
|
||||||
|
|
||||||
|
# Since search space is constantly decreasing
|
||||||
|
# Contiguous space can only keep getting smaller
|
||||||
|
if [[ $FILE_SIZE -ge $LAST_SKIP ]]
|
||||||
|
then
|
||||||
|
printf "File %s size %s skipped. Last skip: %s\n" "$ID" "$FILE_SIZE" "$LAST_SKIP"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Search for available contiguous space
|
||||||
|
# Search from start until the file itself
|
||||||
|
k=0
|
||||||
|
while [[ $k -le $j ]] && [[ $k -le ${#SHADOW_ARRAY[@]} ]]
|
||||||
|
do
|
||||||
|
CONT_SPACE=0
|
||||||
|
|
||||||
|
# Skip ahead until first match of space
|
||||||
|
while [[ ${SHADOW_ARRAY[k]} -ne -1 ]] && [[ $k -le ${#SHADOW_ARRAY[@]} ]]
|
||||||
|
do
|
||||||
|
(( k++ ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Space found, now get contiguous length
|
||||||
|
while [[ ${SHADOW_ARRAY[k]} -eq -1 ]] && [[ $k -le ${#SHADOW_ARRAY[@]} ]]
|
||||||
|
do
|
||||||
|
(( CONT_SPACE++ ))
|
||||||
|
(( k++ ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Space length is ok, can proceed
|
||||||
|
if [[ $FILE_SIZE -le $CONT_SPACE ]] ;then break; fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Space length ok, can proceed
|
||||||
|
if [[ $FILE_SIZE -le $CONT_SPACE ]]
|
||||||
|
then
|
||||||
|
# Move cursor to head of contiguous space
|
||||||
|
(( k-= CONT_SPACE ))
|
||||||
|
while [[ $FILE_SIZE -gt 0 ]] && \
|
||||||
|
[[ ${SHADOW_ARRAY[k]} -eq -1 ]] && \
|
||||||
|
[[ ${SHADOW_ARRAY[j+FILE_SIZE]} -ne -1 ]]
|
||||||
|
do
|
||||||
|
# Perform copy
|
||||||
|
SHADOW_ARRAY[k]=$ID
|
||||||
|
SHADOW_ARRAY[j+FILE_SIZE]=-1
|
||||||
|
(( k++ ))
|
||||||
|
(( FILE_SIZE-- ))
|
||||||
|
done
|
||||||
|
else
|
||||||
|
LAST_SKIP=$FILE_SIZE
|
||||||
|
printf "File %s skipped. File size: %s\n" "$ID" "$FILE_SIZE"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#printf "%s " "${SHADOW_ARRAY[@]}" | fold -w 100 | tee final-result | cat
|
||||||
|
printf "%s " "${SHADOW_ARRAY[@]}" > final-result
|
||||||
|
#printf "\n"
|
||||||
|
|
||||||
|
# Generate checksum for shadow array
|
||||||
|
CHECKSUM=0
|
||||||
|
for (( i=0; i<${#SHADOW_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${SHADOW_ARRAY[i]} -ne -1 ]] ;then (( CHECKSUM += i * SHADOW_ARRAY[i] )); fi
|
||||||
|
done
|
||||||
|
printf "%s\n" "$CHECKSUM"
|
1
2024/day-9/test-input
Normal file
1
2024/day-9/test-input
Normal file
@ -0,0 +1 @@
|
|||||||
|
2333133121414131402
|
Reference in New Issue
Block a user