vendegek=dict()
def masodperc(o,p,mp):
    return o*3600+p*60+mp

def orapercmp(idomp):
    o=idomp//3600
    p=(idomp%3600)//60
    mp=(idomp%3600)%60
    return [o,p,mp]
#----------------------------------------------------------------------------------------------
# 1. Olvassa be a furdoadat.txt fájl tartalmát!
#----------------------------------------------------------------------------------------------
def F1():
    print('1. feladat - adatok beolvasása')
    fbe=open('furdoadat.txt','r')
    #Első sor külön kell, mert kell a vendég azonosítója a szótárkulcshoz.
    #A beolvasott sorból lista lesz (strip().split()).
    #Mindent integerré alakítok (map), illetve listává.
    elsosor=list(map(int,fbe.readline().strip().split()))
    key=elsosor[0]  #kulcs a vendégezonosító
    temp=[]
    temp.append(elsosor[1:])    #Kulcshoz tartozó bejegyzés a sor többi eleméből
                                #képzett lista.
    for sor in fbe:
        sor=list(map(int,sor.strip().split()))   #minden legyen integer
        if sor[0]==key:
            temp.append(sor[1:])
        else:
            vendegek[key]=temp
            temp=[]
            temp.append(sor[1:])
            key=sor[0]
    vendegek[key]=temp
    fbe.close()

#----------------------------------------------------------------------------------------------
# 2. Írja a képernyőre, hogy az első és az utolsó vendég mikor lépett ki az
#    öltözőből!
#----------------------------------------------------------------------------------------------
def F2():
    print('\n2. feladat')
    #Tudjuk, hogy időrendben vannak az adatok!! Így az első vendég és az utolsó is adott!
    lst = list(vendegek.values())
    elso=lst[0][0]
    print(f'Az első vendég {elso[2]}:{elso[3]}:{elso[4]}-kor lépett ki az öltözőből.')
    utolso=lst[-1][0]    #utolsó adatunk indexe -1 (utolsó előtti -2, és így tovább...)
    print(f'Az utolsó vendég {utolso[2]}:{utolso[3]}:{utolso[4]}-kor lépett ki az öltözőből.')

#----------------------------------------------------------------------------------------------
# 3. Határozza meg és írja ki a képernyőre, hogy hány olyan fürdővendég volt,
#    aki az öltözőn kívül csak egy részlegen járt és azt a részleget csak
#    egyszer használta!
#----------------------------------------------------------------------------------------------
def F3():
    print('\n3. feladat')
    #Az adatok vendégenként csoportosítva vannak a szótárnak köszönhetően. Ha csak egy
    #részlegen járt egy vendég, és ott is csak egyszer, akkor az ő szótár bejegyzése 4 elemű
    #lista lesz (ahol minden elem egy lista, persze)! (Öltözőból ki, valahova be, onnan ki,
    #és öltözőbe vissza)
    vendegszam=0
    #Egy szótárbejegyzés így néz ki:
    # 112: [[0, 1, 6, 14, 56], [1, 0, 6, 17, 47], [1, 1, 6, 42, 47], [0, 0, 6, 45, 44]]
    #Így pl.:
    #key: 112
    #vendegek[key]=[[0, 1, 6, 14, 56], [1, 0, 6, 17, 47], [1, 1, 6, 42, 47], [0, 0, 6, 45, 44]]
    for key in vendegek.keys():
        if len(vendegek[key])==4:
            vendegszam+=1
    print('A fürdőben %d vendég járt csak egy részlegen.' %vendegszam)
        
#----------------------------------------------------------------------------------------------
# 4. Határozza meg, hogy melyik vendég töltötte a legtöbb időt a fürdőben!
#    A vendég azonosítóját és a fürdőben tartózkodás idejét írja ki a képernyőre!
#    A fürdőben a legtöbb időt töltő vendégek közül elegendő egy vendég adatait
#    megjelenítenie.
#----------------------------------------------------------------------------------------------
def F4():
    print('\n4. feladat')
    max_ido=0
    for key in vendegek.keys():
        kezd=vendegek[key][0]
        vege=vendegek[key][-1]
        ido=masodperc(vege[2],vege[3],vege[4])-masodperc(kezd[2],kezd[3],kezd[4])
        if ido>max_ido:
            max_ido=ido
            a_mi_emberunk=key
    
    
    idopont=orapercmp(max_ido)    
    print('A legtöbb időt eltöltő vendég:')
    print(f'{a_mi_emberunk}. vendég {idopont[0]}:{idopont[1]}:{idopont[2]}')

#----------------------------------------------------------------------------------------------
# 5. Készítsen statisztikát, hogy 06:00:00-08:59:59 óra között, 09:00:00-15:59:59
#    óra között és 16:00:00-19:59:59 óra között hány vendég érkezett a fürdőbe!
#    Az eredményt írja ki a képernyőre a mintán látható formában!
#----------------------------------------------------------------------------------------------
def F5():
    print('\n4. feladat')
    #Három kategóriánk van:
    #1.kategória: óra rész 6 és 8 között legyen,
    #2.kategória: óra rész 9 és 15 között legyen,
    #3.kategória: óra rész 16 és 19 között legyen,
    kat=[0]*3
    for adat in vendegek.values():
        ora=adat[0][2]
        if ora>=6 and ora<=8:
            kat_index=0
        if ora>=9 and ora<=15:
            kat_index=1
        if ora>=16 and ora<=19:
            kat_index=2
        kat[kat_index]+=1
        
    print('6-9 óra között %d vendég' %kat[0])
    print('9-16 óra között %d vendég' %kat[1])
    print('16-20 óra között %d vendég' %kat[2])
    

#----------------------------------------------------------------------------------------------
# 6. Készítsen egy listát a szauna részlegen járt vendégekről és az általuk ott
#    töltött időről! A vendég azonosítóját és a részlegen eltöltött időt a
#    szauna.txt fájlba írja ki! A fájlban egy sorban a vendég azonosítója és
#    szóközzel elválasztva a részlegen eltöltött idő szerepeljen
#    óra:perc:másodperc formában! Ügyeljen arra, hogy egy vendég a szauna 
#    részlegben a nap folyamán többször is járhatott! 
#----------------------------------------------------------------------------------------------
def F6():
    print('\n6. feladat - adatok kiírása fájlba')
    fki=open('szauna.txt','w')
    
    #szauna részleg azonosítója: 2 (a részleg a kislistákban az első adat!)
    #Például: a furdoadat.txt-ben a 471. sortól van a 288-as vendég mozgása
    #288 0 1 17 4 17    ---> öltözőből kilépett
    #288 2 0 17 6 19    ---> szaunába bement 17:06:19-kor
    #288 2 1 17 16 33   ---> szaunából kijött 17:16:33-kor
    #288 3 0 17 17 43
    #288 3 1 17 35 58
    #288 2 0 17 37 17   ---> ismét szaunába ment 17:37:17-kor
    #288 2 1 17 50 26   ---> kijött a szaunából 17:50:26-kor (ez összesen 23 perc 23 mp)
    #288 0 0 17 51 33
    #Ez a fenti sorozat a szótárunkban, mint BEJEGYZÉS, így fest:
    #288: [[0, 1, 17, 4, 17],[2, 0, 17, 6, 19],[2, 1, 17, 16, 33],...]
    for bejegyzes in vendegek.items():
        vendeg=bejegyzes[0]   #vendeg=288
        vendegmozgas=bejegyzes[1]  #vendegmozgas=[[0, 1, 17, 4, 17],[2, 0, 17, 6, 19],[2, 1, 17, 16, 33],...]
        szauna_ido=0
        for elem in vendegmozgas:   #Itt egy elem így néz ki például: [2, 0, 17, 6, 19].
            if elem[0]==2:
                if elem[1]==0:
                    be=masodperc(elem[2],elem[3],elem[4])
                if elem[1]==1:
                    ki=masodperc(elem[2],elem[3],elem[4])
                    szauna_ido+=ki-be
        if szauna_ido>0:
            ido=orapercmp(szauna_ido)
            print(str(vendeg)+' '+str(ido[0]).zfill(2).rjust(2)+':'+str(ido[1]).zfill(2).rjust(2)+
                  ':'+str(ido[2]).zfill(2).rjust(2),file=fki)

    fki.close()
        
#----------------------------------------------------------------------------------------------
# 7. Készítsen egy listát, amelyben megadja, hogy az egyes részlegeket hányan
#    használták! Az eredményt a minta szerint írja ki a képernyőre! Ha egy
#    vendég egy részlegen többször is járt a nap folyamán, azt a statisztikában
#    csak egynek számolja!
#----------------------------------------------------------------------------------------------
def F7():
    print('\n7. feladat')
    reszleg=['Uszoda','Szaunák','Gyógyvizes medencék','Strand']     #177.sor miatt
    fo=[0]*4    #Számlálók listája az egyes részlegekhez.
    voltmar={0}     #176.sor miatt az öltözőt már itt beleírom a halmazba (öltöző kódja:0)
    #Kihasználom, hogy a részlegkódok (1,2,3,4 értékek) indexeknek (0,1,2,3) is jók!
    for bejegyzes in vendegek.values():
        for mozgas in bejegyzes:
            if mozgas[0] not in voltmar:    #Ha még nincs a halmazban az adott részlegkód, akkor
                fo[mozgas[0]-1]+=1          #a részlegkódnak megfelelő indexen (-1) növelem a számlálót!
                voltmar.add(mozgas[0])      #A már megszámlált részleg kódját a halmazba teszem!
        voltmar={0}     #Amikor végzek egy bejegyzéssel, azaz egy vendéggel, a halmazt inicializálom!
    for i in range(4):
        print('%s: %d' %(reszleg[i],fo[i]))  #Ez csak azért, hogy ne legyen 4 print parancsom... :)

    # VAGY - halmazok bevetésével oldhatjuk meg
    # a reszleg lista a részleg neve mellett egy halmazt is tartalmaz,
    # melybe "beledobáljuk" az adott részlegen járó vendég azonosítóját,
    # kihasználva azt, hogy a halmaz nem tartalmaz ismétlődő elemeket...
    print('------------------- halmazos megoldás -------------------')
    reszleg=[('Öltöző',set()),('Uszoda',set()),('Szaunák',set()),('Gyógyvizes medencék',set()),('Strand',set())]
    for bejegyzes in vendegek.items():
        for mozgas in bejegyzes[1]:
            reszleg[mozgas[0]][1].add(bejegyzes[0])
    for i in range(1,len(reszleg)):
        print('%s: %d' %(reszleg[i][0],len(reszleg[i][1])))
#-------------------------------F Ő M O D U L--------------------------------------------------

F1()
F2()
F3()
F4()
F5()
F6()
F7()
