"""
2011. május idegennyelvű: Rejtvény
@author Klemand66
"""

print("\n1. feladat\n")

ts=int(input("Kérem a világítótorony pozícióját. Sorának száma: "))
to=int(input("Oszlopának száma: "))
hdb=int(input("Kérem a toronyból látható hajók számát: "))
if hdb>3:
    print("Nehéz torony.")
    

print("\n2. feladat\n")

print(f'A megadott {ts},{to} helyzetű torony körüli tiltott helyek:')

for s in range(1,11):
    for o in range (1,11):
        if (abs(s-ts)==1 and o in [to-1,to,to+1]) or ((s==ts and o in [to-1,to+1])):
            print(f'{s},{o}')


print("\n3. feladat\n")

"""
A könnyebb feldolgozás kedvéért a 10x10-es táblázatokat sorfolytonos listában tároljuk.
A transzformációk:
sor=index//10 +1, oszlop=index%10 +1
index=(sor-1)*10+(oszlop-1)
"""

betxt = open("feladvany.txt")

feladvany=[]
for sor in betxt:
    darsor=sor.strip().split()
    adatsor=list(map(int,darsor))
    feladvany+=adatsor
    
betxt.close()

betxt = open("megoldas.txt")

bekuldok,megoldasok=[],[]

mdb=int(betxt.readline().strip())

for i in range(mdb):
    bekuldok.append(betxt.readline().strip())
    megoldas=[]
    for j in range(10):
        darsor=betxt.readline().strip().split()
        adatsor=list(map(int,darsor))
        megoldas+=adatsor
    megoldasok.append(megoldas)
    
betxt.close()

jomegoldasok=[]
for i in range(len(bekuldok)):
    jomegoldasok.append(True)

print("Nem erre a feladványra küldtek megoldást:")
db=0
for i,megoldas in enumerate(megoldasok):
    alap=list(map(lambda elem:elem%11,megoldas)) # lenullázzuk a hajókat
    if alap!=feladvany:
        print(bekuldok[i])
        db+=1
        jomegoldasok[i]=False
            
if db>0:
    print(f'{db} beküldés nem erre a hétre érkezett.')
else:
    print("Mindegyik beküldés erre a feladványra érkezett.")


print("\n4. feladat\n")

print("Nem jó a hajók száma:")
db=0
for i,megoldas in enumerate(megoldasok):
    if not jomegoldasok[i]:
        continue # aki nem erre a hétre küldte, azt csak átugorjuk
    if megoldas.count(11)!=12:
        print(bekuldok[i])
        db+=1
        jomegoldasok[i]=False
            
if db>0:
    print(f'{db} fennmaradt beküldésben nem volt jó a hajók száma.')
else:
    print("Mindegyik fennmaradt beküldésben megfelelő számú hajó volt.")


print("\n5. feladat\n")

def tiltott(objind,moind):
    objs, objo, mos, moo  = objind//10 +1, objind%10 +1, moind//10 +1, moind%10 +1
    return (abs(mos-objs)==1 and moo in [objo-1,objo,objo+1]) or (mos==objs and moo in [objo-1,objo+1]) 

print("Nem szabályos a hajók elhelyezése:")
db=0
for i,megoldas in enumerate(megoldasok):
    if not jomegoldasok[i]:
        continue # a korábban kiesetteket csak átugorjuk
    szabalytalan=False
    objektumindexek=list(filter(lambda j:megoldas[j]>0,range(len(megoldas))))
    for obji in objektumindexek:
        for moi in range(len(megoldas)):
            if tiltott(obji,moi):
                if moi in objektumindexek:
                    db+=1
                    print(bekuldok[i])
                    jomegoldasok[i]=False
                    szabalytalan=True
            if szabalytalan:
                break
        if szabalytalan:
            break
        
if db>0:
    print(f'{db} fennmaradt beküldésben volt szabálytalan a hajók elrendezése.')
else:
    print("Mindegyik fennmaradt beküldésben szabályos a hajók elrendezése.")


print("\n6. feladat\n")

print("Nem annyi hajó látszik:")
db=0
for i,megoldas in enumerate(megoldasok):
    if not jomegoldasok[i]:
        continue 
    rossz=False
    toronyindexek=list(filter(lambda j:feladvany[j]>0,range(len(feladvany))))
    tornyok=list(filter(lambda elem:elem>0,feladvany))
    hajoindexek=list(filter(lambda j:megoldas[j]==11,range(len(megoldas))))
    # A torony látja a hajót, ha az indexeik első vagy második jegye megegyezik.   
    for j,ti in enumerate(toronyindexek):
        hdb=0
        for hi in hajoindexek:
            if ti//10==hi//10 or ti%10==hi%10:
                hdb+=1
        if hdb!=tornyok[j]:
            db+=1
            print(bekuldok[i])
            jomegoldasok[i]=False
            rossz=True
        if rossz:
                break
        
if db>0:
    print(f'{db} fennmaradt beküldésben volt rossz a hajók elrendezése.')
else:
    print("Mindegyik fennmaradt beküldésben jó a hajók elrendezése.")

print(f'\nEzen a héten {jomegoldasok.count(True)} helyes megoldás érkezett a feladványra.')
print("A helyes megoldást beküldők névsora:")

for i,bekuldo in enumerate(bekuldok):
    if jomegoldasok[i]:
        print(bekuldo)


input("\nA befejezéshez nyomd meg az ENTER billentyűt!")

