Sudokulösarresurs

=====================


Vad är ett sudoku?

=================

Ett sudoku består av 9 gånger 9 rutor. I varje rad förekommer varje siffra(1 till 9)

endast en gång. Samma sak gäller kolumnerna och även för de nio mindre

rutorna inuti den stora. Jag kallar dem sektorer. Så vitt jag vet så måste varje

sudoku endast ha en lösning därför är kunskapen att konstruera ett sudoku med

lagom utmaning en vetenskap som jag inte närmare studerat.

Om du inte vet vad ett sudoku är så skulle du nog inte göra dig besvär att läsa

denna text. Därför förväntar jag mig att du ska vara lite nyfiken.


Bakgrund

=========

Att lösa ett sudoku är ganska spännande, men kan ta en del tid. Kanske är detta

en del av nöjet. Vore det inte bra om någon kunde vara fullständigt fokuserad

på uppgiften utan att göra fåniga misstag och därför behöva börja om från början?

Jag är inte så fokuserad, men vet ett stort antal metoder för att reducera antalet

möjliga lösningar för en ruta. Med hjälp av spekulation där min kunskap inte leder

till ett löst pussel, så kan ett program göra ett jobb som aldrig jag skulle ha tålamod till.

Detta program är resultatet av en lång tids analysering och många värdefulla tips.

Nuförtiden löser jag nästan aldrig sudokun, men jag har funnit stort nöje i att

utveckla detta lösningsprogram till min miniräknare. Så egentligen: Detta program

är skrivet för mitt nöjes skull och egentligen inte för att användas. Jag var bara

bestämd på att det skulle fungera så att jag kan gå vidare mot nya utmaningar.


Användning

===========

Hitta ett sudoku som du av någon anledning vill lösa och starta det här

programmet. Du kan inte köra det med delad skärm. Fyll i tomma rutor med siffran

noll och alla siffror såsom de står skriva och ignorera det faktum att det ofta är

indelat i nio sektorer. När allt ser ut att vara rätt, tryck F1 och låt räknaren jobba

några sekunder(på sin höjd) och du kommer antingen få se lösningen eller ett

meddelande som berättar vad som gick fel. Om sudokut är delvis löst så kan du

undersöka hur långt programmet klarade.


Lösningsmetod

==============

Detta program använder alla metoder jag känner till för att eliminera alla möjliga

lösningar för varje ruta. Det är många metoder inkluderade och dessutom en

nödlösning som gör att programmet chansar vid ett tillfälle för att se om det kan

finna en ruta som bara genererar en tillåten lösning(vilket ju är just så som sig bör).

Metoderna omnämns inte i denna text då det skulle bli ganska mycket skrivande.


Håll tillgodo och ha en trevlig dag!

Hälsningar

Pär Wiklund


Uppdatering 1.2:

Programmet har optimerats med avseende både på hastighet och storlek. Den

mest frekvent anropade algoritmen är snabbare, medan symmetrier i mer sällan 

anropade funktioner har utnyttjats. Därigenom är programmet betydligt mindre

och något klokare vid lösningsförfarandet därutöver..

I detta fall borde minskad storlek vara värdefullare än något långsammare svar.