class Telek:
    def __init__(self, oldal, hazszam, szelesseg, szin):
        self.oldal = oldal
        self.hazszam = hazszam
        self.szelesseg = szelesseg
        self.szin = szin


class Utca:
    def __init__(self, telkek=None):
        if telkek is None:
            telkek = []
        self.telkek = telkek

    def darab(self) -> int:
        """eladott telkek szama"""
        return len(self.telkek)

    def utolso(self) -> Telek:
        """utoljara eladaott telek"""
        return [telek for telek in self.telkek][-1]

    def utolso_kiir(self) -> str:
        """utoljara eladott telek kiir"""
        return 'A ' + ['páros', 'páratlan'][self.utolso().oldal] + ' oldalon adták el az utolsó telket.\n' + \
               'Az utolsó telek házszáma: ' + str(self.utolso().hazszam)

    def egyezo_szin(self) -> Telek:
        """telek a paratlan oldalrol, amely keritesenek szine egyezik a szomszeddal"""
        telek = None
        paratlan = [telek for telek in self.telkek if telek.oldal]
        for i in range(len(paratlan)):
            if paratlan[i].szin not in '#:' and paratlan[i].szin == paratlan[i + 1].szin:
                telek = paratlan[i]
                break
        return telek

    def telek_keres(self, hazszam) -> Telek:
        """hazszam alapjan kereses"""
        i = 0
        while self.telkek[i].hazszam != hazszam:
            i += 1
        return self.telkek[i]

    def ujszin(self, hazszam) -> str:
        """a keresett telek keritesenek uj szine"""
        telkek = [telek for telek in self.telkek if telek.oldal == telek.hazszam % 2]
        szinek = [self.telek_keres(hazszam).szin]
        if hazszam - 2 > 0:
            szinek.append(self.telek_keres(hazszam - 2).szin)
        if hazszam + 2 < len(telkek):
            szinek.append(self.telek_keres(hazszam + 2).szin)
        for uj_szine in 'ABCD':
            if uj_szine not in szinek:
                break
        return uj_szine

    def paratlan_megjelenit(self) -> str:
        """paratlan oldal megjelenitese"""
        telkek = [telek for telek in self.telkek if telek.oldal]
        sz, masodik_sor = '', ''
        for telek in telkek:
            sz += telek.szin * telek.szelesseg
            masodik_sor += str(telek.hazszam).ljust(telek.szelesseg)  # formázott kiírás
        sz += '\n' + masodik_sor
        return sz


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        telkek = []
        f = open(self.fnev)
        i, j = 1, 1
        for sor in f.readlines():
            oldal, szelesseg, kerites = sor.split()
            if not int(oldal):
                # páros oldal
                telkek.append(Telek(int(oldal), 2 * i, int(szelesseg), kerites))
                i += 1
            else:
                telkek.append(Telek(int(oldal), 2 * j - 1, int(szelesseg), kerites))
                j += 1
        f.close()
        return telkek

    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('kerites.txt')
utca = Utca(fajl.beolvas())
print(utca.telkek[-1].szin)
# 2. feladat
print("2. feladat\nAz eladott telkek száma az utcában:", utca.darab())

# 3. feladat
print("3. feladat\n", utca.utolso_kiir(), sep='')

# 4. feladat
print("4. feladat\nA szomszédossal egyezik a kerítés színe:", utca.egyezo_szin().hazszam)

# 5. feladat
hazszam = int(input("5. feladat:\nAdjon meg egy házszámot! "))
print("A kerítés színe/állapota:", utca.telek_keres(hazszam).szin)
print("Egy lehetséges festési szín:", utca.ujszin(hazszam))

# 6. feladat
fajl = Fajl('utcakepOOP.txt')
fajl.kiir(utca.paratlan_megjelenit())
print("6. feladat\nFájlbaírás kész.")
