class ido:
    def __init__(self,o,p,mp,t):
        self.o=o
        self.p=p
        self.mp=mp
        self.t=t        # ez az áthaladás ideje
        self.masodperc=self.o*3600+self.p*60+self.mp+t  # minden másodpercben
    def __str__(self):
        return f'{self.o}:{self.p}:{self.mp}'   # kiírásokhoz jól jöhet, de nem fontos

#-------------------------------------------------------------------------------------
# 1. Olvassa be a forgalom.txt állományban talált adatokat, s azok felhasználásával
#    oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni, akkor az
#    első 10 sorának adatait jegyezze be a programba és dolgozzon azzal!
#-------------------------------------------------------------------------------------
def F1():
    print('1. feladat ---------------------------------------------------------')
    print('Adatok beolvasása...')
    fbe=open('forgalom.txt','r')
    global jarmuvek_szama                           # ezt nem fogjuk használni
    jarmuvek_szama=int(fbe.readline().strip())      # lista elemszámát mindg tudjuk :)

    for sor in fbe:                                 # fájl további sorai
        sor=sor.strip().split()
        sor[0:4]=map(int,sor[0:4])                  # első 4 adat int típusú lesz
        forgalom.append(sor)

#-------------------------------------------------------------------------------------
# 2. Írja ki a képernyőre, hogy az n-edikként belépő jármű melyik város felé haladt!
#    Ehhez kérje be a felhasználótól az n értékét!
#-------------------------------------------------------------------------------------
def F2():
    print('\n2. feladat ---------------------------------------------------------')
    n=int(input('Kérem egy jármű sorszámát: '))
                                                        # feltételes értékadás
    varos='A' if forgalom[n-1][-1]=='F' else 'F'        # indexek, ugye... :)
    print(f'Az {n}. jármű {varos} város felé haladt.')

#-------------------------------------------------------------------------------------
# 3. Írja a képernyőre, hogy a Felső város irányába tartó utolsó két jármű hány másod-
#    perc különbséggel érte el az útszakasz kezdetét!
#-------------------------------------------------------------------------------------
def F3():
    print('\n3. feladat ---------------------------------------------------------')
    utolsoF=[]      # utolsó F-be tartó járművekhez kell
    i=-1            # a forgalom lista végétől visszafelé keressük az A-ból indulókat
    N=0             # ebben számoljuk, hogy meglegyen a kettő jármű
    while N<2:      # addig keresünk, amíg a kettő össze nem jön (biztos, hogy összejön)
        if forgalom[i][-1]=='A':
            utolsoF.append(forgalom[i])
            N+=1
        i-=1        # index csökkentése (fontos), hátulról előre haladva
    u=utolsoF[0]    # utolsó adatainak listája
    ue=utolsoF[1]   # utolsóelőtti adatainak listája
    u_ido=ido(u[0],u[1],u[2],u[3])              # ido objektum (itt használjuk a Class-t)
    ue_ido=ido(ue[0],ue[1],ue[2],ue[3])
    kulonbseg=u_ido.masodperc-ue_ido.masodperc
    print('Felső város irányába tartó utolsó két jármű')
    print(f'{kulonbseg} mp különbséggel éri el az út kezdetét')

#-------------------------------------------------------------------------------------
# 4. Határozza meg óránként és irányonként, hogy hány jármű érte el a szakaszt! Soron-
#    ként egy-egy óra adatait írja a képernyőre! Az első érték az órát, a második ér-
#    ték az Alsó, a harmadik a Felső város felől érkező járművek számát jelentse!
#    A kiírásban csak azokat az órákat jelenítse meg, amelyekben volt forgalom vala-
#    mely irányban!
#-------------------------------------------------------------------------------------
def F4():
    print('\n4. feladat ---------------------------------------------------------')
    # https://odorpeter.hu/tippek_trukkok.html#9
    # itt jön be a fenti linken elérhető lista "anomália" téma...
    # illetve az alábbi linken elérhető adatok közötti kapcsolatok téma:
    # https://odorpeter.hu/tippek_trukkok.html#2

    # 1. megoldás
    orankent=[]
    for i in range(24):
        orankent.append([0,0])
    
    for jarmu in forgalom:
    
        if jarmu[4]=='A':
            orankent[jarmu[0]-1][0]+=1
        else:
            orankent[jarmu[0]-1][1]+=1
            
    print('óra\tA-ból\tF-ből')              # "fejléc" - csak úgy...
    for ora in range(24):
        if orankent[ora][0]+orankent[ora][1]>0:
            print(f'{ora+1}\t{orankent[ora][0]}\t{orankent[ora][1]}')

    # 2. megoldás        
    orankent=[]             # óránkénti adatok listája
    ora=forgalom[0][0]      # az első adatot kiemeljük, annak az óráját
    db_A=0                  # számlálók nullázása
    db_F=0
    for jarmu in forgalom:
        if jarmu[0]==ora:   # aktuális óra azonos a kiemelttel
            if jarmu[4]=='A':   # megfelelő számláló növelése
                db_A+=1
            else:
                db_F+=1
        else:
            # "óraváltás" van
            orankent.append([ora,db_A,db_F])    # előző óra összesítése mehet a listánkba
            ora=jarmu[0]                        # új kiemelt óra
            if jarmu[4]=='A':                   # ezt már számolni kell!!!
                db_A=1
                db_F=0
            else:
                db_A=0
                db_F=1
    orankent.append([ora,db_A,db_F])        # az utolsó órát nem követi "óraváltás".
                                            # ezért "manuálisan" helyezzük a listánkba
    print('óra\tA-ból\tF-ből')              # "fejléc" - csak úgy...
    for ora in orankent:
        if ora[1]!=0 or ora[2]!=0:  # ez az if igazából nem kellene, de így korrekt...
            print(f'{ora[0]}\t{ora[1]}\t{ora[2]}')

#-------------------------------------------------------------------------------------
# 5. A belépéskor mért értékek alapján határozza meg a 10 leggyorsabb járművet! Írassa
#    ki a képernyőre ezek belépési idejét, a várost (Alsó, illetve Felső), amely felől
#    érkezett, és m/s egységben kifejezett sebességét egy tizedes pontossággal, sebes-
#    ségük szerinti csökkenő sorrendben! Ha több azonos sebességű járművet talál, bár-
#    melyiket megjelenítheti. Soronként egy jármű adatait jelenítse meg, és az egyes
#    adatokat szóközzel tagolja! (A feladat megoldásakor figyeljen arra, hogy a követ-
#    kező feladatban az adatok eredeti sorrendjét még fel kell használni!)
#-------------------------------------------------------------------------------------
def F5():
    print('\n5. feladat ---------------------------------------------------------')
    rendezett=sorted(forgalom,key=lambda x:x[3])    # rendezés az áthaladás ideje szerint
    for i in range(10):     # a rendezés miatt a kiírás már nem gond...
        jarmu=rendezett[i]
        ido_obj=ido(jarmu[0],jarmu[2],jarmu[2],jarmu[3])    # itt is Class-t használunk
        print(ido_obj,end=' ')
        # a km/h óra csak úgy...
        print(f'{jarmu[4]} {1000/jarmu[3]:.1f} m/s {1000/jarmu[3]*3.6:.1f} km/h')

#-------------------------------------------------------------------------------------
# 6. Írassa ki az also.txt állományba azokat az időpontokat, amikor az Alsó város felé
#    tartók elhagyták a kérdéses útszakaszt! Ha egy jármű utolér egy másikat, akkor a
#    kilépésük időpontja a lassabb kilépési ideje legyen! A fájl minden sorába egy-egy
#    időpont kerüljön óra perc másodperc formában! A számokat pontosan egy szóköz
#    válassza el egymástól!
#-------------------------------------------------------------------------------------
def F6():
    print('\n6. feladat ---------------------------------------------------------')
    print('Adatok kiírása...')
    fki=open('also.txt','w')
    elozo=0                 # ha esetleg utóléri(k) az adott járművet a következő(k)...
    for jarmu in forgalom:
        if jarmu[4]=='F':   # A-ba tart
            ido_obj=ido(jarmu[0],jarmu[1],jarmu[2],jarmu[3])
            # mikor lépne ki a jármű a szakaszról...
            kilep=max(elozo,ido_obj.masodperc)      # utoléri-e vagy nem az előzőt
            o=kilep//3600                           # óra perc mp váltások
            p=kilep%3600//60
            mp=kilep%3600%60
            print(o,p,mp,file=fki)
            elozo=kilep                             # ez fontos, ugye...
    fki.close()        
#------------------------------- F Ő M O D U L -------------------------------
forgalom=[]
F1()
F2()
F3()
F4()
F5()
F6()
