Compare commits
55 Commits
9f6182ca9f
...
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 | |||
ca493d881f | |||
ee587b234b | |||
cdd982a73c | |||
ec819c3335 | |||
70460b22e2 | |||
fd3020b546 | |||
5c6ae83f8e | |||
8baa4e3456 | |||
bbf76b12d7 | |||
ec1f958f9d | |||
9b763d5b37 | |||
3282ef2a35 | |||
a9e4013969 | |||
02da3cf54d |
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
|
@ -1,25 +1,21 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
INPUT_RULES=$(sort -n input-rules)
|
||||||
{
|
{
|
||||||
while read -r LINE
|
while read -r LINE
|
||||||
do
|
do
|
||||||
GREP_EXPR=$( printf "%s" "$LINE" | tr ',' '|' )
|
GREP_EXPR=$( printf "%s" "$LINE" | tr ',' '|' )
|
||||||
PASS_RULES=0
|
BEEG_AWK_EXPR=$(
|
||||||
# Loop through rules and find a breaking rule
|
printf "%s" "$INPUT_RULES" |
|
||||||
while read -r RULE
|
grep -E "($GREP_EXPR)\\|($GREP_EXPR)" |
|
||||||
do
|
sed -E 's/(.*)\|(.*)/\1,.*\2/; s&^&/&; s&$&/&' |
|
||||||
GREPC=$( printf "%s" "$LINE" | grep -c "$RULE" )
|
paste -s -d '@' |
|
||||||
if [[ $GREPC -ne 1 ]]
|
sed 's/@/ \&\& /g'
|
||||||
then
|
)
|
||||||
#printf "%s rule violated for %s \n" "$RULE" "$LINE"
|
AWK_MATCH=$( printf "%s" "$LINE" | awk "$BEEG_AWK_EXPR" | wc -c )
|
||||||
PASS_RULES=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
# Filter rules that only has included pages
|
|
||||||
done <<< "$( < input-rules grep -E "($GREP_EXPR)\\|($GREP_EXPR)" | sed 's/|/,.*/')"
|
|
||||||
|
|
||||||
# Don't process for valid lines
|
# Don't process for valid lines
|
||||||
[[ $PASS_RULES -eq 0 ]] && continue
|
if [[ $AWK_MATCH -gt 0 ]] ; then continue; fi
|
||||||
printf "%s\n" "$LINE"
|
printf "%s\n" "$LINE"
|
||||||
|
|
||||||
done < input-updates
|
done < input-updates
|
||||||
@ -31,7 +27,10 @@
|
|||||||
do
|
do
|
||||||
# Loop through rules and build all the KVs
|
# Loop through rules and build all the KVs
|
||||||
DAG_GREP_EXPR=$( printf "%s" "$CACHED_LINE" | paste -s -d '|' )
|
DAG_GREP_EXPR=$( printf "%s" "$CACHED_LINE" | paste -s -d '|' )
|
||||||
KV_ARRAY=( $( < input-rules grep -E "($DAG_GREP_EXPR)\\|($DAG_GREP_EXPR)" | tr '|' ' ' | paste -s -d ' ') )
|
read -r -a KV_ARRAY <<< "$(
|
||||||
|
< input-rules grep -E "($DAG_GREP_EXPR)\\|($DAG_GREP_EXPR)" |
|
||||||
|
tr '|' ' ' |
|
||||||
|
paste -s -d ' ')"
|
||||||
# Going through dependencies to find final key
|
# Going through dependencies to find final key
|
||||||
KEY=${KV_ARRAY[0]}
|
KEY=${KV_ARRAY[0]}
|
||||||
while true
|
while true
|
||||||
@ -46,14 +45,13 @@
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [[ $BREAK -eq 1 ]] ; then continue ; else break ; fi
|
if [[ $BREAK -eq 0 ]] ; then break ; fi
|
||||||
done
|
done
|
||||||
printf "%s\n" "$KEY"
|
printf "%s\n" "$KEY"
|
||||||
CACHED_LINE=$( printf "%s" "$CACHED_LINE" | grep -v "$KEY" )
|
CACHED_LINE=$( printf "%s" "$CACHED_LINE" | grep -v "$KEY" )
|
||||||
done | tac | paste -s -d' '
|
done | tac | paste -s -d' '
|
||||||
done
|
done
|
||||||
} |
|
} |
|
||||||
tee final-output |
|
|
||||||
awk '
|
awk '
|
||||||
BEGIN{ total = 0 }
|
BEGIN{ total = 0 }
|
||||||
{
|
{
|
||||||
|
130
2024/day-6/input
Normal file
130
2024/day-6/input
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
.....#..#................#...#.....#.......................................................#.............................##.......
|
||||||
|
......................#..............................................................#..............#..........................#..
|
||||||
|
.........#........................#.....................................................#..............#...........#........##....
|
||||||
|
..........#......................#.....#...#............#..........................#.....#........................................
|
||||||
|
#....................................................................................................................#............
|
||||||
|
.#....#......................#.......................#...............................#...#.....#...................#........#.....
|
||||||
|
..#..#.......................##........#...............................................................#........#.........#.......
|
||||||
|
..............................................................#...#.........#..#..................................................
|
||||||
|
.............####..................................#................#..#.....................................#.....#..............
|
||||||
|
..........#................#................................................#........................#.....#......................
|
||||||
|
..............................................#.........#.....................#..................#.......................#........
|
||||||
|
.........................................##..#.................................#.....#............................................
|
||||||
|
............#..#...#...............................#.#.....#...............#...............................#..............#.#.#..#
|
||||||
|
.................#..........#..#....#.....................#......................................##............#..................
|
||||||
|
.......#....#.....................#......##...................#..............#.................#........#..#......#...............
|
||||||
|
...............................................#.............#....................................................................
|
||||||
|
..............#..............................................##..................#..........................#............#........
|
||||||
|
................#.......................#..#............................................................#..........#..#.........#.
|
||||||
|
.#.......................###............#.........#.................................................#.............................
|
||||||
|
........#......................................................................................#.....#.......#...#................
|
||||||
|
#.#.........................#..#.............................................#....#........................#......................
|
||||||
|
.......#.....#...............................#.....#......................#.................................#.....#...#...........
|
||||||
|
................................................................................................#............#....................
|
||||||
|
.......#......#...............#...#............................#................................#................................#
|
||||||
|
.#.....................................................................................................................#......#...
|
||||||
|
...........#..........................................#........#...................#..............................................
|
||||||
|
....#......................................................................................#.....##.#...................#.........
|
||||||
|
...#..........................................................................##.......................................#.....#....
|
||||||
|
#........#................#...............#.........#..#.#..............##..............#........#............#....#.....#........
|
||||||
|
......#......................................#...............#....#..#...........................#................................
|
||||||
|
#..............................................................................#............#...#..#....................#......#..
|
||||||
|
.......#.........................................#.........#.......#....................................#.........................
|
||||||
|
......#......#.............................................#.....................#...........#.............#..#...................
|
||||||
|
#.......................#........#............................................##..............................#...................
|
||||||
|
..........................................................................#........................................#....#......#..
|
||||||
|
..........#..#...............................................#............................#.#..............................#......
|
||||||
|
....#...........#..#...................................#................................................................#.........
|
||||||
|
..............#..........#...............#....#.....................................#.......................#.....................
|
||||||
|
.............#........#....#.........#...............#.........#..................................................................
|
||||||
|
.#......#...................#.......#...........................................................................#.............#...
|
||||||
|
.............##...........#.........................................#......................#.......................#..............
|
||||||
|
.....#................#.....#...................##.......#......#...........#.......#............................................#
|
||||||
|
.#..#.............................................................#..............................................#................
|
||||||
|
...#......#............................#..........................................................................................
|
||||||
|
...................................................................................#..............................................
|
||||||
|
#...................................#...................##..................#...............................................#.....
|
||||||
|
................#.....#...........................#...............................................................................
|
||||||
|
.................................#............#........................................................#.............#............
|
||||||
|
..................#......#........................................................#..^.....#......................................
|
||||||
|
..#.....#.................................................#........#.........................................................#..#.
|
||||||
|
................#..............................#....................................................#.............................
|
||||||
|
................#....#..........................................#............................#....................................
|
||||||
|
...............#.......................................#.....................................#..............................#.....
|
||||||
|
..................................................#............#..............#........##.#.....................................#.
|
||||||
|
.#..................................#......#..#............#.................#.............#......#..#.......................#....
|
||||||
|
..................#..............................#..........................#..........................##............#.......#....
|
||||||
|
.........#..................................................................#...................#..........................#......
|
||||||
|
................#....................................#............#............................................................#..
|
||||||
|
..##..........#.#..#........................#....#.................................#.............................................#
|
||||||
|
............................................#.........................................................#..#...................#...#
|
||||||
|
.......................................#......................................................................#...................
|
||||||
|
....#.......................#...#.........................................................................#................#......
|
||||||
|
...........#...........#............#.....#...#...................#........................................#.................##...
|
||||||
|
....#...........................................................................................#.................................
|
||||||
|
..............................................................................#.#.............................................#...
|
||||||
|
.........#..#..............................................#......................................................................
|
||||||
|
#...................#........#............#.......#.....................#................#.#.#............#..................#....
|
||||||
|
.......................#................#.....#...........#.....................#...........................#..........#.........#
|
||||||
|
........................................................................#.#.....................#.................................
|
||||||
|
...#.................................................#..........................#........#.......................#................
|
||||||
|
............................#...........#.......#.................................#.##...........#............................#...
|
||||||
|
...##.....................................#.........................#...........#...................................#.............
|
||||||
|
#.#..#................................#.........#..#.#..........#......................#............#......................#......
|
||||||
|
....#.............................................................#...............................................................
|
||||||
|
...............#.#......#........................................................................#.........................#......
|
||||||
|
................#.....#...#...............#.........................................#....#...........................#.......#....
|
||||||
|
...............#.........................................................................#........................................
|
||||||
|
..........................#..##...................................................................................................
|
||||||
|
.##....................#..#.....................#..............................................#........................#.........
|
||||||
|
............................................................................................#............#........................
|
||||||
|
#...................#...#......................#...............#............#....................................#................
|
||||||
|
...........................#........#......................................................................#......................
|
||||||
|
................................#...#...#.#.......#.................#.......#................##...................................
|
||||||
|
........................#.......................#.................................................................................
|
||||||
|
#...#...............#.........................................................................#.......................#...........
|
||||||
|
.........#...................#...............................................#...................##..............................#
|
||||||
|
.....#............................................................................................................................
|
||||||
|
.#.......#...............................................................#.......................#................#..........#....
|
||||||
|
....................................#..........#......#...........................................................#.#.#..#...#....
|
||||||
|
......................#..............................................##..................#........................................
|
||||||
|
....#......#...................#................#..............................................................................#..
|
||||||
|
...........#.................##.#...................................................#..#................#.........................
|
||||||
|
......#.....#......#...#........#.....................................#....#...........#................#..........#..............
|
||||||
|
#.......##.....#........#...........................................#...#..........#.............#........#.......#...............
|
||||||
|
......................#......#...................#.........................#........................#..................#...#......
|
||||||
|
.....#...........#...#.........................##.......#.....................................#...................................
|
||||||
|
....................................................................#.............................................................
|
||||||
|
........#...............#.........................................................................................................
|
||||||
|
.......................#.........................#..........................................#.#....#..#....#......................
|
||||||
|
........................##............................................................#.....#.........#....#......#..#............
|
||||||
|
........................#........#..................#................#.#.##............#..........................................
|
||||||
|
.......................................................#.........................#...............##...................##....#...#.
|
||||||
|
........#...#.............#...........#........#......................#...#.........#..#..................#.#............#........
|
||||||
|
#.#....................#..........................................#...................................................#........#..
|
||||||
|
...............................................#............#.....#.#...........#........#.#....................................#.
|
||||||
|
......#..........................................#............................................................#..........#...#...#
|
||||||
|
....................#......................................#....#..............................#....................#.............
|
||||||
|
......................#.#.....#......#....#..#....................................................................................
|
||||||
|
.....#..........................................#.........#...................................#................#.......#..........
|
||||||
|
........##....................................................................#...................................#.............#.
|
||||||
|
#.........................................#..#....#................#.#.....#....................#............................#....
|
||||||
|
#....#..#..........#..................#......................#....................................................................
|
||||||
|
...................#..#....#...................#...........................#.#..#............#......#................#.......#.#..
|
||||||
|
...............#......................................................#......#..#..............#.....................#............
|
||||||
|
............#.....................#.........#....#...............#.......#...#...............#.......................##.#.........
|
||||||
|
....#............#..................#....#.......................#..............................................#...#.............
|
||||||
|
..........................................#....#..........#..#....................#......#......................#...#.............
|
||||||
|
............#..........#...........#......#..#......................................................................#.............
|
||||||
|
...#.................#.............................................................#..............................................
|
||||||
|
.....#.#.........#....................................................#..................#...............#........................
|
||||||
|
..#......................##.....#.........#..............#..#............#..#............................................#........
|
||||||
|
...................#.....#.........#........#....................#..................................#................#............
|
||||||
|
....#.............................#.............................#.......................#.......................#.....#...........
|
||||||
|
...#......#....#...........#............................#.....#........#......#...................................................
|
||||||
|
........#..........#............................#..#..#.......................................#....#.##...........................
|
||||||
|
.......#......##........#.................#.............................................................#....#........#...........
|
||||||
|
.....................#............................................#.#......#.....##....#........#.................................
|
||||||
|
...........#.....................##.#....#..#.....................................................................................
|
||||||
|
....................#......#................................#.....................................................#.......#..#....
|
||||||
|
.....................................................#.........#.......................................#.....##..#................
|
56
2024/day-6/solution-1.sh
Normal file
56
2024/day-6/solution-1.sh
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
ARRAY_SHAPE=130 # It's a square
|
||||||
|
FILENAME=input
|
||||||
|
read -r -a MAP_ARRAY <<< "$( paste -s -d '' "$FILENAME" | sed -E 's/(.)/\1\ /g' )"
|
||||||
|
|
||||||
|
# Get initial position
|
||||||
|
POSITION=$(( ( $( grep -n '\^' "$FILENAME" | cut -f1 -d: ) -1 ) * ARRAY_SHAPE -1 + $( grep -o '.*\^' "$FILENAME" | wc -c ) -1 ))
|
||||||
|
MAP_ARRAY[POSITION]=X # Remove position after save
|
||||||
|
|
||||||
|
# up = 0, right = 1, down = 2, left = 3, following 90 degree turn
|
||||||
|
TURNS=0
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
EXIT=1
|
||||||
|
|
||||||
|
# Get direction and travel
|
||||||
|
DIRECTION=$(( TURNS % 4 ))
|
||||||
|
if [[ $DIRECTION -eq 0 ]] # up
|
||||||
|
then
|
||||||
|
TRAVEL=-$ARRAY_SHAPE
|
||||||
|
LIMIT=$(( POSITION % ARRAY_SHAPE ))
|
||||||
|
elif [[ $DIRECTION -eq 1 ]] # right
|
||||||
|
then
|
||||||
|
TRAVEL=1
|
||||||
|
LIMIT=$(( (POSITION / ARRAY_SHAPE + 1) * ARRAY_SHAPE )) # Never verified
|
||||||
|
elif [[ $DIRECTION -eq 2 ]] # down
|
||||||
|
then
|
||||||
|
TRAVEL=$ARRAY_SHAPE
|
||||||
|
LIMIT=$(( (POSITION % ARRAY_SHAPE) + (ARRAY_SHAPE * ARRAY_SHAPE) ))
|
||||||
|
elif [[ $DIRECTION -eq 3 ]] # left
|
||||||
|
then
|
||||||
|
TRAVEL=-1
|
||||||
|
LIMIT=$(( (POSITION / ARRAY_SHAPE) * ARRAY_SHAPE )) # Never verified
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ ${MAP_ARRAY[$POSITION+$TRAVEL]} != '#' ]]
|
||||||
|
do
|
||||||
|
if [[ $POSITION -eq $LIMIT ]] # Walked out
|
||||||
|
then
|
||||||
|
EXIT=0
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
MAP_ARRAY[POSITION]=X # Mark walking path
|
||||||
|
(( POSITION+=TRAVEL ))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $EXIT -eq 0 ]] ; then break ; fi # Walked out
|
||||||
|
|
||||||
|
(( TURNS++ ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Count all coordinates
|
||||||
|
printf "%s" "${MAP_ARRAY[@]}" | tee travel-path | sed 's/[^X]//g' | wc -c
|
||||||
|
< travel-path fold -w $ARRAY_SHAPE
|
10
2024/day-6/test-input
Normal file
10
2024/day-6/test-input
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
850
2024/day-7/input
Normal file
850
2024/day-7/input
Normal file
@ -0,0 +1,850 @@
|
|||||||
|
7101833: 8 23 8 638 9 15 529 8
|
||||||
|
7780812: 8 204 1 59 366 16
|
||||||
|
89615: 530 79 8 5 18 8 47
|
||||||
|
464790: 242 2 32 5 30
|
||||||
|
39059: 106 23 16 42 9
|
||||||
|
24598226: 58 30 7 3 3 61 84 8 338
|
||||||
|
4571167: 40 86 23 132 7
|
||||||
|
10387964196: 3 99 7 9 99 5 4 96 41 9 7
|
||||||
|
2564794: 3 1 641 7 86 4 1 3
|
||||||
|
707818803: 34 656 1 409 24 85 1
|
||||||
|
35441062: 8 3 1 364 3 3 6 6 773 1 7
|
||||||
|
56870: 79 4 13 631 12 2
|
||||||
|
28644: 43 99 46 77 2
|
||||||
|
360441: 31 8 7 5 6 34 8 1 55 9 9
|
||||||
|
206255659: 55 625 941 2 6
|
||||||
|
954432: 188 559 6 286 664 9
|
||||||
|
80328848: 99 1 74 563 164 5 8
|
||||||
|
123216: 7 409 43 3 86 9 9
|
||||||
|
13503056: 21 1 66 91 8 2 4 24 83
|
||||||
|
1126406052: 2 99 57 3 2 1 47 3 8 2 50
|
||||||
|
1330: 1 8 6 8 9
|
||||||
|
3072475: 133 660 35 175
|
||||||
|
167379808: 3 315 8 61 638 32 89
|
||||||
|
3407292461: 97 5 61 97 9 167 7 46 4
|
||||||
|
835800: 823 566 11 597
|
||||||
|
2891773: 4 803 27 81 9
|
||||||
|
5749267952: 4 27 8 427 78 6 1 7 373
|
||||||
|
488720845: 512 28 5 1 954
|
||||||
|
1446688: 70 29 34 46 424
|
||||||
|
2561802992641: 7 41 1 54 3 720 9 296 8
|
||||||
|
33303: 56 1 7 82 399 106 80
|
||||||
|
229572441: 629 7 869 4 6
|
||||||
|
57795644: 6 7 835 100 2 659 25 1
|
||||||
|
4188: 691 1 1 5 6
|
||||||
|
179760753: 85 78 7 885 7 569 6
|
||||||
|
6490694: 6 3 8 253 8 727 4 1 37
|
||||||
|
806642157794: 672 31 6 1 160 57 242
|
||||||
|
358281075197: 846 5 847 134 617 95
|
||||||
|
16673934692: 7 870 79 67 3 898 1 4
|
||||||
|
342016891916: 91 9 29 17 1 2 9 8 2 7 14
|
||||||
|
1309152: 708 8 570 21 4 5
|
||||||
|
158201: 36 135 925 19 5
|
||||||
|
3198550: 53 850 1 71
|
||||||
|
8459: 836 9 9
|
||||||
|
358261919652: 6 2 2 1 3 2 757 7 91 3 76
|
||||||
|
2654750: 6 2 17 1 8 4 887 2 7 370
|
||||||
|
1799: 32 52 122 7 6
|
||||||
|
15090313022: 277 38 672 874 544
|
||||||
|
489: 7 8 3 6 2
|
||||||
|
11292858246: 41 630 98 93 3 3 3 97
|
||||||
|
50924541: 9 152 8 62 5 2 3 3 3 9 6 3
|
||||||
|
4108700: 79 95 963 582 454
|
||||||
|
17033004: 8 606 65 79 225 2 2 27
|
||||||
|
49809068987: 3 561 2 9 5 9 2 8 2 1 7 84
|
||||||
|
10675: 5 66 887 3 4 671 6 859
|
||||||
|
9179: 75 9 2 985 602
|
||||||
|
18669464: 1 4 4 51 2 4 2 7 726 706
|
||||||
|
48495: 9 6 737 4 61
|
||||||
|
480747725: 7 4 4 97 44 11 4 4 4 41 5
|
||||||
|
21026492251: 700 13 8 66 3 3 922 50
|
||||||
|
10912112: 2 79 2 97 4 89
|
||||||
|
13871882: 529 4 517 26 441
|
||||||
|
232442656: 404 8 118 931 608
|
||||||
|
6811200: 55 3 8 60 86
|
||||||
|
3146536: 8 596 3 106 645 870 1
|
||||||
|
12102281: 15 27 6 5 10 71 46 1 7 9
|
||||||
|
694740250: 6 94 7 40 10 7 3 56 77 9
|
||||||
|
599701273686: 8 48 1 86 1 7 4 2 736 86
|
||||||
|
1446: 61 7 4 651 2
|
||||||
|
36268684863: 330 7 8 42 6 8 99 59 15
|
||||||
|
3784: 3 41 204 51 1
|
||||||
|
22691: 640 34 87 22 822
|
||||||
|
21245261: 236 9 50 2 58
|
||||||
|
3539: 1 348 8 729 1 17
|
||||||
|
2402633760: 58 2 6 2 86 8 1 5 2 8 2 8
|
||||||
|
13674: 5 4 74 393 4
|
||||||
|
26300: 9 370 52 61 9
|
||||||
|
412170: 80 3 2 17 827 190 961
|
||||||
|
1682678: 39 24 89 3 5 78
|
||||||
|
220786769: 885 1 8 8 2 874 4 47 8 7
|
||||||
|
9804704: 300 722 7 7 91 8 13
|
||||||
|
1009698: 62 2 5 1 811
|
||||||
|
47772073: 682 3 1 573 7 61
|
||||||
|
1680743: 1 7 94 9 749 68 1 9 4 1 2
|
||||||
|
10287000371: 834 749 716 23 683
|
||||||
|
231: 8 1 5 217
|
||||||
|
299104: 3 63 530 8 52
|
||||||
|
3984313369: 4 990 24 313 371
|
||||||
|
302706: 6 714 6 27 402
|
||||||
|
6592950: 6 7 245 90 23
|
||||||
|
22408805: 635 4 797 44 335 16 2
|
||||||
|
25300956: 5 4 316 5 2 39 4
|
||||||
|
670014687: 9 456 2 6 5 4 2 2 2 3 5 6
|
||||||
|
2994640: 4 9 5 80 913
|
||||||
|
11160: 50 8 3 6 62
|
||||||
|
8048754: 31 5 5 8 93 9 64 6 3 9 7
|
||||||
|
1100950422: 917 2 5 3 7 2 4 5 46 3 4 2
|
||||||
|
148411: 405 7 9 8 76 6 43 1 8 53
|
||||||
|
201703999068: 9 465 76 54 11 739 78
|
||||||
|
7930833540: 7 9 26 2 8 3 889 62 6 5
|
||||||
|
2560177235: 54 64 81 1 81 8 57 2
|
||||||
|
3197868660390: 9 5 1 8 5 973 6 28 5 78 5
|
||||||
|
797967: 74 1 1 1 2 6 7 23 53
|
||||||
|
31800381: 683 8 45 2 462
|
||||||
|
104425891: 714 5 750 85 39 76
|
||||||
|
13388732520: 87 6 56 8 39 6 2 734
|
||||||
|
74503972: 4 6 74 3 99 7 73 6 7 4 1
|
||||||
|
56066: 95 155 1 8 68 3 9 7 6 1
|
||||||
|
9789: 23 5 85 12 2
|
||||||
|
1883356738: 14 582 3 4 7 9 5 41 5 9
|
||||||
|
1122843692: 7 5 8 7 802 4 1 2 1 59 9 9
|
||||||
|
174: 1 1 6 1 17 38
|
||||||
|
618640525: 1 63 1 8 94 440 527
|
||||||
|
200992: 7 33 9 2 7 1 542 371 81
|
||||||
|
1431: 768 6 102 53 465 39
|
||||||
|
3651582565: 80 285 1 57 3 3 6 86 6 4
|
||||||
|
5275893: 961 3 5 366 5
|
||||||
|
8543031603: 47 7 84 668 10 259
|
||||||
|
28824872722: 6 776 6 838 619
|
||||||
|
1913: 26 581 3 43 49
|
||||||
|
593569: 7 25 229 81 1
|
||||||
|
37958928: 1 3 8 2 2 7 1 7 9 2 51 36
|
||||||
|
543002: 3 620 150 4
|
||||||
|
83584938: 8 357 5 9 941
|
||||||
|
8982484: 57 57 14 343 196
|
||||||
|
168365: 97 6 22 15 272
|
||||||
|
39964: 3 81 709 6 50 47 55 6
|
||||||
|
1170: 8 38 866
|
||||||
|
13069: 8 2 8 5 8 69 906 3 6 8 4 9
|
||||||
|
4680683: 302 19 8 347 41
|
||||||
|
284935: 7 44 10 16 56 7
|
||||||
|
215258168915: 331 65 10 813 3 8 917
|
||||||
|
1404: 21 3 9 5 8 7 2 4 1 6 64
|
||||||
|
551991910: 4 53 98 71 7 21 190 6 6
|
||||||
|
5571653: 8 4 8 7 1 59 425 306 8 5
|
||||||
|
152190048: 5 854 495 100 72 48
|
||||||
|
12859128: 627 5 83 666 6
|
||||||
|
12131355: 98 3 356 302 5 3
|
||||||
|
2436480: 5 130 94 6 32
|
||||||
|
56493: 5 562 20 69 224
|
||||||
|
337176: 3 51 18 7 669
|
||||||
|
1341288165: 2 821 207 9 5 470 789
|
||||||
|
22726: 3 500 9 5 91
|
||||||
|
3888122: 8 8 8 6 122
|
||||||
|
385113961: 705 8 174 54 1
|
||||||
|
1986229248288: 7 3 6 9 4 698 4 7 20 7 4 6
|
||||||
|
287: 42 3 1 3 32 8 117
|
||||||
|
1264569607: 969 3 971 8 6 2 8 8 56 7
|
||||||
|
17520825: 483 9 6 5 805
|
||||||
|
4807782: 5 74 7 207 42
|
||||||
|
2541221460: 3 6 60 6 682 9 84 5 457
|
||||||
|
4384372: 410 4 280 3 7 4
|
||||||
|
198714684916: 35 3 249 6 5 2 42 91 9
|
||||||
|
16450573: 1 7 8 35 4 7 48 40 6 6 7
|
||||||
|
8940765: 2 980 244 1 6 3 15
|
||||||
|
64337: 6 35 28 399 101
|
||||||
|
83837925: 5 972 1 2 5 15 57 517 4
|
||||||
|
703676: 2 9 5 9 54 3 65 38 538
|
||||||
|
24717026880: 65 504 6 6 3 7 998
|
||||||
|
42961723002: 17 2 841 2 64 2 9 33
|
||||||
|
5646535697: 13 86 5 56 4 7 1 6 569 7
|
||||||
|
117727390611597: 218 41 81 644 550 98
|
||||||
|
56133: 1 9 9 81 7
|
||||||
|
4842: 6 20 416 96 9
|
||||||
|
750: 82 82 4 2 3 89
|
||||||
|
483448142: 37 514 9 93 308 3 2 37
|
||||||
|
2184449: 34 9 5 646 8 34 3 4 71 3
|
||||||
|
767009145: 6 60 270 878 5 92 1 85
|
||||||
|
532730: 8 28 40 726 55
|
||||||
|
915886: 23 5 88 9 8 1 540 7 30 9
|
||||||
|
4959536593: 900 4 7 9 56 5 503 311
|
||||||
|
6880853056: 802 90 857 55 1
|
||||||
|
2460: 4 84 3 6 15 3 929 9 64
|
||||||
|
5503098: 8 4 4 8 3 5 682 6 98 1 7 6
|
||||||
|
180174733: 4 845 221 551 82 241
|
||||||
|
294481305088: 467 3 4 9 4 77 5 78 7 7 1
|
||||||
|
347053408060646: 601 96 27 759 9 844 9
|
||||||
|
665024: 949 2 7 2 56 1 5
|
||||||
|
131: 2 5 44 9 2 64
|
||||||
|
521990966728: 832 256 64 3 6 98
|
||||||
|
67898: 5 943 1 7 7 842 9 531 2
|
||||||
|
889: 6 2 4 56 7
|
||||||
|
71772: 8 3 868 7 81 6
|
||||||
|
17514: 9 4 2 88 61 2 5 862 7
|
||||||
|
367895094465: 6 613 950 9 44 65
|
||||||
|
3170570: 539 5 9 223 65
|
||||||
|
14894896789: 25 2 5 8 3 6 9 7 67 89
|
||||||
|
48911612401: 9 8 448 8 1 248 8 5 35 6
|
||||||
|
6952188752: 6 630 88 61 209
|
||||||
|
252428430: 7 6 9 795 2 35 2 3 6 8 4
|
||||||
|
11938840: 746 4 7 4 3 9
|
||||||
|
976937: 88 9 6 888 49
|
||||||
|
326445181: 29 1 2 8 272 3 4 517 3 6
|
||||||
|
32749919: 5 320 18 9 38
|
||||||
|
36329555157: 46 8 478 1 4 4 58 403 7
|
||||||
|
9684500: 95 2 906 5 50 2 8 875
|
||||||
|
322: 3 2 2 3 18 7 5
|
||||||
|
46079: 6 6 9 957 122
|
||||||
|
6429514256: 9 310 26 91 4 974
|
||||||
|
113: 62 7 34 7
|
||||||
|
134322120: 793 18 3 58 10 8 711 4
|
||||||
|
27533452832: 9 77 254 143 2 9 323 8
|
||||||
|
16814501284: 4 9 932 1 9 4 5 4 7 2 862
|
||||||
|
2738: 5 38 12 88 9 1 9 1 347 4
|
||||||
|
1305480: 5 34 75 6 78 5 95 3 46
|
||||||
|
282564: 722 4 47 71 2 47
|
||||||
|
81453120: 4 449 3 9 46 56 68
|
||||||
|
1593416: 2 5 710 6 8 5 8 129 8
|
||||||
|
50649: 15 517 4 541 47 30
|
||||||
|
11050695: 6 5 253 7 34 662 33
|
||||||
|
1085990967: 46 9 5 262 968
|
||||||
|
144475: 6 2 142 938 9 14
|
||||||
|
15973276: 638 462 469 25 1
|
||||||
|
1356542888: 8 942 344 180 965
|
||||||
|
109483025: 3 3 1 4 52 316 6 2 838 2
|
||||||
|
513900276: 49 8 1 3 6 1 50 273
|
||||||
|
3165348547: 8 697 9 632 455 745
|
||||||
|
5109729: 5 5 1 41 8 7 2 523 3 3 4 9
|
||||||
|
1189621: 2 50 931 8 617 4
|
||||||
|
11273432: 125 4 662 6 4 1 33 66 5
|
||||||
|
927762: 301 28 822 806 56
|
||||||
|
662365725: 3 85 3 7 7 3 918 9 86
|
||||||
|
127902747: 292 678 15 646 558 3
|
||||||
|
207984: 28 821 30 2 57 999 4
|
||||||
|
87919206658: 4 9 964 71 5 3 940 335
|
||||||
|
648: 4 11 635
|
||||||
|
5632: 121 9 3 5 4 8 5 1 2 5 17 8
|
||||||
|
7705: 4 5 8 4 960 1 7 690 63 7
|
||||||
|
5832992: 79 83 9 166 49 33 4
|
||||||
|
16344915: 667 85 69 7 9 39 5
|
||||||
|
166741080: 4 6 7 99 203 3 3 4 295 2
|
||||||
|
31084626: 45 738 52 2 3 5 6
|
||||||
|
47747: 460 17 49
|
||||||
|
95234: 30 31 3 11 34
|
||||||
|
182679: 3 1 79 316 88 85 5 2 5 7
|
||||||
|
40414098: 7 968 7 6 6 4 4 85 849 2
|
||||||
|
155364491: 60 74 72 486 11
|
||||||
|
5112274: 58 8 11 8 274
|
||||||
|
62848: 87 9 5 4 556 4 4 8
|
||||||
|
772524538: 8 1 5 3 5 36 7 3 188 81 1
|
||||||
|
3457728: 7 43 605 7 4 522
|
||||||
|
3270848119: 7 149 5 128 7 5 5 2 4 9 7
|
||||||
|
6225: 889 7 2
|
||||||
|
5323: 1 7 19 30 6 6 427
|
||||||
|
3074: 78 6 4 1 2 34 17 949
|
||||||
|
109924066: 1 64 5 2 79 3 132 6 3 1 5
|
||||||
|
9650055: 429 4 531 97 3 58
|
||||||
|
236590: 71 4 830 17 8 800 42 3
|
||||||
|
15133272: 6 98 28 57 431
|
||||||
|
928253: 5 18 1 256 7
|
||||||
|
7130057: 3 14 8 7 13 51 22 935
|
||||||
|
11219943: 5 419 51 5 58 21
|
||||||
|
13820: 9 204 5 9 3 138 95 4
|
||||||
|
151192320: 80 46 6 9 499 3 82 64
|
||||||
|
140848: 14 7 63 83 2 1 1 2 6 15
|
||||||
|
18491123: 8 5 1 98 272 4 89 3 51 2
|
||||||
|
91810280: 7 4 6 3 3 92 6 8 22 152 5
|
||||||
|
187311: 3 230 1 6 9 9 45 5 48 63
|
||||||
|
1268: 5 78 254 794 58 76
|
||||||
|
180225: 4 27 50 89 25
|
||||||
|
624152: 4 45 7 495 1 451
|
||||||
|
80600: 793 1 1 6 6 20 5
|
||||||
|
204939633: 8 481 132 33 95 1 33
|
||||||
|
1575825674865: 6 9 6 5 2 849 497 3 355
|
||||||
|
242082: 5 40 30 39 40 522
|
||||||
|
117: 9 1 24 44 41
|
||||||
|
3145408: 4 1 36 7 294 98 34 8 7
|
||||||
|
3196953: 57 4 5 6 9 1 3 896 7 9 1 9
|
||||||
|
768528332: 48 712 3 5 52 824 9 2
|
||||||
|
38770467: 351 546 287 202 1
|
||||||
|
349973: 34 225 771 1 9
|
||||||
|
43669081384243: 65 43 9 868 692 5 6 4 6
|
||||||
|
12676542351: 3 5 3 722 4 7 4 661 86 8
|
||||||
|
2806598: 506 55 320 5 1
|
||||||
|
264681119: 8 785 2 375 3 117
|
||||||
|
37144119: 86 1 88 7 44 7 7 99 6 6
|
||||||
|
39888: 8 775 2 6 576 1 4
|
||||||
|
689410: 3 3 7 8 51 4 8 6 4 750 2 5
|
||||||
|
21380: 3 117 76 4 691 875 2
|
||||||
|
7309491: 412 45 7 5 394
|
||||||
|
62449845: 3 95 69 4 1 7 92 1 6 91 6
|
||||||
|
1352472254: 1 3 384 9 88 142 110
|
||||||
|
418: 9 9 28 3 91
|
||||||
|
2065783914: 171 56 91 83 911
|
||||||
|
457753106: 40 5 7 7 52 924 182
|
||||||
|
12569: 70 60 88 612 4 513
|
||||||
|
74809: 774 900 94 42 76 477
|
||||||
|
763899: 615 8 685 584 8 1 18
|
||||||
|
2624: 8 6 1 6 9 8 6 6 15 1 11 6
|
||||||
|
702: 5 4 4 615 74
|
||||||
|
14069: 8 7 7 5 1 3 440 3 6 8 725
|
||||||
|
164285712: 325 3 55 8 13 5 1 88 24
|
||||||
|
264000: 5 47 63 235 7 2 75
|
||||||
|
53501418: 724 3 99 65 9 845 9 27
|
||||||
|
20118372397: 890 587 3 397 97
|
||||||
|
4549: 4 450 99
|
||||||
|
2323795: 6 4 52 6 36 858
|
||||||
|
5343319828135: 763 331 4 5 2 401 3 6 7
|
||||||
|
224591487120: 3 73 28 78 6 4 129 910
|
||||||
|
6721059240: 75 42 666 63 27 798 4
|
||||||
|
882595: 8 1 3 9 255 5 7 70 8 1 2 3
|
||||||
|
6254258: 8 2 13 3 407 664 354 8
|
||||||
|
369570: 13 350 1 5 570
|
||||||
|
2982: 1 4 593 8 9
|
||||||
|
742976095: 12 2 2 95 64 95
|
||||||
|
2135952: 806 4 47 1 87 953 14
|
||||||
|
2156064: 5 7 8 4 2 87 5 4 8 398 8 2
|
||||||
|
752594090: 217 3 40 1 91 7 488 59
|
||||||
|
94212721: 1 921 887 186 280 1
|
||||||
|
145325442: 673 2 224 482 512 2
|
||||||
|
1910493: 87 291 266 19 82
|
||||||
|
24501: 3 4 2 1 9 9 9 1 822 23 1 5
|
||||||
|
207154508: 1 3 6 738 1 5 724 75 4 4
|
||||||
|
6492983573: 54 30 428 29 86 21
|
||||||
|
1057040512: 6 965 5 6 556 8 2 121
|
||||||
|
771987931: 3 8 1 67 900 9 661 82
|
||||||
|
3832157005: 47 4 7 47 29 7 7 7 5 29
|
||||||
|
55024: 17 75 1 74 98 38
|
||||||
|
182377: 93 27 22 72 1
|
||||||
|
12087284004: 3 1 7 3 6 9 4 3 8 3 542 43
|
||||||
|
303319: 936 9 1 6 5 2 1 1 6 7
|
||||||
|
66626612971: 2 6 1 9 72 2 215 3 8 8 2 9
|
||||||
|
72912: 4 5 9 10 62 21 2
|
||||||
|
10426: 58 6 18 9 58
|
||||||
|
15095866: 7 5 60 6 4 4 8 7 8 8 50
|
||||||
|
22924333853: 643 89 83 82 1 4 8 5 5 4
|
||||||
|
372804: 5 86 2 2 1 3 72 455 613
|
||||||
|
23238529: 8 6 7 416 73 569
|
||||||
|
46837020: 938 6 396 61 573
|
||||||
|
384207: 52 79 1 461 53 6 83
|
||||||
|
2796564: 8 1 955 3 1 6 482
|
||||||
|
21670776754: 5 5 3 8 4 88 786 40 8 4 9
|
||||||
|
31106600: 25 41 18 7 680
|
||||||
|
662646786: 39 548 5 477 609 13 9
|
||||||
|
340: 8 2 34
|
||||||
|
16379: 3 116 3 13 6 1 7 779 60
|
||||||
|
746113957: 39 344 8 474 9 4
|
||||||
|
166880: 748 37 6 76 748
|
||||||
|
32635: 4 6 76 1 31 5 1 8 8 1 986
|
||||||
|
82026000: 99 1 32 9 90 93 70
|
||||||
|
3854: 15 49 889 3 983 9 3
|
||||||
|
17476: 3 84 69 88 1
|
||||||
|
831: 2 45 7 734
|
||||||
|
345920372: 10 810 80 93 4
|
||||||
|
266623: 3 4 4 2 118 624
|
||||||
|
7428141054: 880 7 3 310 4 6 2 9 5 2 9
|
||||||
|
6941789360: 770 662 4 7 619 5 6 22
|
||||||
|
1510040: 55 448 38 79 34
|
||||||
|
1402057: 50 42 29 59 23
|
||||||
|
315249285854: 31 5 249 2 85 85 6 1
|
||||||
|
357243: 271 9 77 240
|
||||||
|
27816661: 7 693 47 2 12 9 473 4
|
||||||
|
4056941: 7 6 16 6 3 6 46 4 2 5 37 2
|
||||||
|
894700: 1 8 2 4 65 876 929 68 5
|
||||||
|
2814: 9 3 1 7 3
|
||||||
|
3112293: 342 91 91
|
||||||
|
24044: 20 678 567 19 7
|
||||||
|
40190693: 5 824 5 6 47 509 2 52 1
|
||||||
|
5464285: 379 5 22 8 1 458 613 3
|
||||||
|
622: 28 2 3 524 8
|
||||||
|
864249: 25 29 16 23 5 14
|
||||||
|
274989: 6 4 887 31 19
|
||||||
|
22689264: 2 22 5 3 8 9 427 8 24 3 2
|
||||||
|
7629534: 56 53 703 436 3 99
|
||||||
|
1078: 3 51 5 5 211 803
|
||||||
|
114379517929: 61 5 75 9 5 17 853 73
|
||||||
|
1223996137: 9 5 2 3 5 759 90 8 8 887
|
||||||
|
65046348: 85 9 20 26 6 9 7 5 1 3 6 6
|
||||||
|
70020279998: 2 3 39 40 7 3 88 550 74
|
||||||
|
2016058: 5 3 55 1 9 8 280 2 14 2 3
|
||||||
|
1616569254: 907 949 6 8 4 288 313
|
||||||
|
406561: 403 4 84 3 337
|
||||||
|
52254720: 7 4 3 63 2 9 3 360 2 6 9
|
||||||
|
21036: 460 520 39 32 8 2
|
||||||
|
1574840: 19 8 552 59 6 86 4 8
|
||||||
|
184521: 109 7 4 3 4 5 2 5 50 7 8 6
|
||||||
|
8854722472: 72 80 28 8 8 9 1 4 478
|
||||||
|
68882273: 68 87 59 63 70
|
||||||
|
4775847: 4 767 8 690 157
|
||||||
|
52496657718: 2 8 8 620 7 3 27 1 6 9 5 4
|
||||||
|
817771: 6 2 9 3 945 64 5 5
|
||||||
|
22905492: 64 4 15 7 6 7 989 42 6
|
||||||
|
2334360053: 87 548 859 57 63 2
|
||||||
|
1267283: 783 6 2 8 307 98 45
|
||||||
|
709598: 699 19 956 84 8
|
||||||
|
390091: 12 523 31 2 979
|
||||||
|
114774660767: 4 84 7 585 572 765
|
||||||
|
2644110: 5 3 61 1 20 29 4 6 45
|
||||||
|
23348253: 856 97 28 7 85 9 8 5 93
|
||||||
|
118217861586: 376 7 986 9 558 187 3
|
||||||
|
26067719: 13 9 69 461 17 9 621 2
|
||||||
|
11870: 38 333 369 8 9 2 2 3 5
|
||||||
|
62726410774: 9 12 5 4 640 118 8 9 9
|
||||||
|
594551549: 98 44 2 344 861 77 53
|
||||||
|
719: 523 44 147 5
|
||||||
|
300: 9 16 9 44
|
||||||
|
72039: 340 3 3 7 8
|
||||||
|
745344: 77 374 7 2 3 5 2 6 8 7 9 9
|
||||||
|
7132: 14 903 271 6 4
|
||||||
|
16643031388: 77 2 6 6 1 27 9 5 59 1 3 6
|
||||||
|
1198356: 1 946 79 4 307 19 4 44
|
||||||
|
4119222: 8 903 2 7 57
|
||||||
|
45831793: 9 870 67 521 984
|
||||||
|
18179: 8 315 3 45 49
|
||||||
|
27106570: 7 1 82 804 901 5 74
|
||||||
|
157060: 2 1 8 787 7 7 8 1 82 3 9 1
|
||||||
|
58905350: 5 9 5 99 352
|
||||||
|
30297338: 724 49 854 832 2
|
||||||
|
7686339: 30 3 3 6 775 4 56 1 7 6 3
|
||||||
|
139341664: 51 17 6 5 27 8 1 48 6 2 8
|
||||||
|
102792824398: 7 3 279 2 8 1 6 8 383 8 5
|
||||||
|
14544: 9 2 2 8 7 7 822 3 56 9
|
||||||
|
14940156: 9 4 3 4 4 58 518 57
|
||||||
|
6994: 671 25 7 26
|
||||||
|
1707: 7 8 8 9 16 9 79 9 86 23 5
|
||||||
|
280253937: 9 341 7 9 80 3
|
||||||
|
379710: 6 3 6 222 46 66 859 32
|
||||||
|
191395: 8 698 271 1 69
|
||||||
|
477365: 6 3 6 569 805
|
||||||
|
2668818: 32 845 2 6 5 4 7 2 9 5 6
|
||||||
|
9605504: 7 78 33 88 808
|
||||||
|
24035157: 94 16 7 98 287 6 1 3 9
|
||||||
|
45610: 1 621 11 4 5 9 1 1 2 7 7
|
||||||
|
5558: 5 8 4 5 83
|
||||||
|
23045282644: 35 13 820 33 4 1 2 5
|
||||||
|
3386: 2 8 815 4 86
|
||||||
|
78723586944: 53 191 60 8 4 2 6 4 37
|
||||||
|
443678580: 754 64 2 748 918
|
||||||
|
249177926: 2 3 8 2 64 574 7 7 96 2 3
|
||||||
|
244864368029: 850 378 44 315 762
|
||||||
|
976: 6 27 326 2
|
||||||
|
2103170: 1 7 26 489 5 1 5 3 404 7
|
||||||
|
160087: 5 45 3 6 117 4 19 8
|
||||||
|
8502265225: 280 97 668 453 637
|
||||||
|
8634750: 143 98 22 377 99 87
|
||||||
|
21939694: 31 9 832 63 7 94
|
||||||
|
3640: 36 68 5 7
|
||||||
|
1313: 28 6 237 706 258 78
|
||||||
|
43478: 45 7 137 59 264
|
||||||
|
9364: 83 72 510 7 2 3 44 7
|
||||||
|
32970: 4 5 772 7 76 27 37
|
||||||
|
1361104: 674 77 730 919 65
|
||||||
|
35138675: 232 42 28 7 1 50 715 5
|
||||||
|
103926: 9 3 60 38 1 8 64 2 12
|
||||||
|
19517830125: 1 8 8 8 9 753 8 5 9 1 25 5
|
||||||
|
80568734400: 6 1 6 1 914 530 9 55 8
|
||||||
|
23575581642: 442 94 634 895 2
|
||||||
|
1759896: 75 967 2 802 24
|
||||||
|
2623536: 4 3 1 2 4 8 72 5 23 5 36
|
||||||
|
108242429: 9 7 82 583 68 2 420 29
|
||||||
|
13545: 50 95 540 40 18 495
|
||||||
|
451879108: 5 1 9 4 87 98 4 92 29
|
||||||
|
4476: 2 3 895 4
|
||||||
|
1225104382: 8 7 907 8 9 3 5 3 67 136
|
||||||
|
864: 2 2 1 2 533 5 297 6 1 3 9
|
||||||
|
1133: 212 3 488 7 2
|
||||||
|
2738274: 2 73 7 69 3 41 99 443 1
|
||||||
|
7279023: 8 4 70 42 53
|
||||||
|
6394059: 8 844 7 946 45
|
||||||
|
4352288: 8 6 2 746 95 827 6 5 4 2
|
||||||
|
29742: 5 12 95 2 8 64 1 961
|
||||||
|
6275: 3 4 46 48 928
|
||||||
|
2985069: 7 2 8 8 57 6 218 8 96 2 5
|
||||||
|
1303: 58 5 643 75 297
|
||||||
|
714048078: 7 4 949 803 5 48 72 7
|
||||||
|
3141176276: 2 8 7 323 8 1 3 37 2 73
|
||||||
|
17828177432: 9 5 487 8 3 7 38 892 1 1
|
||||||
|
3710: 9 37 9 7 9 8 9 7 7 4 5 7
|
||||||
|
14199: 2 5 4 9 4 6 66 5 11 851 1
|
||||||
|
22220: 9 36 1 588 297 18 458
|
||||||
|
239868213254: 89 67 33 705 322 9 3 4
|
||||||
|
3426797: 892 33 31 74 1 116 41
|
||||||
|
269695020: 8 98 9 3 3 1 9 1 6 585 1 7
|
||||||
|
21133: 4 84 24 3 2 4 4
|
||||||
|
796: 187 588 21
|
||||||
|
443822608: 3 88 9 8 33 888 6 2 9 9 5
|
||||||
|
403917: 696 58 9 3 80 3 20 9 31
|
||||||
|
631: 1 68 461 95 7
|
||||||
|
185762282618: 18 57 622 81 922 696
|
||||||
|
210940464704: 7 220 6 37 722 96 617
|
||||||
|
117033: 7 1 2 5 26 35
|
||||||
|
19535124: 6 3 427 66 4 3 5 7 5 8 1 6
|
||||||
|
75471644: 5 25 6 4 71 644
|
||||||
|
394056230652: 34 206 8 4 7 8 8 40 7 4 9
|
||||||
|
249751668482: 5 6 9 9 970 4 97 1 8 2 1 7
|
||||||
|
5198: 480 41 3 9 58 283 141
|
||||||
|
2212: 15 38 5 76 593
|
||||||
|
14544348: 2 4 7 3 2 11 2 4 57 701 1
|
||||||
|
16408: 81 57 59 59 8 3 8
|
||||||
|
2152: 346 841 958 3 4
|
||||||
|
58702067: 36 60 25 5 9 59 3 6
|
||||||
|
5031450: 66 8 9 6 83 67 675
|
||||||
|
6126: 8 82 8 8 366
|
||||||
|
43804911024: 8 5 904 620 2 4 668 8 9
|
||||||
|
3424413730: 7 8 137 93 610
|
||||||
|
48087732: 4 804 4 773 1
|
||||||
|
150365908588: 719 679 154 288 2 12
|
||||||
|
20107906: 290 97 595 58 7
|
||||||
|
73124: 40 80 983 1 66 326
|
||||||
|
9521094784: 1 2 686 842 5 9 2 810 2
|
||||||
|
54076: 7 8 512 2 3 17 1 324
|
||||||
|
7326527: 7 725 61 43 387
|
||||||
|
169509763: 844 9 5 132 3 5 9 4 1 2
|
||||||
|
209001602: 531 8 984 5 2
|
||||||
|
15794: 57 651 9 22 20
|
||||||
|
4639793: 78 9 8 1 187 3 799
|
||||||
|
7869: 78 6 9
|
||||||
|
17332662: 884 92 9 3 18 93 71
|
||||||
|
2440915: 8 9 7 653 6
|
||||||
|
15733970915: 4 861 9 9 8 9 9 5 5 2 28 4
|
||||||
|
439241: 581 756 5
|
||||||
|
47370912526: 80 2 900 7 549 7 916 6
|
||||||
|
19118489: 91 5 2 42 92
|
||||||
|
2351: 94 7 877 2 293 96 5 1
|
||||||
|
70788678480: 635 5 909 1 338 60 6
|
||||||
|
9040966: 8 824 153 63 967
|
||||||
|
147719448: 3 7 6 4 65 6 7 9 4 1 86 3
|
||||||
|
11021197: 6 5 566 31 2 963 3 9 7
|
||||||
|
3246: 1 4 97 8 133 9
|
||||||
|
44294322: 76 92 181 7 5 4
|
||||||
|
6832: 9 3 717 9 76 5 55
|
||||||
|
19494129793: 57 475 1 6 3 6 5 2 7 6 6 4
|
||||||
|
9556815244: 23 89 4 806 9 244
|
||||||
|
110947298: 43 89 4 36 99 770 73
|
||||||
|
5451085837: 2 957 3 5 8 3 3 766 35 3
|
||||||
|
240063473: 2 41 777 2 641
|
||||||
|
453866: 3 6 226 5 372 26
|
||||||
|
446578583: 41 610 372 48 23
|
||||||
|
12195: 2 7 3 189 8
|
||||||
|
3890269: 9 658 2 4 11 82 4 517
|
||||||
|
2887: 8 8 2 2 45 7
|
||||||
|
8904: 957 3 47 49 3
|
||||||
|
11794: 4 2 5 880 354
|
||||||
|
480024: 36 5 3 1 43 54 841 452
|
||||||
|
1543132419: 57 8 2 1 3 79 68 7 8 1 1 2
|
||||||
|
8760042: 66 4 264 79 87 6
|
||||||
|
13212706657: 8 148 9 71 9 6 9 6 3 9 6 4
|
||||||
|
212364454: 80 4 71 21 7 5 8 9 886
|
||||||
|
3632196262: 7 9 38 31 5 1 19 6 265
|
||||||
|
230366245561: 8 4 7 597 8 40 879 1 4
|
||||||
|
18161109: 1 88 9 4 79 90 7
|
||||||
|
2675573: 74 3 36 7 73
|
||||||
|
490: 77 58 3 3 73
|
||||||
|
2213131: 787 38 74 1 86
|
||||||
|
31346028045: 9 7 58 52 1 42 50 2 5 5 9
|
||||||
|
91722168: 29 888 218 2 88 80
|
||||||
|
44722: 7 783 4 34 6 9 9 1 1
|
||||||
|
4331734176: 8 2 5 293 40 2 6 7 4 44 3
|
||||||
|
24898715: 2 69 7 652 1 5 3 4 6 6 5
|
||||||
|
27035414: 8 5 665 87 8 3 3 3 6 9 3 2
|
||||||
|
509667438647: 5 7 91 41 1 4 59 5 5 8 8 7
|
||||||
|
6234717: 2 81 7 1 6 4 2 9 446 83
|
||||||
|
99133342: 501 50 15 565 181 7
|
||||||
|
9054980: 11 53 356 6 978
|
||||||
|
245610701: 1 1 45 3 95 215 641 62
|
||||||
|
179: 1 66 84 1 27
|
||||||
|
4840002: 97 308 2 81 12 5 76
|
||||||
|
551096: 81 754 58 8 9 836
|
||||||
|
338184: 25 2 4 1 7 57 16 2 8 61
|
||||||
|
67836: 23 607 772 3 8 1 8 2 6 1
|
||||||
|
14597232792: 5 61 754 9 7 8 1 99 582
|
||||||
|
31904: 3 1 82 371
|
||||||
|
3612155: 70 82 5 711 55
|
||||||
|
4060: 7 57 7 1 63
|
||||||
|
23424: 1 146 16 6 4
|
||||||
|
1693015: 6 7 2 2 21 6 7 6 1 23 315
|
||||||
|
2467808: 3 7 405 2 51 1 7 2 2 8 23
|
||||||
|
29: 26 1 2
|
||||||
|
207: 1 2 53 129 3 7 12
|
||||||
|
4972800: 6 1 4 6 60 5 8 7 2 48 700
|
||||||
|
30142: 1 67 4 54 2 597 2
|
||||||
|
1545836: 686 839 482 5 77 61
|
||||||
|
2704: 5 1 4 1 38 25 6 265 38 4
|
||||||
|
1563986: 23 7 1 8 8 4 7 9 281 41
|
||||||
|
10664: 5 91 11 4 6 7
|
||||||
|
350: 81 94 2
|
||||||
|
403926878: 792 51 68 7 8
|
||||||
|
79596243344: 2 6 9 5 63 6 6 3 8 593 3 3
|
||||||
|
206280675: 384 44 41 80 16 67
|
||||||
|
18112461: 43 12 1 9 2 2 39
|
||||||
|
1456398204835: 676 96 847 254 35
|
||||||
|
1344633: 2 1 8 8 636
|
||||||
|
324327360: 6 69 4 9 4 1 2 2 51 952
|
||||||
|
440823601: 255 80 441 49 1
|
||||||
|
19299856: 2 7 71 2 344 684 668
|
||||||
|
1027242: 9 3 11 7 37 9 8 9 17 9
|
||||||
|
11695: 2 48 9 5 16 64 9 5
|
||||||
|
358775: 7 527 4 97 5 468 5 76
|
||||||
|
5959070362: 8 784 950 669 5 8 62
|
||||||
|
420608: 59 19 674 4 8
|
||||||
|
107592: 156 4 2 38 71 397 5
|
||||||
|
503260: 915 55 5 1 5
|
||||||
|
531488: 412 590 76 5 871 272
|
||||||
|
1510282641: 91 109 6 828 7 8 5 38 1
|
||||||
|
132072480: 5 5 2 466 9 8 35 8 8 41
|
||||||
|
17849: 13 8 222 52 8 891
|
||||||
|
3701387523: 8 3 7 7 1 474 1 5 8 6 4
|
||||||
|
835773: 806 85 7 67 2 2 2 7
|
||||||
|
1167510261: 421 69 8 574 70 1
|
||||||
|
12029: 1 4 2 2 4 7 8 24 4 52 589
|
||||||
|
171231: 4 3 849 2 31
|
||||||
|
19016113719: 49 46 586 9 729
|
||||||
|
14155834: 13 2 17 938 7 76 53 2
|
||||||
|
91018233: 8 7 5 3 61 9 24 74 2 7 1
|
||||||
|
126876: 866 6 6 543 4
|
||||||
|
39928: 77 4 4 6 121
|
||||||
|
9525173985: 9 58 26 7 994 8
|
||||||
|
83216359: 63 125 840 286 526
|
||||||
|
2073023101759: 94 90 49 64 65 589
|
||||||
|
294072: 3 774 7 9 44 6 5 3 86 8
|
||||||
|
273916: 96 30 2 32 94
|
||||||
|
73188: 19 1 5 8 52 3 2 2 6 4 6 6
|
||||||
|
12028: 7 3 4 4 2 7 7 65 297 291
|
||||||
|
1842707: 8 665 37 74 33
|
||||||
|
37510292: 676 9 51 1 70 6 727
|
||||||
|
9814168: 18 36 73 63 17 8
|
||||||
|
12172773: 209 719 9 2 9 801
|
||||||
|
51065063: 1 4 1 38 9 6 4 3 396 7 9 8
|
||||||
|
2334810924: 778 270 301 3 22
|
||||||
|
29246170796314: 265 8 9 4 9 8 4 479 3 14
|
||||||
|
1280: 9 7 4 8 8
|
||||||
|
45238: 36 3 411 310 31 3 506
|
||||||
|
42039: 8 5 7 300 7 7 1 27 1 2 1
|
||||||
|
142732987: 41 14 35 71 939 87
|
||||||
|
13812801009: 1 298 739 29 16 4 9 1
|
||||||
|
1463253621: 40 31 363 5 6 9 52
|
||||||
|
805935954: 4 7 2 34 90 1 5 6 22 93
|
||||||
|
469930488773: 370 31 794 516 7 73
|
||||||
|
3234662819: 326 992 74 2 818
|
||||||
|
866841940: 2 28 6 92 551 2 5 82 95
|
||||||
|
875: 4 71 3 6 791
|
||||||
|
197215: 19 7 21 3
|
||||||
|
12480: 101 7 53 77 439 2
|
||||||
|
2672527509618: 685 50 867 9 96 17
|
||||||
|
496665004: 8 4 90 9 650 5
|
||||||
|
376433664: 30 2 633 248 543
|
||||||
|
5000074660: 760 851 659 67 98
|
||||||
|
6485611: 6 5 3 2 73 2 670 88 6 5
|
||||||
|
32032: 318 5 9 5 4 1 51
|
||||||
|
2709: 18 3 36 3 762
|
||||||
|
446: 79 4 9 1 10 1 3 4 7 9 2 1
|
||||||
|
2194294: 55 4 5 6 4 6 4 8 2 945 2 2
|
||||||
|
17741345: 58 510 97 322 424 9
|
||||||
|
228539502: 7 177 69 6 39 9 2 2
|
||||||
|
1599924195: 58 75 1 326 1 12 1 95
|
||||||
|
5916685992: 471 35 3 9 8 89 2 4 24 7
|
||||||
|
94186: 107 1 828 5 1 88
|
||||||
|
49372620: 45 656 3 40 231 7
|
||||||
|
428120052: 83 292 89 2 88 50
|
||||||
|
10585951548: 7 665 97 7 3 5 8 5 3 2 58
|
||||||
|
9480000: 50 9 7 4 2 185 4 5 7 87 4
|
||||||
|
37505: 1 3 91 688 20 82
|
||||||
|
11236184: 6 5 1 8 7 9 942 6 2 7 8
|
||||||
|
501946945: 7 717 3 91 13 65 36 6 3
|
||||||
|
55557272682: 95 9 40 88 3 71 5 260 2
|
||||||
|
28150754534: 6 61 3 6 16 67 3 45 3 6
|
||||||
|
2115: 4 3 33 5 47
|
||||||
|
939871812: 5 383 873 2 1 2
|
||||||
|
93547075: 86 35 741 98 271 4 40
|
||||||
|
20581705224: 5 8 8 8 7 3 66 1 3 4 19 5
|
||||||
|
6405520: 914 32 7 747 7
|
||||||
|
3596788: 877 4 1 1 87 73 3 50 7
|
||||||
|
30316467826: 6 81 7 24 5 2 5 535 31 3
|
||||||
|
37138473: 789 9 5 2 65 12 9 6 87
|
||||||
|
33816: 1 58 566 927 18 43
|
||||||
|
682046097: 7 329 4 829 31 3
|
||||||
|
2870: 61 41 3 53 6 307
|
||||||
|
7666: 7 50 39 8 9 7 747
|
||||||
|
1513: 9 5 1 69 343 561 495
|
||||||
|
1693: 1 9 4 851 802
|
||||||
|
1386357039925: 65 81 7 9 40 3 5 57 7 2 5
|
||||||
|
223981525: 33 722 82 9 9
|
||||||
|
971: 545 63 8 70 204 81
|
||||||
|
227903141: 1 54 28 7 2 458 615 47
|
||||||
|
35245491: 1 294 88 52 919
|
||||||
|
2579624: 7 906 9 109 2 5 39 8 4 8
|
||||||
|
687164624: 6 278 7 6 7 66 771 5 5 8
|
||||||
|
16510690: 9 23 36 7 51 350 1 4 8
|
||||||
|
17926: 372 99 5 66 33 40
|
||||||
|
9312: 5 3 1 5 2 8 506 996 6
|
||||||
|
53640: 62 24 4 8 9
|
||||||
|
6812766: 6 6 6 8 4 4 7 6 3 1 60 933
|
||||||
|
103952546352: 2 8 5 8 1 50 3 7 4 46 350
|
||||||
|
4693680: 8 5 96 38 33 745 954
|
||||||
|
3580: 324 3 9 8 892
|
||||||
|
1047858874: 9 95 7 579 8 271 877
|
||||||
|
1965477888: 507 1 726 88 666 8
|
||||||
|
431607: 26 6 14 3 957
|
||||||
|
13483: 7 9 842 7 4
|
||||||
|
959774: 11 79 85 5 169 588 8 9
|
||||||
|
9743488: 90 63 8 26 66 40
|
||||||
|
345969792: 9 3 1 9 9 53 8 2 8 882 6 6
|
||||||
|
973866244: 2 9 485 5 648 606 3 1
|
||||||
|
129297226: 647 293 1 852 7 97 9
|
||||||
|
1804774500: 212 10 2 63 9 9 30 10 5
|
||||||
|
161032703165: 7 9 1 5 4 654 5 3 167
|
||||||
|
30144: 770 166 610 7 331 2 8
|
||||||
|
31064922: 394 7 90 32 860 2
|
||||||
|
69427692: 10 882 472 509 68 23
|
||||||
|
1925252674: 273 953 28 74 4
|
||||||
|
30704490: 1 8 1 344 2 9 2 4 7 9 5 82
|
||||||
|
4323034: 30 1 7 50 558 196 133
|
||||||
|
1339240: 7 38 531 1 19 7 8
|
||||||
|
70185781: 98 6 443 672 1 85
|
||||||
|
813143: 7 66 42 5 140
|
||||||
|
75181551269: 75 175 6 551 269
|
||||||
|
328827175: 35 786 1 1 8 39 5 76 75
|
||||||
|
163872: 8 76 5 1 5 46 14 8
|
||||||
|
271728535: 525 7 98 4 2 4 4 9 53 1 5
|
||||||
|
19218: 5 6 9 5 7 95 28
|
||||||
|
295849: 8 9 8 3 7 45 1 554 8 191
|
||||||
|
86507: 22 6 8 657 261 9 9 566
|
||||||
|
9851235: 22 41 6 979 4 470 4 3 5
|
||||||
|
343170: 900 337 6 17 187 45
|
||||||
|
21212104074: 87 368 14 666 8 5 74
|
||||||
|
77531035: 9 54 4 624 258 49 392
|
||||||
|
4309521380: 85 845 2 6 9 383
|
||||||
|
152158271: 4 86 933 57 79 6 5
|
||||||
|
96619723194: 1 80 514 3 1 7 3 4 3 1 9 4
|
||||||
|
9108: 8 212 1 41 58 6 3 4 7 3 7
|
||||||
|
438012: 2 92 776 58 6
|
||||||
|
40384643: 6 51 485 745 5 6 508 2
|
||||||
|
694515: 69 451 5
|
||||||
|
26001558: 93 638 76 6 5 358 5 3 3
|
||||||
|
474319676837: 51 93 19 67 6 838
|
||||||
|
4824867: 4 5 559 3 849
|
||||||
|
3270605: 6 33 48 8 43 301 9 919
|
||||||
|
667: 575 7 85
|
||||||
|
5094399750: 54 196 4 14 9 114 955
|
||||||
|
3697150: 27 59 268 9 9 5
|
||||||
|
2127212032: 67 2 253 890 2 4 772 2
|
||||||
|
1362164916000: 7 85 4 5 37 4 87 5 7 254
|
||||||
|
126079693536: 85 76 10 1 748 9 7 7 3 6
|
||||||
|
1011492: 3 2 938 3 39 9 99 1 704
|
||||||
|
12283: 7 72 50 89 2 735 65
|
||||||
|
1190324: 226 30 2 18 96 7 87 77
|
||||||
|
610743265427: 4 225 8 678 6 2 65 42 5
|
||||||
|
33140363: 53 4 5 22 62
|
||||||
|
321300: 6 15 897 70 5
|
||||||
|
345316608: 19 347 6 52 2 3 14 12 3
|
||||||
|
994824: 85 759 58 574 337 2
|
||||||
|
11621232044: 2 7 40 5 9 840 1 8 7 3 8 4
|
||||||
|
61469222: 6 6 8 1 92 5 1 4 345 7 15
|
||||||
|
20439757016: 48 15 8 742 4 8 54 4
|
||||||
|
501377: 5 58 188 7 831 2 6 8 5 9
|
||||||
|
26414262270: 931 52 7 4 5 19 66 87
|
||||||
|
601177: 2 6 729 191 645 37
|
||||||
|
845203: 653 579 22 674 7
|
||||||
|
260571: 28 23 62 1 23 4 2 7 1
|
||||||
|
685358911191: 85 669 863 899 8
|
||||||
|
43059238: 2 5 80 6 9 2 488 3 36 70
|
||||||
|
24993475: 33 212 94 99 38
|
||||||
|
46054008163449: 65 5 72 781 7 454 9 2 4
|
||||||
|
1023722083: 8 1 203 2 2 7 97 6 2 2 1 4
|
||||||
|
124097282: 129 2 536 8 6 2
|
||||||
|
3307281: 14 70 44 358 7 876 9 6
|
||||||
|
1433: 47 55 7 2 5
|
||||||
|
35005582: 9 74 482 726 6 5 7 731
|
||||||
|
2557424016: 133 72 401 6 111
|
||||||
|
120274: 3 4 81 1 154
|
||||||
|
128094: 2 2 250 501 840
|
||||||
|
30203531: 74 816 18 5 5 28
|
||||||
|
1879392072: 99 7 28 16 34 6 4 3 97
|
||||||
|
566236744293: 87 709 5 798 809
|
||||||
|
4538: 7 525 9 7 8 79 670 90
|
||||||
|
6372049: 20 4 59 45 48
|
||||||
|
39931652: 50 465 32 73 651
|
||||||
|
16274678000: 6 38 342 836 413 500
|
||||||
|
97: 87 4 8
|
||||||
|
378250: 7 549 7 9 50
|
||||||
|
2006: 916 77 5 5 2
|
||||||
|
8470: 45 6 7 328 14
|
||||||
|
17113832: 17 2 821 46 99
|
||||||
|
36356: 5 14 6 3 89 71 4
|
||||||
|
82063799: 40 3 7 4 967 1 5 360 7 3
|
||||||
|
730788: 7 19 2 8 8 9 5 287 945 2
|
||||||
|
1185372875: 264 449 3 9 873
|
||||||
|
597: 3 8 8 7 464
|
||||||
|
3258982: 3 77 6 512 74 569 45
|
||||||
|
939460: 13 4 916 823 535
|
||||||
|
5090480: 6 36 7 597 985 8
|
||||||
|
3145335120: 3 1 453 35 117
|
||||||
|
546970: 6 93 2 787 5
|
||||||
|
41812: 9 3 43 206 361 9 706 4
|
||||||
|
1983136733: 90 64 8 72 7 871 491 6
|
||||||
|
24415: 9 4 415 9 7 6 3 16
|
||||||
|
67189: 629 4 424 9 1
|
||||||
|
233813964381: 49 22 188 4 13 87 7 6
|
||||||
|
105452: 2 15 54 952 41
|
||||||
|
55918632: 31 976 3 308 6
|
||||||
|
107993: 2 9 8 34 721 79
|
||||||
|
19168239: 4 2 2 222 18 153 5 8 3 9
|
||||||
|
126871: 51 3 182 52 1 439
|
||||||
|
79828530338: 360 1 8 4 6 3 6 367 9 35
|
||||||
|
16949554: 9 5 11 2 59 59 7 4 5 6 3 2
|
||||||
|
431208231: 9 119 6 9 6 69 536 5 2 4
|
||||||
|
973: 9 13 58
|
||||||
|
226314575979: 6 1 6 332 5 9 4 1 9 6 4 99
|
||||||
|
181082506: 72 730 6 7 94 4 3 2 6 8 4
|
||||||
|
38531034: 6 759 9 276 36 933
|
||||||
|
22169826336: 676 800 33 732 56
|
||||||
|
6219757568: 9 5 709 15 8 8 88 34 6 8
|
||||||
|
3011796480: 7 488 352 80 96 463
|
||||||
|
2115750: 99 6 38 8 86 1 84 93
|
||||||
|
235864382940: 736 156 356 6 90
|
||||||
|
1208: 5 9 38 7 1 1 8 5 5 3 850 5
|
||||||
|
1401: 106 58 8 2 87
|
||||||
|
261398734: 3 66 547 409 9 76 7
|
||||||
|
13517241: 58 6 475 7 7 13 4 6 2 7
|
||||||
|
198887931: 5 8 86 137 6 52 47 4 95
|
||||||
|
66539630664: 8 2 69 1 49 1 155 1 4 4 6
|
||||||
|
3829574829: 4 7 871 96 42 4 5 2 8 4
|
||||||
|
210872: 800 65 86 3 5 998 6 2
|
||||||
|
491639555: 278 41 860 7 87 4 8 8
|
||||||
|
3000446345: 71 418 3 337 5 4 6
|
||||||
|
238535178: 5 118 5 53 4 322 7 4 80
|
||||||
|
8287018777773: 274 98 87 437 4 866 3
|
||||||
|
4853715092217: 970 1 7 43 50 92 210 8
|
||||||
|
10400: 6 3 577 10 7
|
||||||
|
334724384: 8 1 2 487 8 81 840 341
|
||||||
|
831: 5 77 6 5
|
||||||
|
1708025: 540 2 315 4 5 5 630
|
||||||
|
4368960: 4 324 6 740 3
|
||||||
|
709365600: 656 5 89 54 5 3 3
|
||||||
|
1269313926: 28 2 5 347 7 6 9 2 444 8
|
||||||
|
184904693: 7 55 75 8 4 18 505 2 96
|
||||||
|
75131585: 75 51 796 5 9 7 5 396 2
|
||||||
|
549981: 7 4 46 6 21 6 5 9 72 6 1 2
|
||||||
|
4619908866429: 87 598 888 66 425 3
|
||||||
|
81234530822: 5 321 1 8 9 1 91 5 7 545
|
||||||
|
21949216: 71 3 3 9 1 1 603 7 8 5 2 9
|
||||||
|
377: 347 28 1 1 1
|
||||||
|
3923705: 2 9 22 615 5
|
||||||
|
1775196500: 5 928 9 34 907 70 770
|
||||||
|
1513952: 987 9 1 8 5 38 6 9 3 9 1 4
|
||||||
|
60084313170: 862 99 9 8 238 2 46 88
|
||||||
|
64254966056: 3 96 2 32 52 23 9 301 9
|
||||||
|
1079: 5 2 987 81
|
||||||
|
1057055: 6 12 66 42 6 54 7 815
|
||||||
|
538588: 8 972 3 7 35 6
|
||||||
|
39669: 8 6 8 53 47 5 797 97
|
||||||
|
2200: 22 29 4 5 8
|
||||||
|
3350421518: 84 5 44 4 1 428 9 5 12 6
|
||||||
|
728426: 4 9 7 4 8 181 608 644 6
|
||||||
|
9638460488609: 1 3 38 675 9 8 4 8 860 8
|
||||||
|
33605379642: 49 712 1 676 45
|
||||||
|
188328: 3 1 5 5 26 521 332 7 7
|
||||||
|
99011: 150 65 4 7 634 867
|
||||||
|
194175906: 49 7 55 402 7 8 8 90 5 1
|
||||||
|
48556303: 75 40 9 95 49 9
|
46
2024/day-7/solution-1.awk
Normal file
46
2024/day-7/solution-1.awk
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env awk
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
FS = "[: ]"
|
||||||
|
total = 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sum = $1
|
||||||
|
num_opers = 2
|
||||||
|
num_of_nums = NF - 2
|
||||||
|
num_of_results = 1
|
||||||
|
|
||||||
|
# Create list of numbers
|
||||||
|
# Create list of results
|
||||||
|
for (i = 3; i <= NF; i++) {
|
||||||
|
nums[i-2] = $i
|
||||||
|
}
|
||||||
|
results[1] = nums[1]
|
||||||
|
# Starting applying additions to results
|
||||||
|
# Starting from second number
|
||||||
|
for (i = 2; i <= num_of_nums; i++) {
|
||||||
|
number = nums[i]
|
||||||
|
for (j = 1; j <= num_of_results; j++) {
|
||||||
|
element = results[j]
|
||||||
|
results[j+num_of_results] = element * number
|
||||||
|
results[j] = results[j] + number
|
||||||
|
}
|
||||||
|
num_of_results *= num_opers
|
||||||
|
}
|
||||||
|
expected = ( num_of_nums - 1 ) * num_opers
|
||||||
|
|
||||||
|
# Check results
|
||||||
|
for (i=1; i <= num_of_results; i++) {
|
||||||
|
if ( results[i] == $1 ) {
|
||||||
|
start_val = i % num_of_nums
|
||||||
|
stack_num = (i - start_val) / num_of_nums
|
||||||
|
total = total + $1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete results
|
||||||
|
delete nums
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
print total
|
||||||
|
}
|
53
2024/day-7/solution-2.awk
Normal file
53
2024/day-7/solution-2.awk
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env awk
|
||||||
|
|
||||||
|
# Just pre-compute all possible results
|
||||||
|
# and check against the sum
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
FS = "[: ]"
|
||||||
|
total = 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sum = $1
|
||||||
|
num_opers = 3 # +, *, ||
|
||||||
|
num_of_nums = NF - 2
|
||||||
|
num_of_results = 1
|
||||||
|
|
||||||
|
# Create list of numbers
|
||||||
|
for (i = 3; i <= NF; i++) {
|
||||||
|
nums[i-2] = $i
|
||||||
|
}
|
||||||
|
results[1] = nums[1]
|
||||||
|
# Starting applying operator
|
||||||
|
# Starting from second number
|
||||||
|
# index range of num_of_results is for each operator
|
||||||
|
# 1 - num_of_results - addition
|
||||||
|
# num_of_results+1 - num_of_results*2 - multiplication
|
||||||
|
# num_of_results*2+1 - num_of_results*3 - concat
|
||||||
|
for (i = 2; i <= num_of_nums; i++) {
|
||||||
|
number = nums[i]
|
||||||
|
for (j = 1; j <= num_of_results; j++) {
|
||||||
|
element = results[j]
|
||||||
|
results[j] = results[j] + number # Add
|
||||||
|
results[j+num_of_results] = element * number # Mul
|
||||||
|
results[j+num_of_results*2] = (element "" number) + 0 # Concat
|
||||||
|
}
|
||||||
|
num_of_results *= num_opers
|
||||||
|
}
|
||||||
|
expected = ( num_of_nums - 1 ) * num_opers
|
||||||
|
|
||||||
|
# Check results
|
||||||
|
for (i=1; i <= num_of_results; i++) {
|
||||||
|
if ( results[i] == $1 ) {
|
||||||
|
start_val = i % num_of_nums
|
||||||
|
stack_num = (i - start_val) / num_of_nums
|
||||||
|
total = total + $1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete results
|
||||||
|
delete nums
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
print total
|
||||||
|
}
|
50
2024/day-8/input
Normal file
50
2024/day-8/input
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
..........K........................A..............
|
||||||
|
.K................................A...............
|
||||||
|
......................................D.....A.....
|
||||||
|
....................................6............D
|
||||||
|
..................................................
|
||||||
|
.............................d....................
|
||||||
|
.........4.e.......................DT.B...........
|
||||||
|
....................d.....D......A...........B....
|
||||||
|
.............K....................................
|
||||||
|
...........................k......................
|
||||||
|
...w..............4.....................y.........
|
||||||
|
........w.........................................
|
||||||
|
..............g..k..............d..........y......
|
||||||
|
.....w.....Q..............................T.......
|
||||||
|
...............b..........k................6......
|
||||||
|
.................................W...T............
|
||||||
|
................w..............BW..T..............
|
||||||
|
............g....4e.....................W.........
|
||||||
|
.......1.................g.......................W
|
||||||
|
........k..........................6.....0........
|
||||||
|
.................a................................
|
||||||
|
....................4.a........3.g..............7.
|
||||||
|
.............m........................I.0.........
|
||||||
|
..............K7..............V...................
|
||||||
|
....Q................................I............
|
||||||
|
..9........b......................I...............
|
||||||
|
...................d..............................
|
||||||
|
.......e..........................................
|
||||||
|
....e...........t..E................3.............
|
||||||
|
......1..aQ........t....v.....3..........I..0.....
|
||||||
|
...........................v.t.....3.7............
|
||||||
|
..........i.......m........M......................
|
||||||
|
...Q..29..a...................m...................
|
||||||
|
...9......q..........mt...........................
|
||||||
|
....1...............Y.....M.........7.............
|
||||||
|
..........b..1...E.v..Y...........................
|
||||||
|
................v..........q...............0......
|
||||||
|
..................E.................5.............
|
||||||
|
9...i..2b................................8........
|
||||||
|
.....q..2............Y..M.........................
|
||||||
|
............q...............................V.....
|
||||||
|
...i.................................V............
|
||||||
|
.i..............E............M....................
|
||||||
|
.........................................G........
|
||||||
|
............8................Y....................
|
||||||
|
.........2................8..............5........
|
||||||
|
......................................5....V......
|
||||||
|
............................................G.....
|
||||||
|
.....................................5...........G
|
||||||
|
.................................8................
|
63
2024/day-8/solution-1.sh
Normal file
63
2024/day-8/solution-1.sh
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
FILE=input
|
||||||
|
LEN=$( head -1 "$FILE" | sed -E 's/(.)/\1\ /g' | awk '{printf NF}' )
|
||||||
|
|
||||||
|
read -r -a MAP_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )"
|
||||||
|
read -r -a SHADOW_ARRAY <<< "$( < "$FILE" sed -E 's/(.)/\1\ /g' | paste -s -d ' ' )"
|
||||||
|
#printf "MAP_LEN: %s, NF: %s\n" "${#MAP_ARRAY[@]}" "$LEN" >&2
|
||||||
|
|
||||||
|
for CHAR in $( < "$FILE" grep -Eo '[^\.]' | sort -u | paste -s -d' ' )
|
||||||
|
do
|
||||||
|
# Get indices for antennae
|
||||||
|
LINE="$(
|
||||||
|
for (( i=0; i<${#MAP_ARRAY[@]}; i++ ))
|
||||||
|
do
|
||||||
|
if [[ ${MAP_ARRAY[i]} == "$CHAR" ]]
|
||||||
|
then
|
||||||
|
printf "%s " "$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)"
|
||||||
|
#printf "%s\n" "$LINE" >&2
|
||||||
|
read -r -a IDX_ARRAY <<< "$LINE"
|
||||||
|
#printf "idx: %s " "${IDX_ARRAY[@]}" >&2
|
||||||
|
#printf "\n" >&2
|
||||||
|
|
||||||
|
# Get all combinations
|
||||||
|
for (( i=0; i<${#IDX_ARRAY[@]}-1; i++ ))
|
||||||
|
do
|
||||||
|
A=${IDX_ARRAY[i]}
|
||||||
|
for (( j=i+1; j<${#IDX_ARRAY[@]}; j++ ))
|
||||||
|
do
|
||||||
|
B=${IDX_ARRAY[j]}
|
||||||
|
DIFF=$(( B - A ))
|
||||||
|
VDIFF=$(( (B / LEN) - (A / LEN) ))
|
||||||
|
HEAD=$(( A - DIFF ))
|
||||||
|
TAIL=$(( B + DIFF ))
|
||||||
|
HEADVDIFF=$(( (A / LEN) - (HEAD / LEN) ))
|
||||||
|
TAILVDIFF=$(( (TAIL / LEN) - (B / LEN) ))
|
||||||
|
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
|
||||||
|
# Check if out of bounds
|
||||||
|
if [[ $HEAD -lt ${#MAP_ARRAY[@]} ]] && \
|
||||||
|
[[ $HEAD -ge 0 ]] && \
|
||||||
|
[[ $HEADVDIFF -eq $VDIFF ]]
|
||||||
|
then
|
||||||
|
SHADOW_ARRAY[HEAD]=X # Mark on shadow map
|
||||||
|
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
|
||||||
|
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
|
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
|
12
2024/day-8/test-input
Normal file
12
2024/day-8/test-input
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
............
|
||||||
|
........0...
|
||||||
|
.....0......
|
||||||
|
.......0....
|
||||||
|
....0.......
|
||||||
|
......A.....
|
||||||
|
............
|
||||||
|
............
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
............
|
||||||
|
............
|
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