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

62 lines
1.1 KiB
Go

// Package bank represents a bank of batteries
package bank
import (
"strconv"
"strings"
)
type Bank interface {
Joltage(numOfCellsToTurnOn int) int64
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,
}
}
func (b bank) Joltage(numOfCellsToTurnOn int) int64 {
bankLength := len(b.cells)
cellsOn := []int{}
removalBudget := bankLength - numOfCellsToTurnOn
for _, cell := range b.cells {
for len(cellsOn) > 0 && removalBudget > 0 && cell > cellsOn[len(cellsOn)-1] {
cellToRemoveIndex := len(cellsOn) - 1
cellsOn = cellsOn[:cellToRemoveIndex]
removalBudget--
}
cellsOn = append(cellsOn, cell)
}
var sb strings.Builder
for _, n := range cellsOn[:numOfCellsToTurnOn] {
sb.WriteString(strconv.Itoa(n))
}
finalString := sb.String()
finalJoltage, _ := strconv.ParseInt(finalString, 10, 64)
return finalJoltage
}
func (b bank) Cells() []int {
return b.cells
}