Als gevolg van de resultaten kunnen we beschouwen dat een computer even geschikt is als onze hersennen voor het oplossen van een sudoku. Het moet stapsgewijs gebeuren en de computer doe het sneller, immers omdat het voor deze berekening werd "gespecialiseerd" aan de hand van een programma.
Het gaat om de oplossingen voor lege vakken steeds opnieuw te checken a.h.v. meerdere functie, waarbij de centrale hart van de programma de functie only_one() is. Deze zal immers oplossingen valideren. De andere functies zijn er dan om het aantal oplossingen te beperken door eliminatie.
In totaal krijgen we de hiƫrachie:
-readfile('tekst') #lees de tekst document
-classify('lijnen') #zet de lijnen om tot een lijst van matrices met een bepaalde sleutel (=dictionary)
-solve(grids): #meesterfunctie die de sudoku's zal oplossen. Eerst worden de lege vakken "geregistreerd".
while not test = = empties: #de volgende functies werden in een loop gezet die op ieder moment checkt
#als de functies nog iets veranderen aan de oplossingen
#functie voor validatie van oplossingen
-only_one(grid,empties)
#functies voor eliminatie van oplossingen
-X_Wings(empties)
-align(empties)
-double(empties)
-check('oplossingen') #ga na of er geen fout is opgetreden in de programma (bv. twee keer '4' in een rij)
-cum_sum('oplossingen','coƶrdinaten') #berekent de totale som van de cijfers gevormd door bepaalde
#vakken
-write_new('oplossingen','bestandsnaam') #schrijft de oplossingen in een nieuw tekst document
Er werden oorspronkelijk ook andere functies gemaakt maar deze werden verwijderd doordat ze overbodig waren. Voor sudoku's met een hogere moeilijkheidsgraad zullen ze misschien wel bruikbaar kunnen worden.
zaterdag 3 maart 2012
donderdag 1 maart 2012
Tijd in functie van de sudokus
Hieronder bevindt zich een tabel met de tijd die het programma nodig heeft om bepaalde sudokus op te lossen. De moeilijkheidsgraad geeft aan hoe lang de computer ten opzichte van de langste tijd met een sudoku bezig was.
| Sudoku| | t(s) | | Moeilijkheid |
| 1 | 0,155 | 4,23% |
| 2 | 0,161 | 4,40% |
| 3 | 0,219 | 5,96% |
| 4 | 0,167 | 4,56% |
| 5 | 0,14 | 3,81% |
| 6 | 1,237 | 33,70% |
| 7 | 0,427 | 11,63% |
| 8 | 0,168 | 4,59% |
| 9 | 0,313 | 8,53% |
| 10 | 2,284 | 62,26% |
| 11 | 0,231 | 6,29% |
| 12 | 0,161 | 4,40% |
| 13 | 0,298 | 8,11% |
| 14 | 0,184 | 5,01% |
| 15 | 0,287 | 7,83% |
| 16 | 0,112 | 3,04% |
| 17 | 0,109 | 2,97% |
| 18 | 0,188 | 5,12% |
| 19 | 0,181 | 4,93% |
| 20 | 0,165 | 4,49% |
| 21 | 0,193 | 5,27% |
| 22 | 0,279 | 7,61% |
| 23 | 0,201 | 5,47% |
| 24 | 0,207 | 5,65% |
| 25 | 1,455 | 39,66% |
| 26 | 0,316 | 8,61% |
| 27 | 0,217 | 5,92% |
| 28 | 0,213 | 5,82% |
| 29 | 0,296 | 8,07% |
| 30 | 0,225 | 6,13% |
| 31 | 0,285 | 7,77% |
| 32 | 0,224 | 6,11% |
| 33 | 0,168 | 4,59% |
| 34 | 0,172 | 4,70% |
| 35 | 0,175 | 4,77% |
| 36 | 0,171 | 4,67% |
| 37 | 0,173 | 4,72% |
| 38 | 0,174 | 4,73% |
| 39 | 0,172 | 4,70% |
| 40 | 0,173 | 4,71% |
| 41 | 0,312 | 8,50% |
| 42 | 2,861 | 77,96% |
| 43 | 1,147 | 31,26% |
| 44 | 0,42 | 11,46% |
| 45 | 0,298 | 8,13% |
| 46 | 0,331 | 9,01% |
| 47 | 2,79 | 76,05% |
| 48 | 0,428 | 11,67% |
| 49 | 3,342 | 91,08% |
| 50 | 3,669 | 100,00% |
| tot | 28,27 |
Bron
Voor het vinden van sudokumethodes werd het volgende bron gebruikt:
http://ffsudoku.com/techniques.html
Het is een zeer bruikbare site voor wie aan sudoku's wil beginnen. Op deze methodes heb ik mijn verschillende functies gebaseerd en omgevormd tot een door de computer te begrijpen "taal".
http://ffsudoku.com/techniques.html
Het is een zeer bruikbare site voor wie aan sudoku's wil beginnen. Op deze methodes heb ik mijn verschillende functies gebaseerd en omgevormd tot een door de computer te begrijpen "taal".
Cumulatieve som
Met behulp van een zelfgemaakte functie cum_sum() heb ik de som van de getallen gevormd door de eerste drie cijfers van elke sudoku kunnen berekenen: deze is 24702.
#som van de cijfers gevorm door resp. vakken R1K1, R1K2 en R1K3
#van elke sudoku
>>> cum_sum(solutions,["00","01","02"])
24702
#som van de cijfers gevorm door resp. vakken R1K1, R1K2 en R1K3
#van elke sudoku
>>> cum_sum(solutions,["00","01","02"])
24702
Abonneren op:
Posts (Atom)