Heel voorzichtig ben ik mijn eerste stapjes op Prolog gebied aan het maken. Ik gebruik swi-prolog onder Ubuntu (eerst uit de repository, later uit de ppa van SWI), met het voorbeeldprogramma in Prolog dat je overal op internet kunt vinden voor het oplossen van een Sudoku puzzel.
Dit is de Sudoku die ik wil oplossen, omgezet naar Prolog:
Als ik deze Sudoku door Prolog laat oplossen, dan kan het programma niet een oplossing vinden. Maar met wat handmatig beredeneerwerk kan je afleiden dat het vakje rechtsboven een 1 of een 2 zal moeten zijn; als je deze twee varianten uitprobeert dan zie je dat je bij het invullen van de waarde "1" wel meteen de oplossing van de puzzel krijgt en dat "2" niet tot een oplossing leidt.
Mijn vraag: waarom kan prolog deze puzzel niet oplossen?
De video waarin je de puzzel ziet en waarin je de afleiding ziet waarom het vakje rechtsboven een 1 of een 2 zal moeten zijn: YouTube: Another Sudoku Breakthrough: Man Vs Machine (vanaf 15:28)
On-line op het on-line Sudoku voorbeeld van SWI Prolog met een iets ander demo-programma werkt deze puzzel ook niet. Voor de volledigheid ook de details van mijn lokale installatie:
( https://sudokuspoiler.azurewebsites.net/ vindt precies 1 oplossing voor deze puzzel. )
Dit is de Sudoku die ik wil oplossen, omgezet naar Prolog:
Prolog:
1
2
3
4
5
6
7
8
9
| problem(3, [[6,_,_,5,_,4,3,_,_], [_,_,9,_,_,_,_,_,_], [1,_,_,_,_,_,_,_,5], [8,_,_,_,5,3,_,_,6], [_,6,5,_,_,7,_,_,_], [4,_,_,9,_,_,_,_,7], [_,1,_,_,4,_,_,9,_], [_,_,2,_,8,_,_,_,_], [_,_,_,3,_,5,2,_,4]]). |
Als ik deze Sudoku door Prolog laat oplossen, dan kan het programma niet een oplossing vinden. Maar met wat handmatig beredeneerwerk kan je afleiden dat het vakje rechtsboven een 1 of een 2 zal moeten zijn; als je deze twee varianten uitprobeert dan zie je dat je bij het invullen van de waarde "1" wel meteen de oplossing van de puzzel krijgt en dat "2" niet tot een oplossing leidt.
Mijn vraag: waarom kan prolog deze puzzel niet oplossen?
De video waarin je de puzzel ziet en waarin je de afleiding ziet waarom het vakje rechtsboven een 1 of een 2 zal moeten zijn: YouTube: Another Sudoku Breakthrough: Man Vs Machine (vanaf 15:28)
On-line op het on-line Sudoku voorbeeld van SWI Prolog met een iets ander demo-programma werkt deze puzzel ook niet. Voor de volledigheid ook de details van mijn lokale installatie:
Prolog:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| % Prolog versie: SWI-Prolog (threaded, 64 bits, version 8.2.4) /* Aanroep: problem(3, Rows), sudoku(Rows), maplist(portray_clause, Rows). */ sudoku(Rows) :- length(Rows, 9), maplist(same_length(Rows), Rows), append(Rows, Vs), Vs ins 1..9, maplist(all_distinct, Rows), transpose(Rows, Columns), maplist(all_distinct, Columns), Rows = [As,Bs,Cs,Ds,Es,Fs,Gs,Hs,Is], blocks(As, Bs, Cs), blocks(Ds, Es, Fs), blocks(Gs, Hs, Is). blocks([], [], []). blocks([N1,N2,N3|Ns1], [N4,N5,N6|Ns2], [N7,N8,N9|Ns3]) :- all_distinct([N1,N2,N3,N4,N5,N6,N7,N8,N9]), blocks(Ns1, Ns2, Ns3). |
( https://sudokuspoiler.azurewebsites.net/ vindt precies 1 oplossing voor deze puzzel. )
„Ik kan ook ICT, want heel moeilijk is dit niet”