Files
advent-of-code/internal/2025/DayThree/code.go

73 lines
1.3 KiB
Go

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 {
total := 0
for _, bank := range data {
var joltage int
start := 0
for position := range 12 {
remaining := 12 - position - 1
maxIdx := start
maxValue := bank[start]
for idx := start; idx < len(bank)-remaining; idx++ {
if bank[idx] > maxValue {
maxValue = bank[idx]
maxIdx = idx
}
}
joltage = joltage*10 + maxValue
start = maxIdx + 1
}
total += joltage
}
return total
}