
De basis van een Sudoku-puzzel is een raster van 9x9 gehele getallen.In Python gebruik je een lijst van lijsten om zo’n raster voor te stellen:
sudoku = [
[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]
]
Om te controleren of de Sudoku-puzzel correct is opgelost moeten, o.a. de 9 deelrasters van 3x3 gecontroleerd worden.
Schrijf twee functies:
De functie geef_deelraster(sudoku, i, j) bepaalt het 3x3 deelraster van het raster sudoku met linkerbovenhoek (i, j) en geeft dit deelraster terug. Je mag veronderstellen dat dit raster kan gemaakt worden (moet je dus niet controleren). Je kan dit mooi oplossen met list-comprehension.
De logische functie is_correct(r) controleert of alle getallen 1,2,...,9 exact één keer voorkomen in het raster. De paramter r is een lijst van lijsten, waarvan je de juiste afmetingen niet kent.
Met sudoku het 9x9-raster is dat hiervoor geïnitialiseerd werd:
>>> geef_deelraster(sudoku, 0, 0)
[[5, 3, 4], [6, 7, 2], [1, 9, 8]]
>>> is_correct(geef_deelraster(sudoku, 0, 0))
True