[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