class Ido:
    def __init__(self, o=0, p=0, mp=0):
        osszmp = o * 3600 + p * 60 + mp
        self.ora = osszmp // 3600
        self.perc = (osszmp % 3600) // 60
        self.mperc = osszmp % 60

    def mpbe(self):
        return self.ora * 3600 + self.perc * 60 + self.mperc

    def __sub__(self, other):
        return Ido(0, 0, abs(other.mpbe() - self.mpbe()))

    def eltelt(self, other):
        return self.mpbe() - other.mpbe()

    def __str__(self):
        return str(self.ora) + ':' + str(self.perc) + ':' + str(self.mperc)

    def __add__(self, other):
        return Ido(0, 0, abs(other.mpbe() + self.mpbe()))


class Pont:
    """jelado helyzete"""

    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __tav__(self, other) -> float:
        return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5

    def __sub__(self, other):
        return Pont(other.x - self.x, other.y - self.y)

    def __str__(self):
        return 'x=' + str(self.x) + ' y=' + str(self.y)


class Jel:
    def __init__(self, ido=Ido(0, 0, 0), pont=Pont(0, 0)):
        self.ido = ido
        self.pont = pont

    def __tav__(self, other):
        """két jel távolsága"""
        return self.pont.__tav__(other.pont)

    def ido_hibaszam(self, other) -> int:
        return (other.ido - self.ido + Ido(0, 0, 299)).mpbe() // 300 - 1

    def koordina_hibaszam(self, other) -> int:
        xh = (abs(self.pont.x - other.pont.x) + 9) // 10 - 1
        yh = (abs(self.pont.y - other.pont.y) + 9) // 10 - 1
        return max(xh, yh)

    def hiba(self, other) -> str:
        sz = ''
        if self.koordina_hibaszam(other) or self.ido_hibaszam(other):
            if self.ido_hibaszam(other) > self.koordina_hibaszam(other):
                sz = str(self.ido.ora) + ' ' + str(self.ido.perc) + ' ' + str(self.ido.mperc) + ' ' \
                     + 'időeltérés ' + str(self.ido_hibaszam(other))
            else:
                sz = str(self.ido.ora) + ' ' + str(self.ido.perc) + ' ' + str(self.ido.mperc) + ' ' \
                     + 'koordináta-eltérés ' + str(self.koordina_hibaszam(other))
        return sz


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        jelek = []
        f = open(self.fnev, encoding='utf-8')
        for sor in f.readlines():
            ora, perc, mperc, x, y = sor.split()
            jelek.append(Jel(Ido(int(ora), int(perc), int(mperc)), Pont(int(x), int(y))))
        f.close()
        return jelek

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()


class Jelado:
    def __init__(self, jelek=None):
        if jelek is None:
            jelek = []
        self.jelek = jelek

    def bal_also(self) -> Pont:
        xmin = min(jel.pont.x for jel in self.jelek)
        ymin = min(jel.pont.y for jel in self.jelek)
        return Pont(xmin, ymin)

    def jobb_felso(self) -> Pont:
        xmax = max(jel.pont.x for jel in self.jelek)
        ymax = max(jel.pont.y for jel in self.jelek)
        return Pont(xmax, ymax)

    def elmozdulasok_osszege(self) -> float:
        osszeg = 0
        for i in range(len(self.jelek) - 1):
            osszeg += self.jelek[i].__tav__(self.jelek[i + 1])
        return osszeg

    def hiba_kiir(self) -> str:
        sz = ''
        for i in range(len(self.jelek) - 1):
            if self.jelek[i + 1].hiba(self.jelek[i]) != '':
                sz += self.jelek[i + 1].hiba(self.jelek[i]) + '\n'
        return sz


# 1. feladat
fajl = Fajl('jel.txt')
jelado = Jelado(fajl.beolvas())

# 2. feladat
ssz = int(input('2. feladat\nAdja meg a jel sorszámát! '))
print(jelado.jelek[ssz - 1].pont)

# 4. feladat
print("4. feladat\nIdőtartam:", jelado.jelek[-1].ido - jelado.jelek[0].ido)
# eltelt függvénnyel
print("4. feladat\nIdőtartam:", Ido(0, 0, jelado.jelek[-1].ido.eltelt(jelado.jelek[0].ido)))

# 5. feladat
print(f"5. feladat\nBal alsó: {jelado.bal_also()}, jobb felső: {jelado.jobb_felso()}")

# 6. feladat
print(f"6. feladat\nElmozdulás: {jelado.elmozdulasok_osszege():.3f}")

# 7. feladat
fajl = Fajl('kimaradtOOP.txt')
fajl.kiir(jelado.hiba_kiir())
