From 1654f7d9c96729d5a48142c144d26c8f6314fe6a Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:35:28 -0600 Subject: [PATCH] feat: solved day 11 part 2 --- cmd/11/main.go | 71 +++++---------------------------------------- cmd/11/main_test.go | 25 +--------------- 2 files changed, 9 insertions(+), 87 deletions(-) diff --git a/cmd/11/main.go b/cmd/11/main.go index 2e0ac20..a54a013 100644 --- a/cmd/11/main.go +++ b/cmd/11/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "strings" "github.com/StevanFreeborn/advent-of-code-2025/internal/file" @@ -47,60 +46,8 @@ func SolvePartOne(filePath string) int { return pathCount } -type node struct { - value string - fftSeen bool - dacSeen bool -} - func SolvePartTwo(filePath string) int { adjacencyList := map[string][]string{} - - for line := range file.ReadLines(filePath) { - parts := strings.Split(line, ": ") - from := parts[0] - toList := strings.Split(parts[1], " ") - adjacencyList[from] = toList - } - - stack := stack.New[node]() - stack.Push(node{ - value: SVR_NODE, - }) - pathCount := 0 - - for stack.IsEmpty() == false { - current, _ := stack.Pop() - - if current.value == FFT_NODE { - current.fftSeen = true - } - - if current.value == DAC_NODE { - current.dacSeen = true - } - - if current.value == OUT_NODE && current.dacSeen && current.fftSeen { - pathCount++ - continue - } - - neighbors := adjacencyList[current.value] - - for _, n := range neighbors { - stack.Push(node{ - value: n, - fftSeen: current.fftSeen, - dacSeen: current.dacSeen, - }) - } - } - - return pathCount -} - -func SolvePartTwoAgain(filePath string) int { - adjacencyList := map[string][]string{} inDegrees := map[string]int{} allNodes := map[string]bool{} @@ -147,8 +94,14 @@ func SolvePartTwoAgain(filePath string) int { } } + pathA := countPaths(SVR_NODE, FFT_NODE, processOrder, adjacencyList) * countPaths(FFT_NODE, DAC_NODE, processOrder, adjacencyList) * countPaths(DAC_NODE, OUT_NODE, processOrder, adjacencyList) + pathB := countPaths(SVR_NODE, DAC_NODE, processOrder, adjacencyList) * countPaths(DAC_NODE, FFT_NODE, processOrder, adjacencyList) * countPaths(FFT_NODE, OUT_NODE, processOrder, adjacencyList) + return pathA + pathB +} + +func countPaths(start string, end string, processOrder []string, adjacencyList map[string][]string) int { pathsCount := map[string]int{} - pathsCount[SVR_NODE] = 1 + pathsCount[start] = 1 for _, item := range processOrder { if pathsCount[item] == 0 { @@ -160,13 +113,5 @@ func SolvePartTwoAgain(filePath string) int { } } - // TODO: Could I process the graph - // in smaller pieces and then multiply - // those path to figure out what the - // total number of paths are. - fmt.Println(pathsCount[OUT_NODE]) - fmt.Println(pathsCount[DAC_NODE]) - fmt.Println(pathsCount[FFT_NODE]) - - return 0 + return pathsCount[end] } diff --git a/cmd/11/main_test.go b/cmd/11/main_test.go index 29d9ea2..950f6c1 100644 --- a/cmd/11/main_test.go +++ b/cmd/11/main_test.go @@ -1,7 +1,6 @@ package main_test import ( - "fmt" "testing" solution "github.com/StevanFreeborn/advent-of-code-2025/cmd/11" @@ -38,9 +37,7 @@ func TestSolvePartTwoWithExampleInput(t *testing.T) { } func TestSolvePartTwoWithInput(t *testing.T) { - expected := -1 - - fmt.Println("HERE") + expected := 393_474_305_030_400 result := solution.SolvePartTwo("INPUT.txt") @@ -48,23 +45,3 @@ func TestSolvePartTwoWithInput(t *testing.T) { t.Errorf("SolvePartTwo(INPUT.txt) = %d; want %d", result, expected) } } - -func TestSolvePartTwoAgainWithExampleInput(t *testing.T) { - expected := 2 - - result := solution.SolvePartTwoAgain("EXAMPLE_TWO.txt") - - if result != expected { - t.Errorf("SolvePartTwoAgain(EXAMPLE_TWO.txt) = %d; want %d", result, expected) - } -} - -func TestSolvePartTwoAgainWithInput(t *testing.T) { - expected := -1 - - result := solution.SolvePartTwoAgain("INPUT.txt") - - if result != expected { - t.Errorf("SolvePartTwoAgain(INPUT.txt) = %d; want %d", result, expected) - } -}