from statistics import mean as atlag
nezok=dict()
meccsek=dict()
belepesek=list()

# -------------------- segédfüggvények --------------------

# - 1. feladathoz: szótárak feltöltése a fájlokból
def dict_feltolt(fajl,szotar):
    fbe=open(fajl,'r')
    for sor in fbe:
        sor=sor.strip().split()
        kulcs=int(sor[0])
        ertek=sor[1:]
        szotar[kulcs]=ertek
        
# - 1. feladathoz: egy lista index előtti elemeit egészre alakítja    
def to_int(lista,index):
    lista[0:index]=map(int,lista[0:index])
    return lista

# 4. feladathoz: meccsek szótár bejegyzése (lista) megfelelő indexű elemének növelése 1-gyel
def novel(kulcs,i,ertek):    
    meccsek[kulcs][i]+=ertek
        
# ----------------- segédfüggvények vége -----------------

def F1():
    dict_feltolt('nezo.txt',nezok)
    dict_feltolt('meccs.txt',meccsek)
    [belepesek.append(to_int(belepes,2)) for belepes in [sor.strip().split() for sor in open('belepes.txt','r')]]

def F2():
    print('2. feladat')
    print('Bajnoki mérkőzések időrendben:')
    [print(datum) for datum in sorted([meccs[0] for meccs in meccsek.values() if meccs[3]=='bajnoki'])]

def F3():
    print('3. feladat')
    # szótár rendezése dátum szerint csökkenő sorrendbe
    datum_szerint=next(iter(sorted(meccsek.items(),key=lambda x:x[1][0],reverse=True)))
    # datum_szerint egy tuple lesz: (8, ['2019.05.18', '16:00', '500', 'bajnoki'])    
    print(f'A legutolsó ({datum_szerint[1][0]}) bajnokin a jegyár {datum_szerint[1][2]} Ft.')

def F4():
    print('4. feladat')
    print('Nézőszámok az egyes meccseken, időrendben:')
    # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
    [meccsek[key].append(0) for key in meccsek.keys()]
    # az új adat növelése a belépések alapján (belépésben szereplő meccsid, mint kulcs, felhasználásával)
    [novel(belepes[1],4,1) for belepes in belepesek]
    # dátum szerint rendezett szótár ---> elemei tuple-k, pl.: (18, ['2018.08.11', '17:00', '500', 'bajnoki', 135])
    [print(ertek[1][0],' ',ertek[1][4]) for ertek in sorted(meccsek.items(),key=lambda x:x[1][0])]
        
def F5():
    print('5. feladat')
    print('Jegybevétel 2018 szeptemberében (Ft):')
    # a belépések egy eleme: a belépés (b), melynek 0. eleme a nézők kulcsa, az 1. eleme a meccsek kulcsa
    # a nezők adott kulcsú eleme egy lista, 3-as indexű eleme: bérletes vagy nem ('-1'/'0')
    # a meccsek adott kulcsú eleme egy lista, 2-es indexű eleme a belépő ára, 0 indexű eleme a dátum
    # ................ belépő ....... belépés .............. nem bérletes ..... és ........ jó a dátum .............
    print(sum([int(meccsek[b[1]][2]) for b in belepesek if nezok[b[0]][3]=='0' and meccsek[b[1]][0][0:7]=='2018.09']))
            
def F6():
    print('6. feladat')
    print('Kiss Dorina és Varga Zsolt ezeken a meccseken voltak együtt:')
    dorina=set(meccsek[b[1]][0] for b in belepesek if nezok[b[0]][0]=='Kiss' and nezok[b[0]][1]=='Dorina')
    zsolt=set(meccsek[b[1]][0] for b in belepesek if nezok[b[0]][0]=='Varga' and nezok[b[0]][1]=='Zsolt')    
    [print(datum) for datum in sorted(dorina&zsolt)]

def F7():
    print('7. feladat')
    print('A legtöbb bevételt hozó meccs dátuma:')
    # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
    [meccsek[key].append(0) for key in meccsek.keys()]          # bevétel
    # az új adat növelése a belépésben szereplő meccsid, mint kulcs, felhasználásával, ha a néző nem bérletes
    [novel(b[1],5,int(meccsek[b[1]][2])) for b in belepesek if nezok[b[0]][3]=='0']
    # bevétel szerint rendezett szótár ---> elemei tuple-k, pl.: (18, ['2018.08.11', '17:00', '500', 'bajnoki', 135, 49500])
    print(next(iter(sorted(meccsek.items(),key=lambda x:x[1][5],reverse=True)))[1][0])

def F8():
    print('8. feladat')
    print('Bérletes nézők átlagos száma a bajnokság során:')
    # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
    [meccsek[key].append(0) for key in meccsek.keys()]          # bérletesek száma az adott meccsen
    # az új adat növelése 1-gyel a belépésben szereplő meccsid, mint kulcs, felhasználásával, ha a néző bérletes
    [novel(b[1],6,1) for b in belepesek if nezok[b[0]][3]=='-1']
    
    print(f'{round(atlag([meccs[6] for meccs in meccsek.values()]),0):.0f} fő (kerekítve)')

# ----------------- FŐMODUL -----------------
    
F1()
F2()
F3()
F4()
F5()
F6()
F7()
F8()
