From deb9cd82db7f5b6a44f613feb0959110ce70c2e6 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Fri, 26 Nov 2021 23:51:59 +0000 Subject: solutions --- 22/solution.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to '22') diff --git a/22/solution.py b/22/solution.py index 2859416..6df8379 100644 --- a/22/solution.py +++ b/22/solution.py @@ -1,2 +1,42 @@ +from functools import cache +from collections import namedtuple + +Opponent = namedtuple('Opponent', ['hp', 'damage']) + +def part1(opponent: Opponent) -> int: + @cache + def min_cost(php: int, pmana: int, ohp: int, sld_timer: int, psn_timer: int, rch_timer: int) -> int | float: + psld = 0 + def effects(): + nonlocal ohp, pmana, psld, psn_timer, rch_timer, sld_timer + if sld_timer > 0: + sld_timer -= 1 + psld = 7 + else: + psld = 0 + if psn_timer > 0: + psn_timer -= 1 + ohp -= 3 + if rch_timer > 0: + rch_timer -= 1 + pmana += 101 + + def opponent_turn(cost: int) -> int | float: + effects() + nonlocal php + if ohp <= 0: + return cost + php -= min(1, opponent.attack - psld) + if php <= 0: + return float('inf') + return cost + min_cost(php, pmana, ohp, sld_timer, psn_timer, rch_timer) + + effects() + if ohp <= 0: + return 0 + if __name__ == '__main__': - with open('input') as f: \ No newline at end of file + opponent = Opponent(51, 9) + + print(part1(opponent)) + #print(part2(opponent)) -- cgit v1.2.3-54-g00ecf