day21 - cleanup

This commit is contained in:
Stefan Harmuth 2020-12-31 12:29:46 +01:00
parent 3bcae36e43
commit b0bdd32281

View File

@ -107,7 +107,7 @@ func fight(playerHp, playerPower, playerArmor, bossHp, bossPower, bossArmor int)
return math.Ceil(float64(bossHp)/playerStrike) <= math.Ceil(float64(playerHp)/bossStrike) return math.Ceil(float64(bossHp)/playerStrike) <= math.Ceil(float64(playerHp)/bossStrike)
} }
func Part1(puzzle tools.AoCPuzzle) interface{} { func getMinMaxGold(puzzle tools.AoCPuzzle) (minGold int, maxGold int) {
input := puzzle.GetInputArray() input := puzzle.GetInputArray()
hpLine := strings.Split(input[0], ": ") hpLine := strings.Split(input[0], ": ")
powerLine := strings.Split(input[1], ": ") powerLine := strings.Split(input[1], ": ")
@ -122,10 +122,9 @@ func Part1(puzzle tools.AoCPuzzle) interface{} {
goldSpent := 0 goldSpent := 0
minGold := math.MaxInt32 minGold = math.MaxInt32
for _, weaponStats := range weapons { for _, weaponStats := range weapons {
for _, armorStats := range armor { for _, armorStats := range armor {
goldSpent = weaponStats["cost"] + armorStats["cost"]
for ring1Name, ring1Stats := range rings { for ring1Name, ring1Stats := range rings {
for ring2Name, ring2Stats := range rings { for ring2Name, ring2Stats := range rings {
if ring1Name == ring2Name { if ring1Name == ring2Name {
@ -135,50 +134,28 @@ func Part1(puzzle tools.AoCPuzzle) interface{} {
playerPower = weaponStats["damage"] + ring1Stats["damage"] + ring2Stats["damage"] playerPower = weaponStats["damage"] + ring1Stats["damage"] + ring2Stats["damage"]
playerArmor = armorStats["armor"] + ring1Stats["armor"] + ring2Stats["armor"] playerArmor = armorStats["armor"] + ring1Stats["armor"] + ring2Stats["armor"]
if fight(playerHp, playerPower, playerArmor, bossHp, bossPower, bossArmor) && goldSpent < minGold { playerWon := fight(playerHp, playerPower, playerArmor, bossHp, bossPower, bossArmor)
if playerWon && goldSpent < minGold {
minGold = goldSpent minGold = goldSpent
} } else if !playerWon && goldSpent > maxGold {
}
}
}
}
return minGold
}
func Part2(puzzle tools.AoCPuzzle) interface{} {
input := puzzle.GetInputArray()
hpLine := strings.Split(input[0], ": ")
powerLine := strings.Split(input[1], ": ")
armorLine := strings.Split(input[2], ": ")
bossHp, _ := strconv.Atoi(hpLine[1])
bossPower, _ := strconv.Atoi(powerLine[1])
bossArmor, _ := strconv.Atoi(armorLine[1])
playerHp := 100
playerPower := 0
playerArmor := 0
goldSpent := 0
maxGold := 0
for _, weaponStats := range weapons {
for _, armorStats := range armor {
for ring1Name, ring1Stats := range rings {
for ring2Name, ring2Stats := range rings {
if ring1Name == ring2Name {
continue
}
goldSpent = weaponStats["cost"] + armorStats["cost"] + ring1Stats["cost"] + ring2Stats["cost"]
playerPower = weaponStats["damage"] + ring1Stats["damage"] + ring2Stats["damage"]
playerArmor = armorStats["armor"] + ring1Stats["armor"] + ring2Stats["armor"]
if !fight(playerHp, playerPower, playerArmor, bossHp, bossPower, bossArmor) && goldSpent > maxGold {
maxGold = goldSpent maxGold = goldSpent
} }
} }
} }
} }
} }
return minGold, maxGold
}
func Part1(puzzle tools.AoCPuzzle) interface{} {
minGold, _ := getMinMaxGold(puzzle)
return minGold
}
func Part2(puzzle tools.AoCPuzzle) interface{} {
_, maxGold := getMinMaxGold(puzzle)
return maxGold return maxGold
} }