def osszehasonlit(egyik, masik):
    egyezes = True
    for i in range(10):
        for j in range(10):
            if egyik[i][j] != '11' and masik[i][j] != '11':
                if egyik[i][j] != masik[i][j]:
                    egyezes = False
                    break
    return egyezes


def hajokszama(meg):

    return sum([1 for i in range(10) for j in range(10) if meg[i][j] == '11'])


def hajokszama_rendben(meg):
    if hajokszama(meg) == 12:
        return True
    else:
        return False


def szomszed(meg, sor, oszlop):
    db = 0
    ts, to = [sor - 1, sor, sor + 1], [oszlop - 1, oszlop, oszlop + 1]
    for s in ts:
        for o in to:
            if 1 <= s <= 10 and 1 <= o <= 10:
                if meg[s - 1][o - 1] != '0' and meg[s - 1][o - 1] != meg[sor - 1][oszlop - 1]:
                    db += 1
    return db


def szomszed_hiba(meg):
    hiba = False

    for i in range(10):
        for j in range(10):
            if meg[i][j] != '0':
                if szomszed(meg, i + 1, j + 1) > 0:

                    hiba = True
                    break
    return hiba


def hajoszam(meg, sorindex, oszlopindex):
    db = 0
    db += meg[sorindex].count('11')
    for i in range(10):
        if meg[i][oszlopindex] == '11':
            db += 1
    return db


def hajoszam_rendben(meg):
    rendben = True
    for i in range(10):
        for j in range(10):
            if int('0') < int(meg[i][j]) < int('11') and int(meg[i][j]) != hajoszam(meg, i, j):
                rendben = False
                break
    return rendben


# 1. feladat
print("1. feladat\nAdd meg a torony adatait:")
sor = int(input("sor: "))
oszlop = int(input("oszlop: "))
hajok = int(input("hajók száma: "))
if hajok > 3:
    print("Nehéz torony.")

# 2. feladat
print("2. feladat\nTiltott helyek:")
ts, to = [sor - 1, sor, sor + 1], [oszlop - 1, oszlop, oszlop + 1]
for s in ts:
    for o in to:
        if 1 <= s <= 10 and 1 <= o <= 10:
            if (str(s) + ',' + str(o)) != (str(sor) + ',' + str(oszlop)):
                print(str(s) + ',' + str(o))

# 3. feladat
be = open("feladvany.txt")
fel = [x.split() for x in be.readlines()]
be.close()
megoldas = {}
be = open("megoldas.txt")
db = int(be.readline())
i = 1
m = []
for sor in be.readlines():
    m.append(sor.split())
    if i % 11 == 0:
        megoldas[m[0][0]] = m[1:]
        m = []
    i += 1
be.close()

heti, nheti = [], []
for kulcs in megoldas:
    if not osszehasonlit(megoldas[kulcs], fel):
        nheti.append(kulcs)

print("3. feladat")
print(['Mindegyik megoldás erre a heti feladványra érkezett.',
       'Akik nem erre a hetire küldték: ' + ' '.join(nheti)][len(nheti) != 0])

# 4. feladat
hibas = 0
for kulcs in megoldas:
    if kulcs not in nheti:
        if hajokszama(megoldas[kulcs]) != 12:
            hibas += 1
print("4. feladat\n12-nél több vagy kevesebb hajót tartalmazók száma:", hibas)

# 5. feladat
szab = 0
for kulcs in megoldas:
    if kulcs not in nheti and hajokszama(megoldas[kulcs]) == 12 and szomszed_hiba(megoldas[kulcs]):
        szab += 1

print("5. feladat\nSzabálytalan megoldások száma:", szab)

# 6. feladat
print("Helyes megoldás:")
for kulcs in megoldas:
    if hajokszama_rendben(megoldas[kulcs]) and hajoszam_rendben(megoldas[kulcs]) \
            and kulcs not in nheti:
        print(kulcs)


# + feladat
print("Akik valamiért hibáztak")
print("Nem eheti megoldás:")
for kulcs in megoldas:
    if kulcs in nheti:
        print(kulcs)

print("Hajók száma nem 12:")
for kulcs in megoldas:
    if not hajokszama_rendben(megoldas[kulcs]):
        print(kulcs, '-', hajokszama(megoldas[kulcs]))

print("A hajók elhelyezése szomszéd-szabály miatt rossz (eheti megoldások közül):")
for kulcs in megoldas:
    if kulcs not in nheti and szomszed_hiba(megoldas[kulcs]):
        print(kulcs)

print("Tornyokból látható hajók száma egyenlő a torony értékével (eheti megoldások közül):")
for kulcs in megoldas:
    if kulcs not in nheti and not hajoszam_rendben(megoldas[kulcs]):
        print(kulcs)
