# FOCI - 2007 október (november)
class game:
    def __init__(self,lst):     # lst - lista a fájl egy sorából
        self.hg=lst[0]          # hazai gólok (végeredmény)
        self.vg=lst[1]          # vendég gólok (végeredmény)
        self.fhg=lst[2]         # hazai gólok (félidő)
        self.fvg=lst[3]         # vendég gólok (félidő)
        self.hcs=lst[4]         # hazai csapat neve
        self.vcs=lst[5]         # vendégcsapat neve
        # 3. feladathoz kell majd
        self.ford=''            # fordított-e a félideji eredményhez képest a végén
        # hazai csapatként félidőben vesztésre állt, de a végén győzött
        if self.fhg<self.fvg and self.hg>self.vg:
            self.ford=self.hcs      # a hazai csapat neve kerül bele a self.ford-ba
        # vendégcsapatként félidőben vesztésre állt, de a végén győzött
        if self.fhg>self.fvg and self.hg<self.vg:
            self.ford=self.vcs      # a vendégcsapat neve kerül bele a self.ford-ba
        
    # objektum kiírása hogyan történjen, ezt definiáljuk itt
    def __str__(self):
        return f'{self.hcs}-{self.vcs}: {self.hg}-{self.vg} ({self.fhg}-{self.fvg})'

def kiir(ssz,szoveg):
    print('-------------------------------------------------------------')
    print(f'{ssz}. feladat - {szoveg}')
    print('-------------------------------------------------------------')
    
def inicializalas(d):           # d, mint dict
    for i in range(1,21):       # maximum 20 forduló van
        d[i]=[]                 # szótár kulcsa a forduló száma, értéke egy lista (mátrix)

def F1():
    kiir(1,'Adabeolvasás')
    fbe=open('meccs.txt','r') 
    global m
    m=dict()                    # üres szótár: ebben tároljuk fordulónként a meccsek adatait
    inicializalas(m)            # saját függvényünk felhasználása
    n=int(fbe.readline().strip())   # fájl első sorának beolvasása
    for sor in fbe:
        sor=sor.strip().split()     # fájl minden további sora egy lista lesz
        sor[0:5]=map(int,sor[0:5])  # első 5 elem int típusú
        # m szótár feltöltése
        kulcs=sor[0]                # kulcs a forduló száma
        ertek=sor[1:]               # a lista "maradék" elemei
        m[kulcs].append(ertek)      # a szótár adott kulcsú értékéhez hozzáadjuk a listát
                                    # a szótár értéke így egy mátrix (listák listája) lesz
    fbe.close()

def F2():
    kiir(2,'Adott forduló mérkőzései')
    fs=int(input('forduló: '))
    for meccs in m[fs]:             # a szótár fs kulcshoz tartozó mátrixának bejárása
        g=game(meccs)               # a listából game objektumot készítünk
        print(g)                    # az objektum kiírása a CLASS-ban leír definiálás szerint
    
def F3():
    kiir(3,'Kinek sikerült fordítani (ford csapat)')
    #   for kulcs in m.keys():
    #   for ertek in m.values()

    for kulcs,listak in m.items():  # kulcs, azaz a forduló sorszáma, listak a mátrixunk
        for meccs in listak:        # meccs - adott kulcshoz tartozó meccsekből egy meccs                 
            g=game(meccs)           # a listából game objektumot készítünk
            if g.ford!='':          # ezt készítettük elő a CLASS-ban, ha üres nem fordított
                print(kulcs,g.ford) # g.ford-ban a megfelelő csapat neve van, lsd. CLASS

def F4():
    kiir(4,'Csapatnév bolvasása')
    global csn
    csn=input('Kérem a csapat nevét: ')

def F5_6():
    # az 5. és 6. feladatot egy modulban oldjuk meg
    kiir(5,'Adott csapat: lőtt és kapott gólok száma')
    
    eloszor=0
    lott,kapott=0,0
    for kulcs,listak in m.items():
        for meccs in listak:
            g=game(meccs)
            
            if g.hcs==csn:      # hazai csapatként van meg
                if g.hg<g.vg:   # kikapott-e otthon
                    if eloszor==0:      # ha kikapott, először történt-e ez?
                        eloszor=kulcs   # ha igen, eloszor-be a forduló sorszámát (kulcs) tesszük
                        ellenfel=g.vcs  # rögzítjük az ellenfelet is (6. feladat)
                lott+=g.hg              # 5. feladat: összegezzük a lőtt és kapott gólokat
                kapott+=g.vg
            if g.vcs==csn:      # vendég csapatként van meg
                lott+=g.vg
                kapott+=g.hg
    print(f'Lőtt gólok száma: {lott}, kapott gólok száma: {kapott}')

    kiir(6,'Adott csapat első veresége otthon')
    valasz='A csapat otthon veretlen maradt.' if eloszor==0 else str(eloszor)+'. fordulóban ('+ellenfel+')'
    print(valasz)
        
def F7():
    kiir(7,'Eredmény-statisztika')
    
    gol_matrix=[]                   # 10x10-es mátrix: listák listája nulla kezdőértékekkel
    for i in range(10):
        gol_matrix.append([0]*10)   # mátrix: 10 db olyan lista, aminek egy 10 elemű lista az eleme

    for listak in m.values():
        for meccs in listak:
            g=game(meccs)
            sor=g.hg if g.hg>=g.vg else g.vg        # mátrix "sor" mindig a nagyobb gólszám
            oszl=g.hg if g.hg<g.vg else g.vg        # mátrix "oszlop" mindig a kisebb gólszám
            gol_matrix[sor][oszl]+=1                # tehát maguk a gólok indexelik a mátrixot
    fki=open('stat.txt','w')       
    for i in range(10):
        for j in range(0,i+1):          # range azért ilyen, hogy ne írjunk ki pl. 5-7 eredményt
            if gol_matrix[i][j]!=0:     # elég csak azokat a sorokat kiírni, ahol volt is valami, szerintem...
                print(f'{i}-{j}: {gol_matrix[i][j]} darab')
            print(f'{i}-{j}: {gol_matrix[i][j]} darab',file=fki)
    fki.close()

# ********************** F Ő M O D U L **********************
F1()
F2()
F3()
F4()
F5_6()
F7()
