class Szin:
    def __init__(self, r=0, g=0, b=0):
        self.r = r
        self.g = g
        self.b = b

    def __eq__(self, other):
        return self.r == other.r and self.g == other.g and self.b == other.b

    def __str__(self):
        return str(self.r) + ' ' + str(self.g) + ' ' + str(self.b)


class Pont:
    def __init__(self, szin, sor, oszlop):
        self.szin = szin
        self.sor = sor
        self.oszlop = oszlop


class Kep:
    def __init__(self, pontok=None):
        if pontok is None:
            pontok = []
        self.pontok = pontok

    def szin_keres(self, szin) -> bool:
        """szin keresese a kepben"""
        van = False
        for pont in self.pontok:
            if pont.szin == szin:
                van = True
                break
        return van

    def keres_kiir(self, szin) -> str:
        """szin keresese a kepben kiir"""
        return ['Nincs ilyen szín a képben.', 'Van ilyen szín a képben.'][self.szin_keres(szin)]

    def pont_keres(self, sor, oszlop) -> Pont:
        """egy pont keresese sor, oszlop alapjan"""
        for pont in self.pontok:
            if pont.sor == sor and pont.oszlop == oszlop:
                return pont

    def _35_8_db(self) -> dict:
        """a kep 35. soranak es 8. oszlopanak szine a 35. sorban es a 8. oszlopban"""
        darab = {'sor': 0, 'oszlop': 0}
        pont35_8 = self.pont_keres(35, 8)
        for pont in self.pontok:
            if pont.szin == pont35_8.szin:
                if pont.sor == pont35_8.sor:
                    darab['sor'] += 1
                if pont.oszlop == pont35_8.oszlop:
                    darab['oszlop'] += 1
        return darab

    def _35_8_db_kiir(self) -> str:
        """a kep 35. soranak es 8. oszlopanak szine a 35. sorban es a 8. oszlopban kiir"""
        return 'Sorban: ' + str(self._35_8_db()['sor']) + ' Oszlopban: ' + str(self._35_8_db()['oszlop'])

    def szinek_legtobb(self):
        """voros, zold, kek szin elofordulasa kozul a legtobb"""
        darab = {'vörös': 0, 'zöld': 0, 'kék': 0}
        for pont in self.pontok:
            if pont.szin == Szin(255, 0, 0):
                darab['vörös'] += 1
            if pont.szin == Szin(0, 255, 0):
                darab['zöld'] += 1
            if pont.szin == Szin(0, 0, 255):
                darab['kék'] += 1
        return max(list(darab.items()), key=lambda x: x[1])[0]

    def kep_keretezes(self):
        """3 pont szeles keretezes"""
        fekete = Szin(0, 0, 0)
        pontok = []
        for i in range(1, 57):
            for j in range(1, 57):
                if 4 <= i <= 53 and 4 <= j <= 53:
                    ujpontszine = self.pont_keres(i - 3, j - 3).szin
                    pontok.append(Pont(ujpontszine, i, j))
                else:
                    pontok.append(Pont(fekete, i, j))
        self.pontok = pontok
        return self.pontok

    def keretes_kiir(self) -> str:
        """keretes kep kiirasa"""
        sz = ''
        for pont in self.pontok:
            sz += str(pont.szin) + '\n'
        return sz

    def sarga(self) -> list:
        """sarga pontok"""
        return [pont for pont in self.pontok if pont.szin == Szin(255, 255, 0)]

    def sarga_teglalap_kiir(self) -> str:
        """sarga teglalap adatai kiir"""
        return 'Kezd: ' + str(self.sarga()[0].sor) + ', ' + str(self.sarga()[0].oszlop) + '\n' + \
               'Vége: ' + str(self.sarga()[-1].sor) + ', ' + str(self.sarga()[-1].oszlop) + '\n' + \
               'Képpontok száma: ' + str(len(self.sarga()))


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        pontok = []
        f = open(self.fnev, encoding='utf-8')
        i = 0
        for sor in f.readlines():
            r, g, b = sor.split()
            pontok.append(Pont(Szin(int(r), int(g), int(b)), i // 50 + 1, i % 50 + 1))
            i += 1
        f.close()
        return pontok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
fajl = Fajl('kep.txt')
kep = Kep(fajl.beolvas())

# 2. feladat
rgb = input("2. feladat\nAdjon megy egy RGB kódot szóközzel elválasztva: ").split()
szin = Szin(*rgb)
print(kep.keres_kiir(szin))

# 3. feladat
print("3. feladat\n", kep._35_8_db_kiir(), sep='')

# 4. feladat
print("4. feladat\nA legtöbbet előforduló szín:", kep.szinek_legtobb())

# 5 - 6. feladat
fajl = Fajl('keretesOOP.txt')
fajl.kiir(kep.keretes_kiir())
print("6. feladat\nFájlbaírás kész.")

# 7. feladat
print("7. feladat\nA keretes képben\n", kep.sarga_teglalap_kiir(), sep='')
