45 lines
960 B
Go
45 lines
960 B
Go
package day24
|
|
|
|
import (
|
|
"math"
|
|
"tools"
|
|
)
|
|
|
|
func findMinQE(packageWeights []int, weightPerCompartment int) int {
|
|
var results [][]int
|
|
for i := 1; i < len(packageWeights); i++ {
|
|
for _, comb := range tools.CombinationsInt(packageWeights, i) {
|
|
if tools.Sum(comb...) == weightPerCompartment {
|
|
results = append(results, comb)
|
|
}
|
|
}
|
|
if len(results) > 0 {
|
|
break
|
|
}
|
|
}
|
|
|
|
minQE := math.MaxInt64
|
|
for _, result := range results {
|
|
thisQE := tools.Mul(result...)
|
|
if thisQE < minQE {
|
|
minQE = thisQE
|
|
}
|
|
}
|
|
|
|
return minQE
|
|
}
|
|
|
|
func Part1(puzzle tools.AoCPuzzle) interface{} {
|
|
packageWeights := puzzle.GetInputArrayInt()
|
|
weightPerCompartment := tools.Sum(packageWeights...) / 3
|
|
|
|
return findMinQE(packageWeights, weightPerCompartment)
|
|
}
|
|
|
|
func Part2(puzzle tools.AoCPuzzle) interface{} {
|
|
packageWeights := puzzle.GetInputArrayInt()
|
|
weightPerCompartment := tools.Sum(packageWeights...) / 4
|
|
|
|
return findMinQE(packageWeights, weightPerCompartment)
|
|
}
|