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))