Thema: puzzels, de sudoku. Deel 1.

Ingediend door Dirk Hornstra op 10-oct-2023 22:07

In mijn artikel van 25 september (link) gaf ik aan dat ik bezig was met code om de werking/het oplossen van een Sudoku inzichtelijk te maken. Want hoewel volgens mij zo'n beetje iedereen zonder al te veel problemen een Sudoku moet kunnen oplossen, als je niet weet hoe het werkt kan het zijn dat je er helemaal maar niet aan begint.

Dat had ik zelf met de puzzel "boompje/tentje". Ik begon op goed geluk ergens iets in te vullen en dat is altijd een verkeerde start. Achter zo'n puzzel zit logica, zodra je begint te gokken zit je fout.

Als je naar deze URL gaat kun je inloggen met willekeurige gegevens, als je maar een e-mailadres en een stukje tekst bij het wachtwoord invult ben je ingelogd. Er zit nog geen validatie op, het belangrijkste was dat de "Sudoku-oplosser/Suduko-hoe-werkt-het" pagina online gezet is:

https://playground.prijs-bewust.nl/

Met de knop "Voorbeeld" krijg je een willekeurig voorbeeld (op dit moment 2 keuzes). Je kunt die zelf oplossen of via de knop "Hint" stap-voor-stap de blokken vullen. Of je laat via "Los Op" in 1x de hele Sudoku oplossen. Met "Reset" kun je de Sudoku weer leeg maken. En ja, je kunt ook gewoon je eigen Sudoku invullen. Dan kun je via "Hint" stap-voor-stap zien welke waarde gevuld moet worden, kun je dat invullen bij je puzzel en door naar het volgende nummer.

In de basis van de code (die ik nu dus gekoppeld heb aan deze web-pagina's) heb ik niet veel veranderd, alleen heb ik wat toegevoegd. Want toen ik een ingevulde Sudoku had, 2 velden leeg maakte en in het ene veld de verkeerde waarde invulde, werd het andere veld gevuld en leek het alsof de Sudoku opgelost was. Maar dat was een ongeldige oplossing! En zo kan ook iemand die een Sudoku een typ-fout maken, waardoor je een ongeldige Sudoku hebt. Ik heb op de Matrix een functie IsValid toegevoegd. Deze roept voor alle groepen de IsValid-functie aan. De groep controleert of er in dat blok maar 1x een bepaalde waarde staat. Als een waarde meerdere keren in een groep staat, dan is de Sudoku ongeldig. En in de Matrix heb ik dan nog een controle, bij alle groepen kijk ik naar de gevulde cellen. Als er in de horizontale rij dezelfde waarde in een ander blok of in een verticale rij dezelfde waarde in een ander blok staat, ook dan is de Sudoku ongeldig.

Ik heb de titel even "deel 1" genoemd omdat ik waarschijnlijk op een later moment (na het opschonen) de code via Github nog openbaar ga maken.