From 4d7c6fb569fd2481cebae5c0fd7c026c4efd7fca Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sat, 20 Dec 2025 07:03:12 -0600 Subject: [PATCH] feat: solve day 10 part one --- README.md | 2 +- cmd/10/main.go | 59 ++++++++++++++++++++++++++++++++++++++++++--- cmd/10/main_test.go | 14 +++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a786aa6..076360b 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,6 @@ go test ./cmd/01 | 07 | [Problem](https://adventofcode.com/2025/day/7) | [Solution](./cmd/07/) | FIFO for life. 🤣. Fuck me...part 2 I found really difficult and the use of DFS was obvious, but doing the memoizing was not. | | 08 | [Problem](https://adventofcode.com/2025/day/8) | [Solution](./cmd/08/) | Part 1 had me down bad. I was on the right track with my original solution, but ended up doing it in a brute force way then figuring out my mistake with the original. Fuck this guy. Part 2 was so much easier once part 1 was sorted out. | | 09 | [Problem](https://adventofcode.com/2025/day/9) | [Solution](./cmd/09/) | Part 1 was such a nice break from the madness of day 8. Basically I need to go build some video games. | -| 10 | [Problem](https://adventofcode.com/2025/day/10) | [Solution](./cmd/10/) | | +| 10 | [Problem](https://adventofcode.com/2025/day/10) | [Solution](./cmd/10/) | Part 1 took me way to look cause I couldn't figure out how to generate all button press combinations. | | 11 | [Problem](https://adventofcode.com/2025/day/11) | [Solution](./cmd/11/) | | | 12 | [Problem](https://adventofcode.com/2025/day/12) | [Solution](./cmd/12/) | | diff --git a/cmd/10/main.go b/cmd/10/main.go index 2d621d1..e1cd8ea 100644 --- a/cmd/10/main.go +++ b/cmd/10/main.go @@ -2,7 +2,9 @@ package main import ( "fmt" + "math" "regexp" + "slices" "strconv" "strings" @@ -77,8 +79,60 @@ func NewButton(line string) button { } } -func (m machine) Configure([]bool) int { - return 0 +func (m machine) Configure(desiredState []bool) int { + combinations := [][]bool{} + minPresses := math.MaxInt + numberOfButtons := len(m.buttons) + numberOfCombinations := int(math.Pow(2, float64(numberOfButtons))) + currentCombination := make([]bool, numberOfButtons) + + for range numberOfCombinations { + temp := make([]bool, numberOfButtons) + copy(temp, currentCombination) + + combinations = append(combinations, temp) + + for j := range numberOfButtons { + if currentCombination[j] == false { + currentCombination[j] = true + break + } else { + currentCombination[j] = false + } + } + } + + for _, currentCombination := range combinations { + currentPresses := 0 + switchesCopy := []bool{} + + for _, v := range m.switches { + switchesCopy = append(switchesCopy, v) + } + + for bi, bs := range currentCombination { + if bs == false { + continue + } + + currentPresses++ + switchesToToggle := m.buttons[bi].switchesControlled + + for _, switchToToggle := range switchesToToggle { + switchesCopy[switchToToggle] = !switchesCopy[switchToToggle] + } + } + + if slices.Equal(switchesCopy, desiredState) == false { + continue + } + + if currentPresses < minPresses { + minPresses = currentPresses + } + } + + return minPresses } func SolvePartOne(filePath string) int { @@ -105,7 +159,6 @@ func SolvePartOne(filePath string) int { numberOfLights := len(lightDiagram) machine := NewMachine(numberOfLights, buttonsPart) - fmt.Println(machine) buttonsPressed := machine.Configure(lightDiagram) total += buttonsPressed } diff --git a/cmd/10/main_test.go b/cmd/10/main_test.go index 573e6bf..9b813b0 100644 --- a/cmd/10/main_test.go +++ b/cmd/10/main_test.go @@ -6,8 +6,8 @@ import ( solution "github.com/StevanFreeborn/advent-of-code-2025/cmd/10" ) -func TestSolvePartOne(t *testing.T) { - expected := -1 +func TestSolvePartOneWithExampleInput(t *testing.T) { + expected := 7 result := solution.SolvePartOne("EXAMPLE.txt") @@ -15,3 +15,13 @@ func TestSolvePartOne(t *testing.T) { t.Errorf("got %d but wanted %d", result, expected) } } + +func TestSolvePartOneWithInput(t *testing.T) { + expected := -1 + + result := solution.SolvePartOne("INPUT.txt") + + if result != expected { + t.Errorf("got %d but wanted %d", result, expected) + } +}