def kiir(ssz, szoveg):
    print('{}. feladat - {}'.format(ssz, szoveg))
# ------------------------------------------------------------------------------
# 1. Olvassa be a jarmu.txt állományban talált adatokat, s annak
#    felhasználásával oldja meg a következő feladatokat!
# ------------------------------------------------------------------------------
kiir(1, 'Adatok beolvasása')
fbe = open('jarmu.txt', 'r')
adatok = []  # forrásadatokat tartalmazó mátrix: elemei 4 elemű listák
# [óra,perc.másodperc,rendszám]
for sor in fbe:
    sor = sor.strip().split()
    adatok.append(sor)
print('Beolvasott sorok száma:', len(adatok))
fbe.close()
# ------------------------------------------------------------------------------
# 2. Határozza meg, hogy aznap legalább hány óra hosszat dolgoztak az
#    ellenőrzést végzők, ha munkaidejük egész órakor kezdődik, és pontosan
#    egész órakor végződik! (Minden óra 0 perc 0 másodperckor kezdődik, és 59
#    perc 59 másodperccel végződik.) Az eredményt jelenítse meg a képernyőn!
# ------------------------------------------------------------------------------
kiir(2, 'Munkaidő hossza')
# kihasználjuk, hogy a fájlunk elhaladás sorrendjében tartalmazza az adatokat
k = int(adatok[0][0])
v = int(adatok[-1][0]) + 1
print('Legalább {} órát dolgoztak!'.format(v - k))
# ------------------------------------------------------------------------------
# 3. Műszaki ellenőrzésre minden órában egy járművet választanak ki. Azt,
#    amelyik abban az órában először halad arra. Az ellenőrzés óráját és az
#    ellenőrzött jármű rendszámát jelenítse meg a képernyőn a következő
#    formában: 9 óra: AB-1234! Minden óra adata külön sorba kerüljön! Csak
#    azon órák adatai jelenjenek meg, amikor volt ellenőrizhető jármű!
# ------------------------------------------------------------------------------
kiir(3, 'Műszaki ellenőrzés')
# első adatot kiemeljük
print('{} óra: {}'.format(adatok[0][0], adatok[0][3]))
for i in range(len(adatok) - 1):  # további adatsorokat nézzük db-1-ig i+1 index miatt
    if adatok[i][0] != adatok[i + 1][0]:  # ha aktuális és következő óra eltér,...
        print('{} óra: {}'.format(adatok[i + 1][0], adatok[i + 1][3]))  # következő ki
# ------------------------------------------------------------------------------
# 4. A rendszám első karaktere külön jelentéssel bír. Az egyes betűk közül
#    a „B” autóbuszt, a „K” kamiont, az „M” motort jelöl, a többi rendszámhoz
#    személygépkocsi tartozik. Jelenítse meg a képernyőn, hogy az egyes
#    kategóriákból hány jármű haladt el az ellenőrző pont előtt!
# ------------------------------------------------------------------------------
kiir(4, 'Jármű kategóriák')
jkat = [0] * 4  # 'B'-busz,'K',-kamion,'M'-motor, minden más szgk. 4 kategória
hkat = set({'B', 'K', 'M'})
for adat in adatok:
    if adat[3][0] == 'B':
        jkat[0] += 1
    if adat[3][0] == 'K':
        jkat[1] += 1
    if adat[3][0] == 'M':
        jkat[2] += 1
    if adat[3][0] not in hkat:  # csak ezért kellett a hkat halmaz
        jkat[3] += 1
j = ['Busz:', 'Kamion:', 'Motor:', 'Szgk:']
for i in range(4):
    print(j[i], jkat[i])
# ------------------------------------------------------------------------------
# 5. Mettől meddig tartott a leghosszabb forgalommentes időszak? A választ
#    jelenítse meg a képernyőn a következő formában: 9:9:13 - 9:15:3!
# ------------------------------------------------------------------------------
kiir(5, 'Forgalommentes időszak')

def mpbe(o, p, mp):
    o = int(o)
    p = int(p)
    mp = int(mp)
    return o * 3600 + p * 60 + mp

maxh = 0
# megkeressük két egymást követő idő közötti legnagyobb különbséget
for i in range(len(adatok) - 1):
    ido_k = mpbe(adatok[i][0], adatok[i][1], adatok[i][2])  # aktuális
    ido_v = mpbe(adatok[i + 1][0], adatok[i + 1][1], adatok[i + 1][2])  # következő
    if ido_v - ido_k > maxh:  # különbségük hasonlítása maximumhoz
        maxh = ido_v - ido_k
        index = i  # megjegyezzük az indexet is
s = adatok[index][0] + ':' + adatok[index][1] + ':' + adatok[index][2] + ' - '
s = s + adatok[index + 1][0] + ':' + adatok[index + 1][1] + ':' + adatok[index + 1][2]
print('Leghosszabb forgalommentes időszak: ', s)
# ------------------------------------------------------------------------------
# 6. A rendőrök egy baleset közelében látott járművet keresnek rendszám
#    alapján. A szemtanúk csak a rendszám bizonyos karaktereire emlékeztek,
#    így a rendszám ismeretlen karaktereit a * karakterrel helyettesítve
#    keresik a nyilvántartásban. Kérjen be a felhasználótól egy ilyen
#    rendszámot, majd jelenítse meg a képernyőn az arra illeszthető
#    rendszámokat!
# ------------------------------------------------------------------------------
kiir(6, 'Rendszámkeresés')
rsz = input('Keresett rendszám (ismeretlen karakter esetén *):')
talalat = 0
for i in range(len(adatok)):
    azonos = 0
    # keresett rendszám betűin megyünk végig
    for j in range(len(rsz)):
        # ha aktuális rendszám adott betűje megfelel vagy * van, akkor
        if adatok[i][3][j] == rsz[j] or rsz[j] == '*':
            azonos += 1  # növeljük az azonosság számlálót
    if azonos == len(rsz):  # ha minden karakterre volt egyezés vagy *, akkor
        print(adatok[i][3])  # az a rendszám megfelel
        talalat += 1  # volt találatunk
if talalat == 0:
    print('Nincs ilyen rendszám!')
# ------------------------------------------------------------------------------
# 7. Egy közúti ellenőrzés pontosan 5 percig tart. Amíg az ellenőrzés
#    folyik, a járművek szabadon elhaladhatnak, a következő megállítására
#    csak az ellenőrzés befejezése után kerül sor. Ha a rendőrök a legelső
#    járművet ellenőrizték, akkor mely járműveket tudták ellenőrizni a
#    szolgálat végéig? Írja az ellenőrzött járművek áthaladási idejét és
#    rendszámát a vizsgalt.txt állományba az áthaladás sorrendjében, a
#    bemenettel egyező formában! Ügyeljen arra, hogy az időadatokhoz tartozó
#    számok a bevezető nullákat tartalmazzák!
# ------------------------------------------------------------------------------
kiir(7, 'Vizsgálati adatok')
fki = open('vizsgalt.txt', 'w')
# a legelső adatsorban lévő autót megvizsgálták
s = ' '.join(adatok[0])
# ehhez képest nézzük a következőt majd
k = mpbe(adatok[0][0], adatok[0][1], adatok[0][2])
otperc = 5 * 60  # 300 mp eltérést kell keresnünk az egyes adatsorok között
print(s, file=fki)
for i in range(1, len(adatok)):
    v = mpbe(adatok[i][0], adatok[i][1], adatok[i][2])
    if v - k >= otperc:  # ha van ilyen adat, akkor
        print(' '.join(adatok[i]), file=fki)  # kiírjuk
        k = v  # és ehhez nézzük majd a következőt
fki.close()
