[Python-de] Sudoku mit Python
Mathias Uebel
mathias.uebel at meeloon.de
Fre Aug 4 14:21:15 CEST 2006
Diez B. Roggisch schrieb:
[...]
>
> Also da faellt einem schon so einiges auf:
Hallo Diez,
Also Dir fällt etwas auf.
>
>
> Die Repraesentation
>
> Es ist zwar legitim, dafuer ein dict von Koordinate nach Belegung zu
> nehmen - aber
[...]
Ja, die Entscheidung für ein Dictionary war vieleicht nicht die
Richtige. Aber ich dachte an die Koordinaten und ...
> Zweitens ist es nicht clever, die Freiheitsgrade einfach mit 0 zu
> belegen -
[...]
Nun ich wollte hier im gleichen Datentyp bleiben.
[...]
> Berechnung der Zellenkoordinaten
>
> Du berechnest die jedes mal, aber noch nicht mal "richtig".
[...]
Es funktioniert.
[...]
> def cellcols(n, width=3):
> start = (n % width) * width
> return xrange(start, start + width)
>
> def cellrows(n, width=3):
> start = (n / width) * width # achtung, integer division! Eventuell
> // verwenden
> return xrange(start, start + width)
Diese Abkürzung ist gut und werde ich übernehemen.
[...]
>
> Algorithmus
>
> Abgesehen das ValueFailt ValuesMissing heissen sollte
Geschenkt.
, ist es
> hochgerading ineffizient. Denn statt dir das einmal zu merken und immer
> nur Werte wegzunehmen, berechnest du das jedes mal neu.
Richtig. Das werde ich ändern.
>
> Und dann "kann" dein Algorithmus auch wirklich nur die einfachsten aller
> Sudokus loesen:
Naja, fast alle Sudokus aus einer Zeitung hat es berechnet (8 von 10).
Den Rest habe ich mir für jetzt aufgehoben. Eventuell bin ich etwas zufrüh.
[...]
> Dann zaehlst du die moeglichen Werte pro Element immer durch - dabei
> koenntest du im Fall von >1 sofort abbrechen!
Stimmt.
> Was du aber auf jeden Fall vermeiden solltest ist diese komische
> Abbruchbedingung als Schleife - das ist Unfug. Stattdessen merkst du
> dir, ob du wirklich was veraendert hast. Der Algorithmus laeuft dann
> solange durch, bis sich nix mehr getan hat. Und entweder ist das Ding
> dann geloest, oder eben nicht.
Ja, das stimmt auch. Das ist etwas sinnlos. Schon entfernt.
> Ich habe mal meinen sehr alten solver angehangen - er kann nur eine
> Optimierung (naked pairs), aber dank backtracking loest er jedes Sudoku.
Das schau ich mir an. Aber, wie geschrieben: Ich will üben. Und darum
bin ich einen anderen Weg gegangen.
Grusz aus der Enklave
More information about the python-de
mailing list