class Szek:
    """szék osztálya"""

    def __init__(self, f='', s=0, o=0, k=0):
        self.f = f  # foglaltság 'x' vagy 'o'
        self.s = s  # sor
        self.o = o  # oszlop
        self.k = k  # kazegória 1-5 között

    def tipus(self):
        """szék típusa"""
        return ['szabad', 'foglalt'][self.f == 'x']

    def foglalt(self):
        """a szék foglalt-e"""
        if self.f == 'x':
            return True
        else:
            return False

    def egyedulallo(self):
        """egy székről eldönti, hogy egyedülálló, azaz üres és a szomszédja(i) foglalt(ak)"""
        sz1, sz2 = None, None
        terem = Nezoter()
        if self.o == 1:
            sz1 = terem.szek_keres(self.s, self.o + 1)
        if self.o == 20:
            sz2 = terem.szek_keres(self.s, self.o - 1)
        if self.o > 1:
            sz1 = terem.szek_keres(self.s, self.o - 1)
        if self.o < 20:
            sz2 = terem.szek_keres(self.s, self.o + 1)

        if not self.foglalt() and sz1.foglalt() and sz2.foglalt():
            return True
        else:
            return False


class Nezoter:
    """Nézőtér osztály"""

    def __init__(self):
        self.nezoter = []  # Szekek osztály objektumai
        foglaltsag = []
        kategoria = []
        f = open("foglaltsag.txt")
        g = open("kategoria.txt")
        for sor in f:
            sor = sor.strip()
            foglaltsag.append([sor[i] for i in range(len(sor))])
        for sor in g:
            sor = sor.strip()
            kategoria.append([int(sor[i]) for i in range(len(sor))])
        f.close()
        g.close()
        for i in range(len(foglaltsag)):
            for j in range(len(foglaltsag[0])):
                szek = Szek(foglaltsag[i][j], i + 1, j + 1, kategoria[i][j])
                self.nezoter.append(szek)
        self.meret = len(self.nezoter)  # nézőtér befogadóképessge

    def __str__(self):
        """nézőtér megjelenítése kategóriákkal, foglalt helyekkel"""
        sz = ''
        for szek in self.nezoter:
            if szek.foglalt():
                sz += szek.f
            else:
                sz += str(szek.k)
            if szek.o % 20 == 0:
                sz += '\n'
        return sz

    def szek_keres(self, sor, oszlop):
        """adott sorban, oszlopban lévő szék objektum"""
        sz = None
        for szek in self.nezoter:
            if szek.s == sor and szek.o == oszlop:
                sz = szek
        return sz

    def foglalt_szekek_szama(self):
        """foglalt székek száma"""
        return sum(1 for szek in self.nezoter if szek.f == 'x')

    def stat(self):
        """egyes kategóriákból eladott jegyek száma"""
        stat = {}
        for szek in self.nezoter:
            if szek.foglalt():
                stat[szek.k] = stat.get(szek.k, 0) + 1
        return stat

    def legtobb_eladott(self):
        """a legtöbb eladott jegy kategóriája"""
        statisztika = self.stat()
        legtobb = max(statisztika.values())
        for kat, darab in statisztika.items():
            if darab == legtobb:
                return kat

    def bevetel(self):
        """az eladott jegyek árának összege"""
        o = 0
        for szek in self.nezoter:
            if szek.foglalt():
                o += Jegy(szek.k).ar
        return o

    def egyedulallok_db(self):
        return sum([1 for szek in self.nezoter if szek.egyedulallo()])


class Jegy:
    """jegyek osztálya"""
    arak = [5000, 4000, 3000, 2000, 1500]

    def __init__(self, k):
        self.kat = k
        self.ar = self.arak[k - 1]


nezoter = Nezoter()

# 2. feladat
egysor, egyszek = int(input("2. feladat:\nAdjon meg egy sor számát: ")), int(input("Adjon meg egy szék számát: "))
print("A szék ", nezoter.szek_keres(egysor, egyszek).tipus(), ".", sep='')

# 3. feladat
print("3. feladat\nAz előadásra eddig {} jegyet adtak el, ez nézőtér {:.0f} %-a."
      .format(nezoter.foglalt_szekek_szama(), nezoter.foglalt_szekek_szama() * 100 / nezoter.meret))

# 4. feladat
print("4. feladat\nA legtöbb jegyet a(z) ", nezoter.legtobb_eladott(), ". árkategóriában értékesíttették.", sep='')

# 5. feladat
print("5. feladat\nA színház bevétele:", nezoter.bevetel(), "Ft.")

# 6. feladat

print("6. feladat\nEgyedülálló székek száma:", nezoter.egyedulallok_db())

# 7. feladat
ki = open("szabad.txt", "w")
print(nezoter, file=ki)
ki.close()
