#------ 2. feladat ---------------------------------------------------------------------
def tiltott_mezok(s,o,kapcsolo):
    tiltottak=[]                        # (5. feladathoz)
    for i in range(s-1,s+2):            # s-1 és s+1 és
        for j in range(o-1,o+2):        # o-1 és o+1 között vizsgálódunk
            if (11>i>0 and 11>j>0):     # de csak akkor ha még a táblán vagyunk
                if i==s and j==o:       # a hajó pozíciója tuti tiltott
                    continue
                else:
                    if kapcsolo:
                        print(f'{i}, {j}')
                    tiltottak.append((i-1,j-1))     # szabalytalan_elhelyezes
                                                    # függvény használja majd
                                                    # (5. feladat)
    return tiltottak    # 5. feladat miatt visszaadjuk a tiltott mezők listáját...
#------ 3. feladat ---------------------------------------------------------------------
def e_heti(matrix):
    global hajok                # (4. feladathoz)
    ok=0                        # tornyok ugyanott vannak a megoldásban?
    tornyok=0                   # de mennyi van? több is van?... a megoldásban
    hajok=0                     # hány hajó van a megoldásban?
    for i in range(10):
        for j in range(10):
            if matrix[i][j] in range(1,10):         # torony van a megoldásban
                tornyok+=1
                if feladvany[i][j]==matrix[i][j]:   # a tornyok passzolnak
                    ok+=1
            if matrix[i][j]==11:                    # hajó van...
                hajok+=1
    return True if ok==tornyok else False           # tornyok helye, száma okés
#------ 5. feladat ---------------------------------------------------------------------
def szabalytalan_elhelyezes(matrix):
    for i in range(1,11):
        for j in range(1,11):
            if matrix[i-1][j-1]==11:
                t=tiltott_mezok(i,j,False)      # itt használjuk a tiltott mezőket
                for koord in t:                 # tiltott mezők koordinátái
                    sor=koord[0]                # azaz sor és oszlopa
                    oszlop=koord[1]
                    if matrix[sor][oszlop]!=0:  # ha a tiltott mezőn van valami, az gáz!
                        return True
                        break
    return False    # nem volt gond
#------ 6. feladat ---------------------------------------------------------------------
def vizsgal(matrix):
    for i in range(10):
        for j in range(10):
            if matrix[i][j] in range(1,10):     # itt torony van a megoldásban
                hajodb=0                        # hány hajó látszik a toronyból
                for oszlop in range(10):        # abban a sorban...
                    if matrix[i][oszlop]==11:
                        hajodb+=1
                for sor in range(10):           # ...és abban az oszlopban összesen?
                    if matrix[sor][j]==11:
                        hajodb+=1
                if hajodb!=matrix[i][j]:        # hajók száma eltér a torony értékétől,
                    return False                # akkor bukta...
                    break
    return True     # minden okés volt  
                         
    
#********************************* F Ő M O D U L ***************************************    
feladvany=[]        # ebben lesz a feladvány - "sima" mátrix (10 elemű listák listája
megoldasok={}       # ebben lesznek a megoldások - szótár (kulcs a név, érték: mátrix)
print('1. feladat')
print('Világítótorony pozíciója 10x10-es területen')
s=int(input('sor: '))
o=int(input('oszlop: '))
h=int(input('toronyból látható hajók száma: '))
if h>3:
    print('Nehéz torony.')
else:
    print('------------------------------------------------------\n2. feladat')
    print('Mezők, ahova nem kerülhet hajó:')
    tiltott_mezok(s,o,True)         # True jelentése itt: kiírás is lesz!

# feladvány beolvasása egy 10x10-es mátrixba
fbe=open('feladvany.txt','r')
for sor in fbe:
    feladvany.append(list(map(int,sor.strip().split())))    # minden egész szám lesz
fbe.close()
    
# megoldások beolvasása egy szótárba, ahol:
# a kulcs a név, a szótár-bejegyzés egy 10x10-es mátrix
fbe=open('megoldas.txt','r')
N=int(fbe.readline().strip())   # forrásfájl első sora
kulcs=fbe.readline().strip()    # következő sor egy név --> ez kulcs lesz
tabla=[]                        # ebben lesz a 10x10-es mátrix,
                                # ami a szótár-bejegyzés lesz majd
for sor in fbe:
    if len(sor)<20:             # ha ilyen a sor, akkor az név, tehát kulcs!
        megoldasok[kulcs]=tabla # "régi" kulcsra az elkészült táblát elhelyezzük a szótárban
        tabla=[]                # tábla ismét üres legyen
        kulcs=sor.strip()       # az "új" kulcs beolvasása
    else:
        tabla.append(list(map(int,sor.strip().split())))    # fájl soraival, mint listákkal
                                                            # töltögetjük a táblát
megoldasok[kulcs]=tabla         # mivel a végén nem jön már kulcs, az utolsó tábláról
fbe.close()                     # is gondoskodni kell...

    
nem_oke=[]                      # nem erre a hétre vonatkozó megoldást küldtek be
oke=[]                          # ezek az e heti rejtvényt próbálták megoldani
elhelyezes_hiba=0               # rosszul helyezte el a hajókat
hibas=0                         # 12 hajót "rakott le"? 
for kulcs in megoldasok:
    if not e_heti(megoldasok[kulcs]):
        nem_oke.append(kulcs)
    elif hajok!=12:                         # (4. feladat)
        hibas+=1
    else:
        oke.append(kulcs)
  
print('------------------------------------------------------\n3. feladat')
if len(nem_oke)>0:
    print('Nem az e heti feladványra küldte be a megoldását:')
    for kulcs in nem_oke:
        print(kulcs)
else:
    print('Mindegyik megoldás erre a heti feladványra érkezett.')

print('------------------------------------------------------\n4. feladat')
print(f'A hajók száma {hibas} esetben hibás.')
   
hatodik=[]      # 6. feladathoz
for kulcs in oke:
    if szabalytalan_elhelyezes(megoldasok[kulcs]):
        elhelyezes_hiba+=1
    else:
        hatodik.append(kulcs)   # ha minden rendben vele az előző szempontok szerint,
                                # akkor mehetnek a "vizsgálatra" (lásd 6. feladat)

print('------------------------------------------------------\n5. feladat')
print(f'Szabálytalan hajóelhelyezés {elhelyezes_hiba} beküldőnél fordul elő.')

print('------------------------------------------------------\n6. feladat')
print('Helyes megoldást beküldők:')
for kulcs in hatodik:
    if vizsgal(megoldasok[kulcs]):      # jól rakta-e le a hajóit?
        print(kulcs)
    
