Python Code for The Relationship (TCS Codevita) | PrepInsta

The Relationship

TCS CodeVita is a coding competition organized by TCS every year, in search of world’s best coder. This is a global level coding competition in which coders from all around the world compete for the title of World’s Best Coder. The Relationship is one of the sample problem of this year TCS CodeVita season 11 competition. 

tcs-bps-hiring

Question -: The people of Kingdoms of Westeros are very organized. They are very devoted to their leader and cannot live without a leader even for a single day. Marriages, divorces, births, and deaths are everyday things in Westeros and because of these events people of Westeros need to spend their time on choosing the leader. People badly need a programme to find the new leader in case of these events. The criteria to choose the leader is as below.

Run
class Person:
    def __init__(self, firstname, familyname, birthfamilyname, gender, fathername, spousename, age):
        self.firstname = firstname
        self.familyname = familyname
        self.birthfamilyname = birthfamilyname
        self.gender = gender
        self.fathername = fathername
        self.spousename = spousename
        self.age = age
        self.leadername = firstname

people = {}

def compare_people(person1, person2):
    return people[person1].firstname < people[person2].firstname

def choose_leader(familyname):
    familyMembers = [person for person in people if people[person].familyname == familyname]
    familyMembers.sort(key=lambda person: (-people[person].age, person))
    leader = familyMembers[0]
    for member in familyMembers:
        if people[member].age > people[leader].age:
            leader = member
    people[leader].leadername = leader
    for member in familyMembers:
        people[member].leadername = leader

N = int(input())
for _ in range(N):
    data = input().split()
    person = Person(*data)
    people[person.firstname] = person

E = int(input())
for _ in range(E):
    event = input()
    if event == "PA":
        alivePeople = [person for person in people if people[person].age > 0]
        alivePeople.sort(key=lambda person: (people[person].firstname, person))
        for person in alivePeople:
            print(f"{people[person].firstname} {people[person].familyname} {people[person].birthfamilyname} {people[person].gender} {people[person].fathername} {people[person].spousename} {people[person].age} {people[person].leadername}")
    elif event.startswith("PO"):
        name = event[3:]
        person = people[name]
        print(f"{person.firstname} {person.familyname} {person.birthfamilyname} {person.gender} {person.fathername} {person.spousename} {person.age} {person.leadername}")
    elif event.startswith("MA"):
        person1, person2 = event.split()[1:]
        family1 = people[person1].familyname
        family2 = people[person2].familyname
        people[person1].spousename = person2
        people[person2].spousename = person1
        if family1 != family2:
            choose_leader(family1)
            choose_leader(family2)
    elif event.startswith("DI"):
        person1, person2 = event.split()[1:]
        people[person1].spousename = "NA"
        people[person2].spousename = "NA"
        family1 = people[person1].familyname
        family2 = people[person2].familyname
        choose_leader(family1)
        choose_leader(family2)
    elif event.startswith("BI"):
        name, gender, father, mother = event.split()[1:]
        people[name].familyname = people[father].familyname
        people[name].birthfamilyname = people[father].familyname
        people[name].fathername = father
        people[name].spousename = "NA"
        choose_leader(people[father].familyname)
    elif event.startswith("DE"):
        person = event.split()[1]
        people[person].age = -1
        family = people[person].familyname
        choose_leader(family)
    elif event.startswith("YP"):
        years = int(event.split()[1])
        for person in people:
            if people[person].age > 0:
                people[person].age += years