Files

58 lines
1.4 KiB
Go

// Package estimator provides model and methods
// for answering questions about cable needs
// for connecting junction boxes.
package estimator
import (
"slices"
"github.com/StevanFreeborn/advent-of-code-2025/cmd/08/box"
"github.com/StevanFreeborn/advent-of-code-2025/cmd/08/circuitMap"
"github.com/StevanFreeborn/advent-of-code-2025/cmd/08/connection"
)
type Estimator interface {
PossibleConnections() []connection.Connection
CreateMap() circuitMap.CircuitMap
}
type estimator struct {
possibleConnections []connection.Connection
boxes []box.Box
}
func From(boxes []box.Box) Estimator {
return estimator{
boxes: boxes,
possibleConnections: createAllPossibleConnections(boxes),
}
}
func (e estimator) PossibleConnections() []connection.Connection {
return e.possibleConnections
}
func (e estimator) CreateMap() circuitMap.CircuitMap {
return circuitMap.From(e.boxes)
}
func createAllPossibleConnections(boxes []box.Box) []connection.Connection {
connections := []connection.Connection{}
numOfBoxes := len(boxes)
for i := range numOfBoxes {
for j := i + 1; j < numOfBoxes; j++ {
start := boxes[i]
end := boxes[j]
conn := connection.From(start, end)
connections = append(connections, conn)
}
}
slices.SortFunc(connections, func(a connection.Connection, b connection.Connection) int {
return int(a.Distance() - b.Distance())
})
return connections
}