mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Solution to day 21. A little late.
This commit is contained in:
50
day-21/solution.py
Normal file
50
day-21/solution.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from __future__ import print_function, division
|
||||
from itertools import product, combinations
|
||||
import math
|
||||
|
||||
def price(c):
|
||||
return c[0][0] + c[1][0] + c[2][0][0] + c[2][1][0]
|
||||
|
||||
def power(c):
|
||||
return c[0][1] + c[1][1] + c[2][0][1] + c[2][1][1]
|
||||
|
||||
def armor(c):
|
||||
return c[0][2] + c[1][2] + c[2][0][2] + c[2][1][2]
|
||||
|
||||
def wins(c, monsterHP, monsterAttack, monsterArmor):
|
||||
monsterDamage = max(1, monsterAttack - armor(c))
|
||||
heroDamage = max(1, power(c) - monsterArmor)
|
||||
|
||||
return math.ceil(100 / monsterDamage) >= math.ceil(monsterHP / heroDamage)
|
||||
|
||||
weapons = [
|
||||
(8, 4, 0),
|
||||
(10, 5, 0),
|
||||
(25, 6, 0),
|
||||
(40, 7, 0),
|
||||
(74, 8, 0)
|
||||
]
|
||||
|
||||
armors = [
|
||||
(0, 0, 0), # Dummy armor
|
||||
(13, 0, 1),
|
||||
(31, 0, 2),
|
||||
(53, 0, 3),
|
||||
(75, 0, 4),
|
||||
(102, 0, 5)
|
||||
]
|
||||
|
||||
rings = list(combinations([
|
||||
(0, 0, 0), # Dummy ring
|
||||
(0, 0, 0), # Second dummy ring
|
||||
(25, 1, 0),
|
||||
(50, 2, 0),
|
||||
(100, 3, 0),
|
||||
(20, 0, 1),
|
||||
(40, 0, 2),
|
||||
(80, 0, 3),
|
||||
], 2))
|
||||
|
||||
|
||||
print(min(price(c) for c in product(weapons, armors, rings) if wins(c, 103, 9, 2)))
|
||||
print(max(price(c) for c in product(weapons, armors, rings) if not wins(c, 103, 9, 2)))
|
||||
Reference in New Issue
Block a user