From e3c9da96215b95b0c0571a9cb079f820367ae3f7 Mon Sep 17 00:00:00 2001 From: Kharec Date: Wed, 3 Dec 2025 10:09:13 +0100 Subject: [PATCH] feat: solve part one using a prebuild list to reduce comparisons --- internal/2025/DayThree/code.go | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 internal/2025/DayThree/code.go diff --git a/internal/2025/DayThree/code.go b/internal/2025/DayThree/code.go new file mode 100644 index 0000000..ac15e53 --- /dev/null +++ b/internal/2025/DayThree/code.go @@ -0,0 +1,48 @@ +package daythree + +import ( + "os" + "strings" + + "advent-of-code/internal/registry" +) + +func init() { + registry.Register("2025D3", ParseInput, PartOne, PartTwo) +} + +func ParseInput(filepath string) [][]int { + content, _ := os.ReadFile(filepath) + lines := strings.Split(string(content), "\n") + var data [][]int + for _, line := range lines { + var bank []int + for _, char := range line { + bank = append(bank, int(char-'0')) + } + data = append(data, bank) + } + return data +} + +func PartOne(data [][]int) int { + total := 0 + for _, bank := range data { + maxAfter := make([]int, len(bank)) + for idx := len(bank) - 2; idx >= 0; idx-- { + maxAfter[idx] = max(maxAfter[idx+1], bank[idx+1]) + } + + maxJoltage := 0 + for idx := 0; idx < len(bank)-1; idx++ { + joltage := bank[idx]*10 + maxAfter[idx] + maxJoltage = max(maxJoltage, joltage) + } + total += maxJoltage + } + return total +} + +func PartTwo(data [][]int) int { + return 0 +}