From eff5810fe37993738ab74f4f5aa4c3cb88397e69 Mon Sep 17 00:00:00 2001 From: Clement Date: Tue, 10 Dec 2024 22:24:58 +0800 Subject: [PATCH] Broken day 10 part 1 --- 2024/day-10/input | 54 ++++++++++++++ 2024/day-10/solution-1.sh | 147 ++++++++++++++++++++++++++++++++++++++ 2024/day-10/test-input-1 | 8 +++ 2024/day-10/test-result-1 | 1 + 4 files changed, 210 insertions(+) create mode 100644 2024/day-10/input create mode 100644 2024/day-10/solution-1.sh create mode 100644 2024/day-10/test-input-1 create mode 100644 2024/day-10/test-result-1 diff --git a/2024/day-10/input b/2024/day-10/input new file mode 100644 index 0000000..da39f3c --- /dev/null +++ b/2024/day-10/input @@ -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 diff --git a/2024/day-10/solution-1.sh b/2024/day-10/solution-1.sh new file mode 100644 index 0000000..5ec6afa --- /dev/null +++ b/2024/day-10/solution-1.sh @@ -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&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" diff --git a/2024/day-10/test-input-1 b/2024/day-10/test-input-1 new file mode 100644 index 0000000..cada9b3 --- /dev/null +++ b/2024/day-10/test-input-1 @@ -0,0 +1,8 @@ +89010123 +78121874 +87430965 +96549874 +45678903 +32019012 +01329801 +10456732 diff --git a/2024/day-10/test-result-1 b/2024/day-10/test-result-1 new file mode 100644 index 0000000..7facc89 --- /dev/null +++ b/2024/day-10/test-result-1 @@ -0,0 +1 @@ +36