Broken day 10 part 1
This commit is contained in:
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
|
147
2024/day-10/solution-1.sh
Normal file
147
2024/day-10/solution-1.sh
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
#!/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
|
||||||
|
printf "Get: %s \n" "$GET_NUM" >&2
|
||||||
|
printf "trail: %s \n" "$TRAIL" >&2
|
||||||
|
printf "neighbors found : %s \n" "${COMBINATIONS[@]}" >&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[@]}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recurse
|
||||||
|
TOTAL=0
|
||||||
|
NEXT_NUM=$(( GET_NUM+=1 ))
|
||||||
|
for INDEX in "${COMBINATIONS[@]}"
|
||||||
|
do
|
||||||
|
COUNT=$(
|
||||||
|
get_nine \
|
||||||
|
"$NEXT_NUM" \
|
||||||
|
"$( get_valid_neighbors "$INDEX" )" \
|
||||||
|
"$INDEX"
|
||||||
|
)
|
||||||
|
(( TOTAL+=COUNT ))
|
||||||
|
done
|
||||||
|
printf "%s" "$TOTAL"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_valid_neighbors () {
|
||||||
|
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
PATH_COUNT=0
|
||||||
|
ITER=999999
|
||||||
|
for TRAILHEAD in "${TRAILHEADS[@]}"
|
||||||
|
do
|
||||||
|
COUNT=$( get_nine "1" "$( get_valid_neighbors "$TRAILHEAD" )" "$TRAILHEAD" )
|
||||||
|
(( PATH_COUNT+=COUNT ))
|
||||||
|
(( ITER-- ))
|
||||||
|
if [[ $ITER -eq 0 ]] ;then break; fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "%s\n" "$PATH_COUNT"
|
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
|
Reference in New Issue
Block a user