class Ido:
    """ido osztalya"""
    def __init__(self, o, p, mp):
        osszesmp = o * 3600 + p * 60 + mp
        self.o = int(osszesmp // 3600)
        self.p = int((osszesmp - self.o * 3600) // 60)
        self.mp = round(osszesmp - self.o * 3600 - self.p * 60, 3)

    def mpbe(self) -> float:
        """masodpercbe"""
        return self.o * 3600 + self.p * 60 + self.mp

    def __sub__(self, other):
        """kivonas"""
        return Ido(0, 0, abs(self.mpbe() - other.mpbe()))

    def __gt__(self, other):
        """nagyobb operator"""
        if self.mpbe() > other.mpbe():
            return True
        return False


class Auto:
    """auto osztalya"""
    def __init__(self, rsz, idobe, idoki):
        self.rsz = rsz
        self.idobe = idobe
        self.idoki = idoki
        self.seb = round(10 / self.szakasz_ido().mpbe() * 3600)

    def szakasz_ido(self) -> Ido:
        """szakasz ideje"""
        return self.idoki - self.idobe

    def gyorshajto(self) -> bool:
        """gyorshajto-e"""
        return [False, True][self.seb > 90]

    def buntetett(self) -> bool:
        """megbuntettek-e"""
        return [False, True][self.seb > 104]

    def buntetes(self) -> int:
        """fizetendo buntetes"""
        if 104 < self.seb <= 121:
            return 30000
        if 121 < self.seb <= 136:
            return 45000
        if 136 < self.seb < 151:
            return 60000
        if 151 < self.seb:
            return 200000


class Meresek:
    """meresek osztalya"""
    def __init__(self, autok=None):
        if autok is None:
            autok = []
        self.autok = autok

    def darab(self) -> int:
        """meresek szama"""
        return len(self.autok)

    def db9elott(self) -> int:
        """9 ora elott a vegponti meronel elhalado autok szama"""
        return sum(1 for auto in self.autok if auto.idoki.o < 9)

    def dbido(self, ora, perc) -> int:
        """adott ora-percben elhaladt autok szama a kezdopontnal"""
        return sum(1 for auto in self.autok if auto.idobe.o == ora and auto.idobe.p == perc)

    def fsuruseg(self, ora, perc) -> float:
        """forgalomsuruseg"""
        db = self.darab() - sum(1 for auto in self.autok if
                                Ido(ora, perc, 0) > auto.idoki or auto.idobe > Ido(ora, perc + 1, 0))
        return db / 10

    def leggyorsabb(self) -> Auto:
        """a leggyorsabb auto"""
        return max(self.autok, key=lambda x: x.seb)

    def lehagyott(self) -> int:
        """a leggyorsab altal lehagyottak szama"""
        return sum(
            1 for auto in self.autok if self.leggyorsabb().idobe > auto.idobe and auto.idoki > self.leggyorsabb().idoki)

    def gyorshajtok_aranya(self) -> float:
        """gyorshajtok aranya"""
        return round(sum(1 for auto in self.autok if auto.gyorshajto()) * 100 / self.darab(), 2)

    def buntetettek(self) -> list:
        """megbuntettett autok"""
        return [auto for auto in autok if auto.buntetett()]

    def buntetettek_kiir(self) -> str:
        """buntetettek listaja szovegbe"""
        sz = ''
        for auto in self.buntetettek():
            sz += auto.rsz + '\t' + str(auto.seb) + ' km/h' + '\t' + str(auto.buntetes()) + ' Ft\n'
        return sz


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        meresek = []
        for sor in f.readlines():
            az, o1, p1, mp1, emp1, o2, p2, mp2, emp2 = sor.split()
            o1, p1, mp1, o2, p2, mp2 = int(o1), int(p1), int(mp1) + int(emp1) / 1000, int(o2), int(p2), int(mp2) + int(
                emp2) / 1000
            meresek.append(Auto(az, Ido(o1, p1, mp1), Ido(o2, p2, mp2)))
        f.close()
        return meresek

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


fajl = Fajl('meresek.txt')
autok = fajl.beolvas()
meresek = Meresek(autok)

# 2. feladat
print("2. feladat\nA mérés során", meresek.darab(), "jármű adatait rögzítették.")
print("3. feladat\n9 óra előtt", meresek.db9elott(), "jármű haladt el a végponti mérőnél.")

# 4. feladat
ora, perc = input("4. feladat\nAdjon meg egy óra és perc értéket! ").split()
# 4.a feladat
ora, perc = int(ora), int(perc)
print("\ta. A kezdeti méréspontnál elhaladt járművek száma:", meresek.dbido(ora, perc))
print("\tb. A forgalomsűrűség:", meresek.fsuruseg(ora, perc))

# 5. feladat
print("5. feladat\nA legnagyobb sebességgel haladó jármű")
print("\trendszáma:", meresek.leggyorsabb().rsz)
print("\tsebessége:", meresek.leggyorsabb().seb, "km/h")
print("\táltal lehagyott járművek száma:", meresek.lehagyott())

# 6. feladat
print("6. feladat\nA járművek ", meresek.gyorshajtok_aranya(), "%-a volt gyorshajtó.")

# 7. feladat
fajl = Fajl('buntetesOOP.txt')
fajl.kiir(meresek.buntetettek_kiir())
print("7. feladat\nA fájl elkészült.")
