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) }