# kongresszus - dig.kult. mintafeladat
def F1():
    print('1. feladat - fájl beolvasása')
    fbe=open('eloadasok.txt','r',encoding='utf-8')
    for sor in fbe:
        sor=sor.strip().split('\t')     # tabulátorokkal tagolt a forrás
        sor[2:5]=map(int,sor[2:5])      # a számokat érdemes számként tárolni
        adatok.append(sor)
    fbe.close()
    return sorted(adatok,key=lambda ea:(ea[2],ea[3]))       # rendezés: nap és előadás sorszáma szerint növekvően

def osszerak():
    # osszerak: Összerakjuk az adatok alapján naponta, időrendben az eseményeket:
    #           kezdőidő, befejezés ideje, előadó, cím, eszköz vagy
    #           kezdőidő, befejezés ideje, vita vagy ebédszünet...
    # mindezt a további feladatok előkészítéseként...
    ido=8*60                    # idő percben, és 8 órakor kezdődnek az előadások
    index=-1                    # indexnek egy olyan értéket adjunk, amit biztosan le kell majd "cserélni"...
    for ea in rendezett:        # vegyük sorban az előadásokat a rendezett mátrixból
        if ea[2]-5!=index:      # ea[2] az előadás napja (5-8 között vannak a napok)
            index=ea[2]-5       # index az előadás napja alapján (-5, mert 5-8 között vannak a napok)
            ido=8*60            # idő percben, és 8 órakor kezdődnek az előadások
            ebed=True           # feltételezzük, hogy lesz ebédszünet...
        # napok mátrix: minden napra (5-8) összeszedjük a programokat:
        #                   kezdés idő; vége (kezdés + ea. hossza); előadó neve; ea. címe; eszközigény
        napok[index].append(str(ido)+';'+str(ido+ea[4])+';'+ea[0]+';'+ea[5]+';'+'('+ea[6]+')')
        ido+=ea[4]              # ido növelés az ea. hosszával
        nap_ido[index]+=ea[4]   # nap_ido mátrix: adott napi összidő! ea[4] az előadás hossza
        napok[index].append(str(ido)+';'+str(ido+20)+';'+'Vita')    # napok mátrix: adott napi új bejegyzés a +20 perc vita kezdés és vége, és a 'Vita" szöveg
        ido+=20                 # ido növelése a vita idejével (20 perc)
        if ido>12*60 and ebed:  # lesz-e ebédszünet
            napok[index].append(str(ido)+';'+str(ido+60)+';'+'Ebédszünet')  # ha lesz, akkor új esemény bejegyzése aktuális napra
            ido+=60             # ido növelése ebédidővel (+60 perc)
            ebed=False          # ebed legyen false, hogy még egyszer ne számoljuk már vele...
    # print(napok)
    
def F2():
    print('---------------------------------------------------------------------')
    print('2. feladat - napi előadások')
    s=5                                     # kezdőnap 5.
    for nap in napok:                       # osszerakban előállított napok máttrix feldolgozása
        print(f'november {s}.')         
        ssz=1                               # előadás sorszáma adott napon belül
        for ea in nap:                      # előadások az adott napon
            ea=ea.split(';')                # ea lista előállítása a szöveg alapján, elválasztó a ; karakter
            if ea[2] not in ('Vita', 'Ebédszünet'):   # 2-es indexen az előadó neve van vagy a 'Vita', 'Ebédszünet' szöveg
                print(f'\t{ssz}. {ea[2]}: {ea[3]}') 
                ssz+=1                      # sorszám növelése
        s+=1
        
def F3():
    print('---------------------------------------------------------------------')
    print('3. feladat - előadások összideje (vita nélkül) naponta')
    for i in range(len(nap_ido)):           # nap_ido (osszerak) listában minden megvan már...
        print(f'{i+1}. nap: {nap_ido[i]//60}:{str(nap_ido[i]%60).zfill(2).rjust(2)}')   # óra:perc alakban írjuk ki...
        
def F4():
    print('---------------------------------------------------------------------')
    print('4. feladat - ki tartja a leghosszabb előadást + előadás hossza')
    r=sorted(adatok,key=lambda ea:(ea[2],-ea[4]))       # eredeti adatok mátrix rendezése: nap szerint növekvő, azon belül ea hossza csökkenőben
    i=0
    while r[i][2]!=6:       # ismétlődés amíg 6. nem lesz
        i+=1
    maxi=r[i][4]            # a rendezés miatt 6. első adata a maximumot tartalmazó érték
    while r[i][4]==maxi:    # 6-ikai napon addig megyünk, amíg maximális ea hosszokat találunk
        print(f'{r[i][0]} {r[i][4]}')
        i+=1
        
def F5():
    print('---------------------------------------------------------------------')
    print('5. feladat - előadások vége naponta (vitával együtt)')
    for i in range(4):
        last=napok[i][-1].split(';')        # napokban az utolsó (last) adatban benne van a vége percekben
        print(f'{i+1}. nap: {int(last[1])//60}:{str(int(last[1])%60).zfill(2).rjust(2)}')
        
def F6():
    print('6. feladat - ebédszünet a 3. napon')
    harmadik=napok[2]       # napok[2] a harmadik nap adatait tartalmazza
    i=0
    while harmadik[i].split(';')[2]!='Ebédszünet':  # addig megyünk amíg nem botlunk bele az ebédszünet szövegbe
        i+=1
    kezd=int(harmadik[i].split(';')[0])  # biztos, hogy van ebédszünet a harmadik napon, ezt nyugodtan feltételzhetjük 5. feladat alapján
    print(f'A 3. napon az ebédszünet {kezd//60}:{str(kezd%60).zfill(2).rjust(2)}-kor kezdődik!')
    
def F7():
    print('---------------------------------------------------------------------')
    print('7. feladat - azonos nevű előadók és előadásaik száma')
    # ez egy rossz feldatmegfogalmazás, de mindegy (nem azonos nevű előadóink vannak, hanem ugyanaz a személy több előadást is tart(hat))
    nevek=set()     # az előadók nevét egy halmzba "dobáljuk", ezzel lesz egy gyűjteményünk az egyedi nevekről
    nevek_lst=[]    # kell egy lista is a count használata miatt, csakis azért...
    for ea in adatok:               # eredeti adatokon megyünk végig
        nevek.add(ea[0])            # nevet a nevek halmazba és
        nevek_lst.append(ea[0])     # a nevek_lst listába is elhelyezzük
    for nev in nevek:               # halamzon megyünk végig, mert ott minden név csak egyszer van...
        db=nevek_lst.count(nev)     # és a név alapján a listában "countolunk"...
        if db>1:
            print(f'{nev} {db}')

def F8():
    print('---------------------------------------------------------------------')
    print('8. feladat - megadott napon és időpontban milyen esemény zajlik')
    n=int(input('Kérek egy napot (5-8): '))
    o=int(input('Kérek egy órát: '))
    p=int(input('Kérek egy percet: '))
    vido=o*60+p                         # vido: vizsgált időpont
    nap=napok[n-5]
    rendben=False                       # rendben: az időpont már fel lett dolgozva
    if vido<480:                        # reggel 8 órakor kezdődnek az előadások (8*60)
        print('Még nem kezdődött el')
        rendben=True
    for esemeny in nap:
        esemeny=esemeny.split(';')
        k=int(esemeny[0])
        v=int(esemeny[1])
        if k<=vido<v:
            rendben=True
            if esemeny[2] not in ('Vita', 'Ebédszünet'):
                print('Előadás')
            else:
                print(esemeny[2])
    if not rendben:
        print('Már véget ért')
    
def F9():
    print('---------------------------------------------------------------------')
    print('9. feladat - fájl kiírása - időrend naponta')
    fki=open('idorend.txt','w')
    
    for n in range(4):
        print(f'november {n+5}.',file=fki)
        for ea in napok[n]:
            ea=ea.split(';')
            if len(ea)>3:
                print(f'{int(ea[0])//60}:{str(int(ea[0])%60).zfill(2).rjust(2)}-{int(ea[1])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)} {ea[2]}: {ea[3]} {ea[4]}',file=fki)
            else:
                print(f'{int(ea[0])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)}-{int(ea[1])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)} {ea[2]}',file=fki)
    
    fki.close()
# ----------------------------------- F Ő M O D U L -----------------------------------    
adatok=[]
rendezett=F1()
napok=[[],[],[],[]]
nap_ido=[0,0,0,0]
# print(rendezett)
osszerak()
F2()
F3()
F4()
F5()
F6()
F7()
F8()
F9()
