import json Entities_max_health = { "Sorceress": 50, "Knight": 100, "Barbarian": 120, "Warlock": 70 } Entities_max_attack = { "Sorceress": 90, "Knight": 150, "Barbarian": 180, "Warlock": 100 } Entities_defence = { "Sorceress": 42, "Knight": 170, "Barbarian": 150, "Warlock": 50 } Entities_mana = { "Sorceress": 200, "Knight": 0, "Barbarian": 0, "Warlock": 180 } my_heroes = {} class Unit: def __init__(self, info): self.race = info["race"] self.lord = info["lord"] self.health = min(info["health"], Entities_max_health[self.race]) self.attack = min(info["attack"], Entities_max_attack[self.race]) self.defence = min(info["defence"], Entities_defence[self.race]) self.experience = info["experience"] self.mana = 0 if("mana" in info): self.mana = min(info["mana"], Entities_mana[self.race]) def attack(attacker, defencer, power): if(attacker.health <= 0 or defencer.health <= 0): return else: attacker.attack = max(0, attacker.attack - power) if defencer.defence >= power: defencer.defence -= power else: defencer.health -= (power - defencer.defence) defencer.defence = 0 if (defencer.health <= 0): attacker.experience += 5 return else: attacker.experience += 1 defencer.experience += 1 return def cast(attacker, defencer, power): if(attacker.health <= 0 or defencer.health <= 0): return else: if(attacker.mana < power): return attacker.mana -= power if defencer.defence >= power: defencer.defence -= power else: defencer.health -= (power - defencer.defence) defencer.defence = 0 if (defencer.health <= 0): attacker.experience += 5 return else: attacker.experience += 1 defencer.experience += 1 return def heal(attacker, defencer, power): if(attacker.health <= 0 or defencer.health <= 0): return else: if (attacker.mana < power): return attacker.mana -= power new_health = defencer.health + power defencer.health = min(new_health, Entities_max_health[defencer.race]) return def trace_step(step): if step['action'] == 'attack': attack(my_heroes[step['id_from']], my_heroes[step['id_to']], step['power']) if step['action'] == 'cast_damage_spell': cast(my_heroes[step['id_from']], my_heroes[step['id_to']], step['power']) if step['action'] == 'cast_health_spell': heal(my_heroes[step['id_from']], my_heroes[step['id_to']], step['power']) def count_win(heroes): res = {} counts = {} counts['Archibald'] = 0 counts['Ronald'] = 0 res['Archibald'] = 0 res['Ronald'] = 0 for id in heroes: hero = heroes[id] if(hero.health > 0): count = hero.experience +\ 2 * hero.defence + 3 * hero.attack + 10 * hero.mana res[hero.lord] += count counts[hero.lord] += 1 if counts['Archibald'] == counts['Ronald'] == 0: return 'unknown' elif counts['Archibald'] == 0: return 'Ronald' elif counts['Ronald'] == 0: return 'Archibald' if(res['Ronald'] > res['Archibald']): return 'Ronald' if(res['Archibald'] > res['Ronald']): return 'Archibald' if(res['Archibald'] == res['Ronald']): return 'unknown' data = json.loads(input()) for a in data["armies"]: my_heroes[a] = Unit(data["armies"][a]) for b in data['battle_steps']: trace_step(b) print(count_win(my_heroes))