From b16b0521156272dbd229bf096a487fc0eb2b8377 Mon Sep 17 00:00:00 2001 From: Kharec Date: Wed, 10 Dec 2025 16:51:57 +0100 Subject: [PATCH] feat: solve part one using brute-force --- internal/2025/DayTen/code.go | 91 ++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 internal/2025/DayTen/code.go diff --git a/internal/2025/DayTen/code.go b/internal/2025/DayTen/code.go new file mode 100644 index 0000000..f95baee --- /dev/null +++ b/internal/2025/DayTen/code.go @@ -0,0 +1,91 @@ +package dayten + +import ( + "advent-of-code/internal/registry" + "os" + "regexp" + "strconv" + "strings" +) + +func init() { + registry.Register("2025D10", ParseInput, PartOne, PartTwo) +} + +func ParseInput(filepath string) []string { + content, _ := os.ReadFile(filepath) + return strings.Split(string(content), "\n") +} + +func parseMachine(line string) ([]bool, [][]int) { + bracketRegex := regexp.MustCompile(`\[([.#]+)\]`) + parenthesisRegex := regexp.MustCompile(`\(([^)]+)\)`) + + bracketMatch := bracketRegex.FindStringSubmatch(line) + targetString := bracketMatch[1] + target := make([]bool, len(targetString)) + for idx, char := range targetString { + target[idx] = char == '#' + } + + parenthesisMatches := parenthesisRegex.FindAllStringSubmatch(line, -1) + buttons := make([][]int, 0, len(parenthesisMatches)) + + for _, match := range parenthesisMatches { + buttonString := match[1] + parts := strings.Split(buttonString, ",") + button := make([]int, 0, len(parts)) + for _, part := range parts { + light, _ := strconv.Atoi(part) + button = append(button, light) + } + buttons = append(buttons, button) + } + + return target, buttons +} + +func PartOne(data []string) int { + total := 0 + for _, line := range data { + target, buttons := parseMachine(line) + numberOfLights := len(target) + numberOfButtons := len(buttons) + minimumPresses := numberOfButtons + 1 + + for mask := 0; mask < (1 << numberOfButtons); mask++ { + lights := make([]bool, numberOfLights) + presses := 0 + + for buttonIdx := range numberOfButtons { + if mask&(1<