menetrend=[]        #mátrix: "táblázatszerűen a fájlban lévő adatok (listák listája)

# Az első szám a vonatazonosító, a második az állomásazonosító, a harmadik és 
# negyedik egy időpont órája és perce. A karakter pedig azt jelzi, hogy a vonat
# az adott állomásra érkezik (E) vagy éppen indul (I) a megadott időben. 

#------------------------------------------------------------------------------------------
# 1. Olvassa be és tárolja el a vonat.txt fájl tartalmát!
#------------------------------------------------------------------------------------------
def F1():
    fbe=open('vonat.txt','r')
    allomasok=set()
    vonatok=set()
    global m2,vegallomas
    
    m=[]
    for sor in fbe:
        sor=[int(adat) if adat.isdigit() else adat for adat in sor.strip().split('\t')]
        vonatok.add(sor[0])
        allomasok.add(sor[1])
        menetrend.append(sor)
        # m - egy újabb mátrix, csak ebben az óra és perc helyett percekben van az idő
        m.append([sor[0],sor[1],sor[2]*60+sor[3],sor[4]])
    m2=sorted(m) #rendezni kell a 3. feladat miatt - a rendezés a vonatszámok
                 #alapján történik
    fbe.close()
    F2(allomasok, vonatok)
    vegallomas=max(allomasok)
#------------------------------------------------------------------------------------------
# 2. Írja a képernyőre a fájlban tárolt vonatok és állomások darabszámát – a kezdő és 
#    végállomást is beleértve!
#------------------------------------------------------------------------------------------
def F2(allomasok, vonatok):
    print('2. feladat')
    print('Az állomások száma: %d' %len(allomasok))
    print('A vonatok száma: %d' %len(vonatok))
#------------------------------------------------------------------------------------------
# 3. Határozza meg, hogy melyik állomáson állt legtöbbet vonat! Adja meg a vonat és az
#    állomás azonosítóját, valamint az állás idejét! Ha több ilyen volt, elég csak az
#    egyiket megadnia.
#------------------------------------------------------------------------------------------
def F3():
    # Az adatok időrendben szerepelnek, azon belül pedig 
    # – az induló állomás kivételével – az érkezés mindig megelőzi az indulást
    print('3. feladat')
    print(m2)
    maxido=0
    for i in range(1,len(m2)-2):
        if m2[i][0]==m2[i+1][0]:
            if m2[i+1][2]-m2[i][2]>maxido:
                #érkezik-indul egy adott állomás esetén
                maxhely=i
                maxido=m2[i+1][2]-m2[i][2]
    vonat=m2[maxhely][0]
    allomas=m2[maxhely][1]
    print('A(z) %d. vonat a(z) %d. állomáson %d percet állt.' %(vonat,allomas,maxido))
#------------------------------------------------------------------------------------------
# 4. Olvassa be egy vonat azonosítóját, valamint egy időpont óra és perc értékét! A későbbi 
#    feladatokban használja ezeket!
#------------------------------------------------------------------------------------------
def F4():
    print('4. feladat')
    global vonatszam,idopont,idopont_percben
    vonatszam=int(input('Adja meg egy vonat azonosítóját! '))
    idopont=input('Adjon meg egy időpontot (óra perc)! ').strip().split()
    idopont_percben=int(idopont[0])*60+int(idopont[1])
#------------------------------------------------------------------------------------------
# 5. Ezen a vonalon az előírt menetidő 2 óra 22 perc. Írja a képernyőre, hogy a beolvasott 
#    azonosítójú vonat hány perccel tért el ettől! Például: „A(z) 5. vonat útja 2 perccel
#    rövidebb volt az előírtnál.”, „A(z) 5. vonat útja pontosan az előírt ideig tartott.”
#    vagy „A(z) 5. vonat útja 3 perccel hosszabb volt az előírtnál.”
#------------------------------------------------------------------------------------------
def F5():
    print('5. feladat')
    # előírt menetidő 2 óra 22 perc
    eloirt=2*60+22
    # keressük meg az  adott vonat indulását, a vonatszám biztosan szerepel az adatok között
    i=0
    while menetrend[i][0]!=vonatszam:
        i+=1
    indulas=menetrend[i][2]*60+menetrend[i][3]
    # keressük meg az adott vonat végállomásra érkezését
    i=len(menetrend)-1
    while menetrend[i][0]!=vonatszam:
        i-=1
    erkezes=menetrend[i][2]*60+menetrend[i][3]
    menetido=erkezes-indulas
    elter=eloirt-menetido  # <0: hosszabb; >0: rövidebb; ==0: pont oké
    if elter>0:
        print(f'A(z) {vonatszam}. vonat útja {elter} perccel rövidebb volt az előírtnál.')
    elif elter==0:
        print(f'A(z) {vonatszam}. vonat útja pontosan az előírt ideig tartott.')
    else:
        print(f'A(z) {vonatszam}. vonat útja {abs(elter)} perccel hosszabb volt az előírtnál.')
#------------------------------------------------------------------------------------------
# 6. Írja a haladX.txt fájlba, hogy a beolvasott azonosítójú vonat melyik állomásra mikor 
#    érkezett! A fájlnévben az X helyére a beolvasott vonatazonosító kerüljön!
#------------------------------------------------------------------------------------------   
def F6():
    fnev='halad'+str(vonatszam)+'.txt'
    fki=open(fnev,'w')
    for adat in menetrend:
        if adat[0]==vonatszam and adat[4]=='E':
            print(str(adat[1])+'. állomás: '+str(adat[2])+':'+str(adat[3]),file=fki)
    fki.close()
#------------------------------------------------------------------------------------------
# 7. Adja meg, hogy a beolvasott időpontban úton lévő, azaz a már elindult, de a
#    végállomást még el nem érő vonatok közül melyik hol tartott! A tesztelés során a
#    következő időpontokra érdemes figyelni: 6:50, 8:45, 9:05, 10:04, 10:20.
#------------------------------------------------------------------------------------------
def F7():
    print('7. feladat')
    for i in range(0,len(m2)-1):
        akt=m2[i]
        kov=m2[i+1]
        elindult=(i%2==0)
        if akt[0]==kov[0]:  #ugyanarról a vonatról van szó
            if akt[2]<=idopont_percben and idopont_percben<kov[2]:
                #úton van (illetve éppen elindult) vagy éppen áll
                if elindult:
                    print(f'A(z) {akt[0]}. vonat a(z) {akt[1]}. és a(z) {kov[1]}. állomás között járt.')
                else:
                    print(f'A(z) {akt[0]}. vonat a(z) {akt[1]}. állomáson állt.')

#------------------------------F Ő M O D U L-----------------------------------------------    
F1()
F3()
F4()
F5()
F6()
F7()
