Solve 2015 days 20-22.
This commit is contained in:
64
2015/d22.py
Normal file
64
2015/d22.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from collections import deque
|
||||
|
||||
min_mana_win = float("INF")
|
||||
enemy_damage = 9
|
||||
enemy_hit = 58
|
||||
player_mana = 500
|
||||
player_hit = 50
|
||||
|
||||
states = deque()
|
||||
states.append((0, player_hit, player_mana, enemy_hit, 0, -1, -1, -1))
|
||||
seen = set()
|
||||
|
||||
hard_mode = True
|
||||
|
||||
while states:
|
||||
s = states.popleft()
|
||||
if s in seen:
|
||||
continue
|
||||
seen.add(s)
|
||||
player_turn, player_hit, player_mana, enemy_hit, mana_used, shield_time, poison_time, charge_time = s
|
||||
|
||||
if enemy_hit <= 0:
|
||||
if mana_used < min_mana_win:
|
||||
min_mana_win = mana_used
|
||||
print(min_mana_win)
|
||||
continue
|
||||
|
||||
if hard_mode and player_turn == 0:
|
||||
player_hit -= 1
|
||||
|
||||
if player_hit <= 0 or player_mana < 53 or mana_used > min_mana_win:
|
||||
continue
|
||||
|
||||
if poison_time >= 0:
|
||||
enemy_hit -= 3
|
||||
|
||||
if charge_time >= 0:
|
||||
player_mana += 101
|
||||
|
||||
if charge_time < -1:
|
||||
charge_time = -1
|
||||
if poison_time < -1:
|
||||
poison_time = -1
|
||||
if shield_time < -1:
|
||||
shield_time = -1
|
||||
|
||||
if player_turn == 0:
|
||||
for a in ["magic", "drain", "shield", "poison", "recharge"]:
|
||||
if a == "magic" and player_mana >= 53:
|
||||
states.append((1, player_hit, player_mana - 53, enemy_hit - 4, mana_used + 53, shield_time - 1, poison_time - 1, charge_time - 1))
|
||||
elif a == "drain" and player_mana >= 73:
|
||||
states.append((1, player_hit + 2, player_mana - 73, enemy_hit - 2, mana_used + 73, shield_time - 1, poison_time - 1, charge_time - 1))
|
||||
elif a == "shield" and player_mana >= 113 and shield_time <= 0:
|
||||
states.append((1, player_hit, player_mana - 113, enemy_hit, mana_used + 113, 6 - 1, poison_time - 1, charge_time - 1))
|
||||
elif a == "poison" and player_mana >= 173 and poison_time <= 0:
|
||||
states.append((1, player_hit, player_mana - 173, enemy_hit, mana_used + 173, shield_time - 1, 6 - 1, charge_time - 1))
|
||||
elif a == "recharge" and player_mana >= 229 and charge_time <= 0:
|
||||
states.append((1, player_hit, player_mana - 229, enemy_hit, mana_used + 229, shield_time - 1, poison_time - 1, 5 - 1))
|
||||
else:
|
||||
if shield_time >= 0:
|
||||
player_hit -= (enemy_damage - 7)
|
||||
else:
|
||||
player_hit -= enemy_damage
|
||||
states.append((0, player_hit, player_mana, enemy_hit, mana_used, shield_time - 1, poison_time - 1, charge_time - 1))
|
||||
Reference in New Issue
Block a user