mirror of
https://github.com/Threnklyn/advent-of-code-go.git
synced 2026-05-19 03:23:27 +02:00
66 lines
2.0 KiB
Go
66 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/alexchao26/advent-of-code-go/mathy"
|
|
"github.com/alexchao26/advent-of-code-go/util"
|
|
)
|
|
|
|
func main() {
|
|
part1Ans, part2Ans := cookieScience(util.ReadFile("./input.txt"))
|
|
fmt.Printf("Part1: %d\nPart2: %d\n", part1Ans, part2Ans)
|
|
}
|
|
|
|
func cookieScience(input string) (int, int) {
|
|
lines := strings.Split(input, "\n")
|
|
cookieVals := [][]int{}
|
|
|
|
for _, line := range lines {
|
|
var name string
|
|
var cap, dur, fla, tex, cal int
|
|
fmt.Sscanf(line, "%s capacity %d, durability %d, flavor %d, texture %d, calories %d",
|
|
&name, &cap, &dur, &fla, &tex, &cal)
|
|
|
|
// trim off colons, fmt.Sscanf parses between spaces/whitespace
|
|
// names end up going unused...
|
|
name = strings.Trim(name, ":")
|
|
|
|
// cookie vals are simply all five values in order
|
|
cookieVals = append(cookieVals, []int{cap, dur, fla, tex, cal})
|
|
}
|
|
|
|
var bestScore, best500CalScore int
|
|
for ing1 := 0; ing1 < 100; ing1++ {
|
|
for ing2 := 0; ing2 < 100; ing2++ {
|
|
for ing3 := 0; ing3 < 100; ing3++ {
|
|
ing4 := 100 - ing1 - ing2 - ing3
|
|
|
|
cap := ing1*cookieVals[0][0] + ing2*cookieVals[1][0] + ing3*cookieVals[2][0] + ing4*cookieVals[3][0]
|
|
dur := ing1*cookieVals[0][1] + ing2*cookieVals[1][1] + ing3*cookieVals[2][1] + ing4*cookieVals[3][1]
|
|
fla := ing1*cookieVals[0][2] + ing2*cookieVals[1][2] + ing3*cookieVals[2][2] + ing4*cookieVals[3][2]
|
|
tex := ing1*cookieVals[0][3] + ing2*cookieVals[1][3] + ing3*cookieVals[2][3] + ing4*cookieVals[3][3]
|
|
|
|
cal := ing1*cookieVals[0][4] + ing2*cookieVals[1][4] + ing3*cookieVals[2][4] + ing4*cookieVals[3][4]
|
|
|
|
// make negatives zero, without this two negative scores could
|
|
// make a very large positive
|
|
cap = mathy.MaxInt(0, cap)
|
|
dur = mathy.MaxInt(0, dur)
|
|
fla = mathy.MaxInt(0, fla)
|
|
tex = mathy.MaxInt(0, tex)
|
|
|
|
score := cap * dur * fla * tex
|
|
|
|
if cal == 500 {
|
|
best500CalScore = mathy.MaxInt(best500CalScore, score)
|
|
}
|
|
bestScore = mathy.MaxInt(bestScore, score)
|
|
}
|
|
}
|
|
}
|
|
|
|
return bestScore, best500CalScore
|
|
}
|