# kijk of in elke rij elk cijfer hoogstens 1 keer voorkomt
def zijn_correcte_rijen(sudoku):

 
# kijk of in elke kolom elk cijfer hoogstens 1 keer voorkomt
# helaas zijn de kolommen geen lijsten en moeten we meer werk doen
def zijn_correcte_kolommen(sudoku):


# hulpfunctie: kijk of een 3 x 3 blokje elk cijfer hoogstens één keer bevat
# bijkomende parameters: rij en kolomnummer linksboven
def is_correct_blokje(sudoku, start_rij, start_kolom):


# controleer alle blokjes
def zijn_correcte_blokjes(sudoku):
    for start_rij in range (0, 9, 3):
        for start_kolom in range (0, 9, 3):
            if not is_correct_blokje(sudoku, start_rij, start_kolom):
                return False
    return True

# Controleert of de gegeven 9 x 9 tabel van cijfers voldoet aan de Sudoku-regels
def controleer_sudoku(sudoku):
    fouten = 0
    if not zijn_correcte_rijen(sudoku):
        print("De Sudoku bevat een fout in één van zijn rijen")
        fouten += 1
    if not zijn_correcte_kolommen(sudoku):
        print("De Sudoku bevat een fout in één van zijn kolommen")
        fouten += 1
    if not zijn_correcte_blokjes(sudoku):
        print("De Sudoku bevat een fout in één van zijn blokjes")
        fouten += 1
    if fouten == 0:
        print("De Sudoku is correct")

sudoku_1 = [
    [5, 3, 4, 6, 7, 8, 9, 1, 2],
    [6, 7, 2, 1, 9, 5, 3, 4, 8],
    [1, 9, 8, 3, 4, 2, 5, 6, 7],
    [8, 5, 9, 7, 6, 1, 4, 2, 3],
    [4, 2, 6, 8, 5, 3, 7, 9, 1],
    [7, 1, 3, 9, 2, 4, 8, 5, 6],
    [9, 6, 1, 5, 3, 7, 2, 8, 4],
    [2, 8, 7, 4, 1, 9, 6, 3, 5],
    [3, 4, 5, 2, 8, 6, 1, 7, 9]
]

sudoku_2 = [
    [5, 3, 4, 6, 7, 8, 9, 1, 2],
    [6, 7, 1, 2, 9, 5, 3, 4, 8],
    [1, 9, 8, 3, 4, 2, 5, 6, 7],
    [8, 5, 9, 7, 6, 1, 4, 2, 3],
    [4, 2, 6, 8, 5, 3, 7, 9, 1],
    [7, 1, 3, 9, 2, 4, 8, 5, 6],
    [9, 6, 1, 5, 3, 7, 2, 8, 4],
    [2, 8, 7, 4, 1, 9, 6, 3, 5],
    [3, 4, 5, 2, 8, 6, 1, 7, 9]
]

sudoku_3 = [
    [5, 3, 4, 6, 7, 8, 9, 1, 2],
    [6, 7, 2, 1, 9, 5, 3, 4, 8],
    [1, 9, 8, 3, 4, 2, 5, 6, 7],
    [8, 5, 9, 7, 6, 1, 4, 2, 3],
    [4, 2, 6, 8, 5, 3, 7, 9, 1],
    [7, 1, 3, 9, 2, 4, 8, 5, 6],
    [9, 6, 1, 5, 3, 7, 2, 8, 4],
    [2, 8, 7, 4, 1, 9, 6, 3, 5],
    [3, 4, 5, 2, 8, 6, 1, 7, 8] 
]

sudoku_4 = [
    [5, 3, 4, 6, 7, 8, 9, 1, 2],
    [6, 7, 2, 1, 9, 5, 3, 8, 4],
    [1, 9, 8, 3, 4, 2, 5, 6, 7],
    [8, 5, 9, 7, 6, 1, 4, 2, 3],
    [4, 2, 6, 8, 5, 3, 7, 9, 1],
    [9, 6, 1, 5, 3, 7, 2, 4, 8],
    [7, 1, 3, 9, 2, 4, 8, 5, 6],
    [2, 8, 7, 4, 1, 9, 6, 3, 5],
    [3, 4, 5, 2, 8, 6, 1, 7, 9]
]

sudoku_5 = [
    [4, 3, 5, 2, 6, 9, 7, 8, 1],
    [6, 8, 2, 5, 7, 1, 4, 9, 3],
    [1, 9, 7, 8, 3, 4, 5, 6, 2],
    [8, 2, 6, 1, 9, 5, 3, 4, 7],
    [3, 7, 4, 6, 8, 2, 9, 1, 5],
    [9, 5, 1, 7, 4, 3, 6, 2, 8],
    [5, 1, 9, 3, 2, 6, 8, 7, 4],
    [2, 4, 8, 9, 5, 7, 1, 3, 6],
    [7, 6, 3, 4, 1, 8, 2, 5, 9]
]

controleer_sudoku(sudoku_1)   # correct
print()
controleer_sudoku(sudoku_2)   # kolommen en blokjes zijn fout
print()
controleer_sudoku(sudoku_3)   # drie soorten fouten
print()
controleer_sudoku(sudoku_4)   # blokjes zijn fout, rijen en kolommen zijn correct
print()
controleer_sudoku(sudoku_5)   # correct
print()
