Python —> Sudoku
De Sudoku puzzel is een 9×9 matrix met 81 velden die gevuld moeten worden. Op iedere rij, in iedere kolom en binnen ieder blok moeten de getallen 1 t/m 9 worden ingevuld, zonder dat een getal dubbel voorkomt. Dat zijn dus 27 voorwaarden. Door iedere cel als volgt te nummeren
kunnen de 27 voorwaarden aan de volgende getal-reeksen worden gekoppeld.
- 1, 2, .. , 9
- 10, 11, .. , 18
:
: - 73, 74, .. , 81
- 1, 10, .. , 73
- 2, 11, .. , 74
:
: - 9, 18, .. , 81
- 1, 2, 3, 10, 11, 12, 19, 20, 21
- 4, 5, 6, 13, 14, 15, 22, 23, 24
:
: - 61, 62, 63, 70, 71, 72, 29, 80, 81
Een algoritme zou alle mogelijkheden langs kunnen lopen. Dat houdt in dat in iedere cel een van de getallen 1 t/m 9 zal worden ingevuld. Dat is erg inefficiënt omdat bijvoorbeeld 2 dezelfde getallen naast elkaar sowieso al niet zijn toegestaan. Je kunt het aantal combinaties flink te verminderen door tijdens de zoektocht ervoor te zorgen dat per blok altijd 9 verschillende getallen worden ingevuld. Echter ook dan gaat het nog om enorm veel combinaties. Immers, in ieder van de 9 blokken zijn er 362.880 mogelijke combinaties (9*8*7*6*5*4*3*2). In de meeste blokken zijn al getallen aanwezig. Dat reduceert het aantal combinaties. Is er één ingevuld dan daalt het aantal met een factor 9. Zijn er twee ingevuld dan daalt het met een factor 9*8. Het aantal mogelijkheden voor de hele Sudoku is gelijk aan het product van het aantal combinaties per blok. Dat gaat om extreem veel. De vraag is hoe het algoritme geoptimaliseerd kan worden.
In het boek Softwareontwerp en programmeren met Python 3 van Ignace Van de Woestyne & Jan Vathienen wordt uitgelegd hoe een Sudoku opgelost kan worden met behulp van backtracking. Zij kiezen voor een benadering, waarbij de condities veel meer vanuit een matrix-structuur worden getest. Ik heb voor een meer generieke werkwijze gekozen, door de 81 velden als één vector te zien. De 27 voorwaarden kunnen dan worden gekoppeld aan telkens 9 elementen uit de vector. In mijn aanpak worden achtereenvolgens de lege vector-elementen gevuld. Zodra duidelijk wordt dat het niet voldoet aan één van de 27 voorwaarden, wordt direct gestopt met het verder invullen en wordt teruggegaan naar een eerdere stap.
Voorbeeld van een op te lossen Sudoku:
Hieronder staan voor een voorbeeld alle processtappen die het algoritme heeft gezet. Een -1 geeft aan dat in dat geen toegestaan getal mogelijk is en dat backtracking wordt uitgevoerd.
Op te lossen sudoku:
0 0 7 6 0 0 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
1
---------------------------
Veld
---------------------------
index 1
rij 1
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 1
rij 1
kolom 1
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
stap 1: geldig getal gevonden
1 0 7 6 0 0 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
2
---------------------------
Veld
---------------------------
index 2
rij 1
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 1
rij 1
kolom 1
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
2
---------------------------
Veld
---------------------------
index 2
rij 1
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 1
rij 1
kolom 1
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
stap 2: geldig getal gevonden
1 2 7 6 0 0 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
3
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
3
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
3
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
stap 3: geldig getal gevonden
1 2 7 6 3 0 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
4
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 8
---------------------------
Resultaat
---------------------------
stap 4: geldig getal gevonden
1 2 7 6 3 8 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
5
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
5
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
5
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
5
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
stap 5: geldig getal gevonden
1 2 7 6 3 8 4 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in dit blok
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 8
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
6
---------------------------
Veld
---------------------------
index 8
rij 1
kolom 8
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 9
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
stap 6: geen geldig getal ---> backtrack
1 2 7 6 3 8 4-1 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
7
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
7
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
7
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
7
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 8
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
7
---------------------------
Veld
---------------------------
index 7
rij 1
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 7
rij 1
kolom 7
---------------------------
Invulpoging
---------------------------
getal 9
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
stap 7: geen geldig getal ---> backtrack
1 2 7 6 3 8 -1 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
8
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 9
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
stap 8: geen geldig getal ---> backtrack
1 2 7 6 3-1 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
9
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
9
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in dit blok
---------------------------
Stap
---------------------------
9
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
9
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
9
---------------------------
Veld
---------------------------
index 5
rij 1
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 8
---------------------------
Resultaat
---------------------------
stap 9: geldig getal gevonden
1 2 7 6 8 0 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10
---------------------------
Veld
---------------------------
index 6
rij 1
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 4
rij 1
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
stap 10: geldig getal gevonden
1 2 7 6 8 3 0 0 0
0 0 3 0 4 5 0 0 2
0 0 0 0 0 0 5 9 0
0 0 0 0 0 0 0 4 0
0 4 1 0 2 0 0 0 0
3 0 0 0 0 9 0 0 0
5 0 0 7 0 4 9 0 0
0 8 0 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
:
:
:
:
:
:
:
:
:
:
:
:
:
: tussenstappen
: weggelaten
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10779
---------------------------
Veld
---------------------------
index 66
rij 8
kolom 3
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
stap 10779: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 0 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10780
---------------------------
Veld
---------------------------
index 68
rij 8
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10780
---------------------------
Veld
---------------------------
index 68
rij 8
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10780
---------------------------
Veld
---------------------------
index 68
rij 8
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10780
---------------------------
Veld
---------------------------
index 68
rij 8
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10780
---------------------------
Veld
---------------------------
index 68
rij 8
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
stap 10780: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 0 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10781
---------------------------
Veld
---------------------------
index 69
rij 8
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10781
---------------------------
Veld
---------------------------
index 69
rij 8
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10781
---------------------------
Veld
---------------------------
index 69
rij 8
kolom 6
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
stap 10781: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 0 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10782
---------------------------
Veld
---------------------------
index 70
rij 8
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10782
---------------------------
Veld
---------------------------
index 70
rij 8
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
stap 10782: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 0
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10783
---------------------------
Veld
---------------------------
index 72
rij 8
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10783
---------------------------
Veld
---------------------------
index 72
rij 8
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10783
---------------------------
Veld
---------------------------
index 72
rij 8
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10783
---------------------------
Veld
---------------------------
index 72
rij 8
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
stap 10783: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
0 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 8
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10784
---------------------------
Veld
---------------------------
index 73
rij 9
kolom 1
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 9
---------------------------
Resultaat
---------------------------
stap 10784: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 0 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10785
---------------------------
Veld
---------------------------
index 74
rij 9
kolom 2
---------------------------
Blok (veld linksboven)
---------------------------
index 55
rij 7
kolom 1
---------------------------
Invulpoging
---------------------------
getal 7
---------------------------
Resultaat
---------------------------
stap 10785: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 0 0 2 0 8 0
---------------------------
Stap
---------------------------
10786
---------------------------
Veld
---------------------------
index 76
rij 9
kolom 4
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
stap 10786: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 1 0 2 0 8 0
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
getal komt al voor in deze kolom
---------------------------
Stap
---------------------------
10787
---------------------------
Veld
---------------------------
index 77
rij 9
kolom 5
---------------------------
Blok (veld linksboven)
---------------------------
index 58
rij 7
kolom 4
---------------------------
Invulpoging
---------------------------
getal 6
---------------------------
Resultaat
---------------------------
stap 10787: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 1 6 2 0 8 0
---------------------------
Stap
---------------------------
10788
---------------------------
Veld
---------------------------
index 79
rij 9
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10788
---------------------------
Veld
---------------------------
index 79
rij 9
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10788
---------------------------
Veld
---------------------------
index 79
rij 9
kolom 7
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
stap 10788: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 1 6 2 3 8 0
---------------------------
Stap
---------------------------
10789
---------------------------
Veld
---------------------------
index 81
rij 9
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 1
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10789
---------------------------
Veld
---------------------------
index 81
rij 9
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 2
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10789
---------------------------
Veld
---------------------------
index 81
rij 9
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 3
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10789
---------------------------
Veld
---------------------------
index 81
rij 9
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 4
---------------------------
Resultaat
---------------------------
getal komt al voor in deze rij
---------------------------
Stap
---------------------------
10789
---------------------------
Veld
---------------------------
index 81
rij 9
kolom 9
---------------------------
Blok (veld linksboven)
---------------------------
index 61
rij 7
kolom 7
---------------------------
Invulpoging
---------------------------
getal 5
---------------------------
Resultaat
---------------------------
stap 10789: geldig getal gevonden
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 1 6 2 3 8 5
Sudoku is opgelost:
2 5 7 6 9 1 4 3 8
6 9 3 8 4 5 7 1 2
4 1 8 2 3 7 5 9 6
8 2 9 5 7 6 1 4 3
7 4 1 3 2 8 6 5 9
3 6 5 4 1 9 8 2 7
5 3 2 7 8 4 9 6 1
1 8 6 9 5 3 2 7 4
9 7 4 1 6 2 3 8 5
De totale rekentijd bedraagt slechts 0,32 sec. (Windows laptop met i5 1035G1 processor).
De volgende oplossing is gevonden: