day21 - cleanup
This commit is contained in:
parent
3bcae36e43
commit
b0bdd32281
59
day21/day.go
59
day21/day.go
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user