Files
advent-of-code-2025/cmd/03/bank/bank.go
T

103 lines
1.6 KiB
Go
Raw Normal View History

2025-12-05 07:05:28 -06:00
// Package bank represents a bank of batteries
package bank
import (
"fmt"
"strconv"
)
type Bank interface {
Joltage() int
Cells() []int
}
type bank struct {
cells []int
}
func From(line string) Bank {
cells := []int{}
for _, char := range line {
num, _ := strconv.Atoi(string(char))
cells = append(cells, num)
}
return bank{
cells: cells,
}
}
type cell struct {
index int
value int
}
func (b bank) Joltage() int {
// TODO: We still need to
// find the max
// however we should then
// find the next max to the
// left of the highest
// and find the next max to
// the right of the higest
// we should then see what
// the large number we can make
// with these values
max := cell{
value: -1,
}
for ci, cv := range b.cells {
if cv > max.value {
max = cell{
index: ci,
value: cv,
}
}
}
maxLeft := cell{
value: -1,
}
for ci, cv := range b.cells[:max.index] {
if cv > maxLeft.value {
maxLeft = cell{
index: ci,
value: cv,
}
}
}
maxRight := cell{
value: -1,
}
for ci, cv := range b.cells[max.index+1:] {
if cv > maxRight.value {
maxRight = cell{
index: ci,
value: cv,
}
}
}
maxInTensPlace := fmt.Sprintf("%d%d", max.value, maxRight.value)
maxInOnesPlace := fmt.Sprintf("%d%d", maxLeft.value, max.value)
maxInTensPlaceAsNumber, _ := strconv.Atoi(maxInTensPlace)
maxInOnesPlaceAsNumber, _ := strconv.Atoi(maxInOnesPlace)
if maxInTensPlaceAsNumber > maxInOnesPlaceAsNumber {
return maxInTensPlaceAsNumber
}
return maxInOnesPlaceAsNumber
}
func (b bank) Cells() []int {
return b.cells
}