| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- '''
- > https://www.codingame.com/ide/puzzle/order-of-succession
- @author: olivier.massot, 2019
- '''
- class Person():
- def __init__(self, name, parent, birth, death, religion, gender):
- self.name = name
- self.parent_name = parent
- self.birth = int(birth)
- self.death = death
- self.religion = religion
- self.gender = gender
-
- self.alive = (self.death == "-")
- self.catholic = (self.religion == "Catholic")
- self.male = -1 if self.gender == "M" else 0
- self.parent = None
- self.children = []
-
- def __repr__(self):
- return self.name
-
- family = {p.name: p for p in [Person(*input().split()) for _ in range(int(input()))]}
- first_ancestor = None
- for p in family.values():
- p.parent = family.get(p.parent_name, None)
- if not p.parent:
- first_ancestor = p
- p.children = sorted([c for c in family.values() if c.parent_name == p.name], key=lambda x: (x.male, x.birth))
- def walk(root):
- succession = []
- def add(root):
- if root.alive and not root.catholic:
- succession.append(root)
- for child in root.children:
- add(child)
- add(root)
- return succession
-
- succession = walk(first_ancestor)
- for p in succession:
- print(p.name)
|