# i534

class versenyzo:
    #Az adatstruktúra a versenyzők tárolására
    def __init__(self,NEV,NEM,EV,PONT):
        self.name = NEV
        self.gender = NEM
        self.year = EV
        self.point = PONT

def f1_beolvas():
    # Olvassuk végig a szöveges állományt, és tároljuk el a fájl azon sorainak adatait, amelyek magyar versenyzőkről szólnak, 
    # tehát a magyar versenyzők nevét, nemét, Élő-pontszámát és születési évét. 
    # A név ne tartalmazza a fájlban a név után írt szóközöket, az Élő-pontszám és a születési év legyen egész érték.
    print("1. feladat: az adatok beolvasása")
    file = open("sakk.txt","r")
    for line in file:
        orszag = line[76:79]
        if orszag == "HUN":
            nev = line[15:76].strip()
            nem = line[80]
            ev = int(line[126:130])
            pont = int(line[113:117])
            versenyzok.append(versenyzo(nev,nem,ev,pont))
            #print(orszag, nev, nem, ev, pont)
    file.close()

def f2_ferfino():
    #Adjuk meg, hogy hány női, és hány férfi sakkozónk szerepel a listában.
    print("2. feladat:")
    N, F = 0, 0 
    for v in versenyzok:
        if v.gender == "F":
            N += 1
        else:
            F +=1
    print("A listában {} férfi és {} női sakkozónk szerepel".format(F,N))


def f3_legnagyobb():
    # Adjuk meg a legmagasabb Élő-pontszámmal rendelkező férfi és női sakkozónk nevét, pontszámát és születési évét.
    print("3. feladat:")
    maxn, maxf, maxnindex, maxfindex = 0,0,0,0
    for i, v in enumerate(versenyzok):
        if v.gender == "F":
            if v.point>maxn:
                maxn = v.point
                maxnindex = i
        else:
            if v.point>maxf:
                maxf = v.point
                maxfindex = i
    print("A legmagasabb pontszámú férfi versenyzőnk {}".format(versenyzok[maxfindex].name))
    print("Pontszáma: {}".format(maxf))
    print("Születési éve: {}".format(versenyzok[maxfindex].year))
    print("A legmagasabb pontszámú női versenyzőnk {}".format(versenyzok[maxnindex].name))
    print("Pontszáma: {}".format(maxn))
    print("Születési éve: {}".format(versenyzok[maxnindex].year))

def f4_mennyi():
    # Állapítsuk meg és írjuk ki, hogy hány olyan női versenyzőink van, aki 1990-ben vagy az után született, és Élő-pontszáma legalább 2000.
    print("4. feladat:")
    mennyi = 0
    for v in versenyzok:
        if v.gender == "F" and v.year>=1990 and v.point>=2000:
            mennyi +=1
    print("{} olyan női sakkozónk van, aki 1990-ben vagy az után született, és Élő-pontszáma legalább 2000".format(mennyi))

def sorted_enumerate(seq):
    return [i for (v, i) in sorted((v, i) for (i, v) in enumerate(seq))]

def f5_polgar():
    # A Polgár családból többen is szerepelnek a listán. Adjuk meg a családtagok keresztnevét, születési dátumát és Élő-pontszámát táblázatos elrendezésben. 
    # A lista legyen a családtagok Élő-pontszáma szerint növekvő sorrendben.
    print("5. feladat: A Polgár család tagjai")
    pnev, pev, ppont = [], [], []
    maxnevhossz = 0
    for v in versenyzok:
        if v.name[0:7] == "Polgar,":
            pnev.append(v.name[8:])
            if len(pnev[-1])>maxnevhossz:
                maxnevhossz = len(pnev[-1])
            pev.append(v.year)
            ppont.append(v.point)
    index = sorted_enumerate(ppont)
    for i in index:
        print(pnev[i].ljust(maxnevhossz+3)[:maxnevhossz+3], pev[i], ppont[i])

def f6_elerte():
    # Polgár Judit minden idők legkiválóbb női sakkozója, 1989-től 2005-ig vezette a női ranglistát, legmagasabb Élő-pontszáma 2735 volt. 
    # Adjuk meg, hogy kik azok a sakkozóink, akik legalább akkora pontszámmal rendelkeznek, mint Polgár Judit jelenleg. 
    # A listában a nevek a magyar írásmód szerint szerepeljenek. Tegyünk zárójelek között egy csillagot (*) azoknak a versenyzőknek a neve után, 
    # akiknek pontszáma eléri Polgár Judit egykor legmagasabb, 2735-ös pontszámát. 
    # A lista elemeit vesszővel és szóközzel válasszuk el egymástól, és zárjuk őket ponttal.
    print("6. feladat: Akik elérték Polgár Judit mai pontszámát:")
    lista = []
    jpont, jmax  = 0, 2735
    for v in versenyzok:
        if v.name == "Polgar, Judit":
            jpont = v.point
    for v in versenyzok:
        if v.point >= jpont and v.name != "Polgar, Judit":
            nev = v.name
            nev = nev.replace(',', '')
            if jmax <= v.point:
                nev +="(*)"
            lista.append(nev)
    print(*lista, sep=", ", end=".\n")


def i534():
    f1_beolvas()
    f2_ferfino()
    f3_legnagyobb()
    f4_mennyi()
    f5_polgar()
    f6_elerte()

versenyzok = []
i534()