Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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))
Advertisement
Add Comment
Please, Sign In to add comment