class Uzenet:
    def __init__(self, nap=0, radio=0, szoveg=0):
        self.nap = nap
        self.radio = radio
        self.szoveg = szoveg


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        uzenetek = []
        f = open(self.fnev, encoding='utf-8')
        i = 0
        for sor in f.readlines():
            if not i % 2:
                nap, radio = sor.split()
                uzenetek.append(Uzenet(int(nap), int(radio)))
            else:
                uzenetek[-1].szoveg = sor.strip()
            i += 1
        f.close()
        return uzenetek

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()


class Uzenetek:
    def __init__(self, adatok=None):
        if adatok is None:
            adatok = []
        self.adatok = adatok

    def elso_utolso_uzenet_rogzitoje(self) -> dict:
        """az elso es utolso uzenet rogzitoje"""
        return {'elso': self.adatok[0].radio, 'utolso': self.adatok[-1].radio}

    def elso_utolso_uzenet_rogzitoje_kiir(self) -> str:
        """az elso es utolso uzenet rogzitoje kiir"""
        return 'Az első üzenet rögzítője: ' + str(self.elso_utolso_uzenet_rogzitoje()['elso']) + \
               '\nAz utolsó üzenet rögzítője: ' + str(self.elso_utolso_uzenet_rogzitoje()['utolso'])

    def farkas(self) -> list:
        """uzenetek, amelyekben szerepel a farkas szo"""
        return [uzenet for uzenet in self.adatok if 'farkas' in uzenet.szoveg]

    def farkas_kiir(self) -> str:
        """uzenetek, amelyekben szerepel a farkas szo kiir"""
        sz = ''
        for uzenet in self.farkas():
            sz += str(uzenet.nap) + '. nap ' + str(uzenet.radio) + '. radióamatőr\n'
        return sz

    def feljegyzesek_szama(self) -> dict:
        """feljegyzesek szama naponkent"""
        stat = {}
        for i in range(1, 12):
            stat[i] = 0
        for uzenet in self.adatok:
            stat[uzenet.nap] += 1
        return stat

    def feljegyzesek_szama_kiir(self) -> str:
        """feljegyzesek szama naponkent"""
        sz = ''
        for nap, db in self.feljegyzesek_szama().items():
            sz += str(nap) + '. nap: ' + str(db) + ' radióamatőr\n'
        return sz

    def helyreallitott(self) -> dict:
        """naponkent helyreallitott uzenet"""
        napok = sorted(set(uzenet.nap for uzenet in self.adatok))
        szovegek = {}
        for nap in napok:
            uzenetek = [uzenet.szoveg for uzenet in self.adatok if uzenet.nap == nap]
            helyreallitott = uzenetek[0]
            # az uzenetek listában vannak az azonos naphoz tartozó üzenetek
            # az első üzenet a helyreallitott stringben van
            # a helyreallitott uzenet karaktereit hasonlítjuk össze a többivel és # esetén csere
            for uzenet in uzenetek:
                for i in range(len(helyreallitott)):
                    if helyreallitott[i] == '#':
                        helyreallitott = helyreallitott[:i] + uzenet[i] + helyreallitott[i + 1:]
            szovegek[nap] = helyreallitott
        return szovegek

    def helyreallitott_kiir(self) -> str:
        """naponkent helyreallitott uzenet"""
        sz = ''
        for nap, szoveg in self.helyreallitott().items():
            sz += str(nap) + ' ' + szoveg + '\n'
        return sz

    # 6. feladat
    def szame(self, szo) -> bool:
        valasz = True
        for i in range(1, len(szo)):
            if szo[i] < '0' or szo[i] > '9':
                valasz = False
        return valasz

    def egyedszam(self, nap, radio):
        """megfigyelt egyedek szama"""
        elem = [x for x in self.adatok if x.nap == nap and x.radio == radio]
        if len(elem) == 0:
            return 'Nincs ilyen adat.'
        else:
            # elem[0].szoveg.split() az üzenetet szétdarabolja
            # elem[0].szoveg.split()[0] kivesszi az egyedekre vonatkozó információt pl: 1/0
            # elem[0].szoveg.split()[0].split('/') eredménye: ['1', '0']
            egyedek = elem[0].szoveg.split()[0].split('/') if '#' not in elem[0].szoveg.split()[0] else []
            if len(egyedek) == 2:
                return 'A megfigyelt egyedek száma: ' + str(int(egyedek[0]) + int(egyedek[1]))
            else:
                return 'Nincs ilyen információ.'


# 1. feladat
fajl = Fajl('veetel.txt')
uzenetek = Uzenetek(fajl.beolvas())

# 2. feladat
print("2. feladat\n", uzenetek.elso_utolso_uzenet_rogzitoje_kiir(), sep='')

# 3. feladat
print("3. feladat\n", uzenetek.farkas_kiir(), sep='')

# 4. feladat
print("4. feladat\n", uzenetek.feljegyzesek_szama_kiir(), sep='')

# 5. feladat
fajl = Fajl('adaasOOP.txt')
fajl.kiir(uzenetek.helyreallitott_kiir())
print("5. feladat\nA fájlbaírás kész.")

# 7. feladat
n, m = int(input("7. feladat\nAdja meg a napot: ")), int(input("Adja meg a megfigyelőt: "))
print("7. feladat\n", uzenetek.egyedszam(n, m), sep='')
