Sudoku puzzels: hoe los je ze op en hoe maak je ze? Prof. dr. Hans Zantema Informatica Technische Universiteit Eindhoven / Radboud Universiteit Nijmegen 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Wat gaan we doen? De spelregels van sudoku Hoe los je ze op? Hoe kan de computer dat voor je doen? Hoe maakt de computer nieuwe sudoku’s? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
De spelregels van sudoku 9x9 vierkant In sommige hokjes staat een cijfer van 1 tot en met 9 De andere hokjes zijn nog leeg Er zijn 27 blokken: de 9 rijen de 9 kolommen de 9 aangegeven 3x3 vierkanten Het 9x9 vierkant moet zo worden ingevuld dat elk cijfer in elk blok precies één keer voorkomt Er is precies één oplossing 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Hoe los je ze op? Waar mag in het middelste vierkante blok een 7? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Dit noemen we een blokzet: Kies een blok, en een cijfer dat nog niet in dat blok voorkomt Beredeneer voor elk van de lege hokjes in dat blok op één na dat dat cijfer daar niet gezet mag worden Zet dat cijfer op het resterende lege hokje Dit geldt voor alle soorten blokken: ook rijen en kolommen De meeste sudoku’s in kranten en boekjes kunnen met alleen maar blokzetten worden opgelost 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Ons voorbeeld echter niet, na het doen van alle blokzetten blijven we steken in deze situatie Hoe nu verder? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Kijk naar het gele hokje Het enige cijfer dat hier mag is een 8, dus schrijf die 8 maar op Dit noemen we een positiezet: vul in een hokje het enige toegestane cijfer in Dit voorbeeld kan geheel worden opgelost met alleen blokzetten en positiezetten 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Mens of computer? Deze blok- en positiezetten vormen de basis voor hoe je als mens een sudoku oplost Een computer is een dom ding dat precies doet wat je hem opdraagt Draag hem met een programma op alle blok- en/of positiezetten te doen Wat kun je doen als er geen blok- of positiezetten meer mogelijk zijn? Ingewikkelder zetten verzinnen (doen we hier niet) Backtracking 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Backtracking Als je geen zet meer kunt doen, kies dan een leeg hokje waarin maar twee verschillende cijfers zijn toegestaan Vul een van beide cijfers met potlood in, en probeer de sudoku verder op te lossen, met potlood Als dat lukt, heb je de oplossing gevonden Als je vast komt te zitten (bijv: in dat blok moet nog een 3, maar nergens mag een 3) gum je alle potlood cijfers uit, en vul je in het gekozen hokje het andere cijfer in 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Backtracking Wat moet je doen als je niet vast komt te zitten, maar ook niet verder kunt met blok-en positiezetten? Kies weer een positie met twee mogelijkheden en herhaal het proces met een andere kleur potlood Als je vast komt te zitten, gum je de laatste kleur potlood weg Als je genoeg kleuren potlood hebt, en genoeg geduld, kun je elke sudoku zo oplossen 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Backtracking met de computer Voor een mens is dit een heel gedoe, met al die potloden in verschillende kleuren Voor een computer is het betrekkelijk eenvoudig: wie kan programmeren kan dit zo een computer laten doen Verrassing: op deze manier kun je elke sudoku (met precies één oplossing) oplossen, meestal in een fractie van een seconde Kleine uitbreiding: voor sudoku’s zonder die eis kun je tellen hoeveel oplossingen die heeft 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Hoe maak je nieuwe sudoku’s? We willen sudoku’s met een gekozen patroon, zoals in ons voorbeeld Begin met een volle sudoku, bijvoorbeeld een helemaal opgeloste sudoku Haal alle cijfers weg die niet in het patroon zitten Laat hier je backtrackprogramma op los, en tel hoeveel oplossingen die heeft Dat is er minstens één: de volle sudoku waarmee we begonnen Als je geluk hebt is dat de enige oplossing, en heb je je nieuwe sudoku Maar wat als je geen geluk hebt? 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Heuvelklimmen 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Heuvelklimmen Hoe beklim je een heuvel met een blinddoek om? Doe een stap in een willekeurige richting Als je voelt dat je omhoog gaat, blijf je staan, anders doe je de stap weer terug Herhaal dit tot je niet meer hoger kunt Dit zelfde idee werkt ook voor het maken van sudoku’s met een gegeven patroon: Een stap is het veranderen van een willekeurig cijfer Voelen dat je omhoog gaat is tellen hoeveel oplossingen er zijn, en vaststellen dat het er minder zijn, maar wel minstens één 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Heuvelklimmen voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Heuvelklimmen voorbeeld Deze heeft 16 oplossingen Vervang de 9 door 1: 5 oplossingen 2: geen oplossing 3: 3 oplossingen 4 of hoger: geen, of meer dan 3 oplossingen Beste: vervang door 3 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Heuvelklimmen voorbeeld Kies weer een nummer Vervang de 4 door 1: 8 oplossingen 2: 1 oplossing Klaar: we hebben een nieuwe sudoku met precies een oplossing 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Heuvelklimmen voorbeeld 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
Meer zo gemaakte voorbeelden: 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen Opmerkingen Zoeken van patronen / oplossingen in grote zoekruimtes is een belangrijk gebied in de informatica Backtracken en heuvelklimmen zijn standaard technieken hierin, en blijken ook bruikbaar om sudoku’s op te lossen en te genereren Uitgebreid beschreven in De achterkant van SUDOKU Google en TomTom hadden niet kunnen bestaan zonder dit soort zoektechnieken Als je het interessant vindt hoe dit soort dingen werken, is informatica studeren echt iets voor jou 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen
4VWO dag Radboud Universiteit Nijmegen En nu: zelf aan de slag! 13 februari 2009 4VWO dag Radboud Universiteit Nijmegen