"""
2021. október: Sudoku 
@author Klemand66
"""

print("\n1. feladat\n")

fn=input("Adja meg a bemeneti fájl nevét (konnyu.txt, kozepes.txt vagy nehez.txt): ").strip()
akts=int(input("Adja meg egy sor számát (1 <= sor <= 9): ").strip())
akto=int(input("Adja meg egy oszlop számát (1 <= oszlop <= 9): ").strip())



print("\n2. feladat\n")

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

betxt = open(fn)

tabla, lepesek = [], []
for i in range(9):
    sor=betxt.readline()
    darsor=sor.strip().split()
    adatsor=list(map(int ,darsor))
    tabla+=(adatsor)
    
for sor in betxt:
    darsor=sor.strip().split()
    adatsor=list(map(int ,darsor))
    lepesek.append(adatsor)
      
betxt.close()
print("A beolvasás és a szövegfájl lezárása sikeresen befejeződött.")



print("\n3. feladat\n")

szam=tabla[(akts-1)*9 +(akto-1)]
if szam>0:
    print(f'Az adott helyen szereplő szám: {szam}')
else:
    print("Az adott helyet még nem töltötték ki.")
rt=((akts-1)//3)*3 + (akto-1)//3 +1
print(f'Az adott hely a(z) {rt}. résztáblázathoz tartozik.')          



print("\n4. feladat\n")

uresdb=tabla.count(0)
print(f'Az üres helyek aránya: {100*uresdb/len(tabla):.1f}%.')



print("\n5. feladat")

for lepes in lepesek:
    si,oi,n = lepes[1], lepes[2], lepes[0]
    print(f'\nA kiválasztott sor: {si}, oszlop: {oi}, a szám: {n}.')
    megteheto=True
    akti=(si-1)*9 +(oi-1)
    if tabla[akti]>0:
        print("A helyet már kitöltötték.")
        continue
    aktsor=list(map(lambda i: tabla[i],range((si-1)*9,si*9)))
    if n in aktsor:
        print("Az adott sorban már szerepel a szám.")
        megteheto=False
    aktoszlop=list(map(lambda i: tabla[i],range(oi-1,oi-1+72,9)))
    if n in aktoszlop:
        print("Az adott oszlopban már szerepel a szám.")
        megteheto=False
    ki=((si-1)//3)*27 + ((oi-1)//3)*3
    aktrtabla=list(map(lambda i: tabla[i],[ki,ki+1,ki+2,ki+9,ki+10,ki+11,ki+18,ki+19,ki+20]))
    if n in aktrtabla:
        print("Az adott résztáblázatban már szerepel a szám.")
        megteheto=False
    if megteheto:
        print("A lépés megtehető.")


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