Napsat program generující zadání k oblíbenému hlavolamu SUDOKU.
Program se pouze spustí, po vygenerování SUDOKU vypíše na obrazovku výsledek a ukončí se stisknutím klávesy.
Zadání hlavolamu program uloží do souboru supoku_zadani.ss. V tomto formátu ho lze načíst v programu Simple Sudoku (ttp://angusj.com/sudoku/), ve kterém je lze snadno řešit.
Řešení hlavolamu je uloženo do souboru supoku_reseni.ss.
Bylo potřeba zajistit dvě věci:
Tedy to aby šlo vyřešit. Zvolil jsem postup, kdy vždy najdu jednu celou devítku číslic, kterou umístím. Díky tomu se nestane, že by SUDOKU nešlo vyřešit a bylo chybné.
Řešení musí být jen jedno. Toho jsem docílil tak, že generuji všechny možné kombinace umístění celé sady jednoho čísla a kontroluji, zda je tato kombinace dána ze zadání jednoznačně.
Program má pevně stanovený počet a rozmístění políček v zadání (tzv. modrá pole). Dále si uchovává infromace o již vygenerovaných číslech a o zablokovaných polích.
V devíti cyklech se vygeneruje vždy po jedné sadě čísel, která se uloží. Generování probíhá tak, že se vygenerují rekurzivně všechny možnosti kombinací sad, jaké v poli mohou být (bere se v úvahu vlastnosti sudoku a již obsazená pole z již vygenerovaných sad).
Z těch se vyberou ty, které splňují podmínky (nastavené napevno, kolik čísel ze sady bude v zadání) a následně se zkontroluje, jestli je sada svými modrými čísly určená jednoznačně. Pokud ano, uloží se do pole. Z něj je pak na konci generování náhodně jedna sada vybrána.
Program generuje pouze lehká sudoku. Pro těžší sudoku, by bylo potřeba doplnit další metody řešení sudoku, které jsou použity na každou sada, při zjišťování zda je sada jednoznačná. Zároveň by bylo potřeba dát na výběr různé možnosti počtu polí a jejich rozmístění v zadání. To lze i teď, ale vzhledem k jednoduchému řešiteli by při menším počtu polí trvalo řešení příliš dlouho.
V programu jsou zadané podmínky, pro počet modrých čísel v každé sadě. To je tak trochu problém, jakým způsobem je nastavit. Na začátku být musí, aby první sadu bylo možné vůbec určit. Jestli jich použít víc na začátku nebo na konci, na to jsem nepřišel. Pro jiný počet modrých polí v zadání by se ale musely podmínky upravit. Zřejmě by jimi šlo i trochu ovlivnit složitost.