69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package day03
|
|
|
|
import (
|
|
"adventofcode2025/utils"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
const NUM_OF_CELLS = 12
|
|
|
|
func Part1(input string) int {
|
|
var jolts []int
|
|
batteries := strings.Split(input, "\n")
|
|
for _, battery := range batteries {
|
|
maxJolt := 0
|
|
cells := strings.Split(battery, "")
|
|
for i := 0; i < len(cells)-1; i++ {
|
|
for j := i + 1; j < len(cells); j++ {
|
|
jolt := utils.MustAtoi(fmt.Sprintf("%s%s", cells[i], cells[j]))
|
|
if jolt > maxJolt {
|
|
maxJolt = jolt
|
|
}
|
|
}
|
|
}
|
|
jolts = append(jolts, maxJolt)
|
|
}
|
|
sum := 0
|
|
for _, jolt := range jolts {
|
|
sum += jolt
|
|
}
|
|
return sum
|
|
}
|
|
|
|
func Part2(input string) int {
|
|
var jolts []string
|
|
batteries := strings.Split(input, "\n")
|
|
for _, battery := range batteries {
|
|
start := 0
|
|
end := len(battery) - NUM_OF_CELLS
|
|
j := ""
|
|
for i := 0; i < NUM_OF_CELLS; i++ {
|
|
v, pos := find_first_max(battery[start : end+1])
|
|
j = j + v
|
|
start = start + pos + 1
|
|
end = len(battery) - NUM_OF_CELLS + i + 1
|
|
}
|
|
jolts = append(jolts, j)
|
|
}
|
|
sum := 0
|
|
for _, jolt := range jolts {
|
|
fmt.Println(jolt)
|
|
sum += utils.MustAtoi(jolt)
|
|
}
|
|
return sum
|
|
}
|
|
|
|
func find_first_max(s string) (string, int) {
|
|
max := byte('0')
|
|
pos := -1
|
|
for i := 0; i < len(s); i++ {
|
|
t1 := s[i]
|
|
if t1 > max {
|
|
max = s[i]
|
|
pos = i
|
|
}
|
|
}
|
|
return string(max), pos
|
|
}
|