# Controleer of de gegeven lijst elk cijfer van 1 tot 9 hoogstens één keer bevat
# Je hoeft niet te controleren of de lijst enkel getallen bevat in het interval [1,9]
def is_correcte_lijst(lijst):
    frequentie = [0] * 10
    for cijfer in lijst:
        frequentie[cijfer] += 1
    for aantal in frequentie:
        if aantal > 1:
            return False
    return True

# kijk of in elke rij elk cijfer hoogstens 1 keer voorkomt
def zijn_correcte_rijen(sudoku):
    for rij in sudoku:
        if not is_correcte_lijst(rij):
            return False
    return True
 
# 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):
    for kolomnummer in range(9):
        kolom = []
        for rijnummer in range(9):
            kolom.append(sudoku[rijnummer][kolomnummer])
        if not is_correcte_lijst(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 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]
]

# Blokjes worden pas in de volgende oefening gecontroleerd. Hier zal je dus nog geen foutmelding over krijgen
controleer_sudoku(sudoku_1)   # correct
print()
controleer_sudoku(sudoku_2)   # kolommen en blokjes zijn fout
print()
controleer_sudoku(sudoku_3)   # rijen, kolommen en blokjes zijn fout
print()
controleer_sudoku(sudoku_4)   # blokjes zijn fout, rijen en kolommen zijn correct
print()
controleer_sudoku(sudoku_5)   # correct
print()
