Hallo zusammen,
ein guter Vorschlag von eukalyptus!
Ich bin mittlerweile dabei, meinen Logik-basierten Solver mit backtracking "auszubauen", d.h. erst schnellstmöglich (per Strategie) viele Felder vollmachen, und erst wenn nichts mehr geht....bruteforce...
Allerdings funktioniert das nur bis zu einem gewissen Grad. Wenn sehr "schwierige" Sudokus gelöst werden müssen, dann bricht das Script irgendwann ohne Fehlermeldung ab. Scheint an der Rekursionstiefe zu hängen. Lt. Taskmanager ist aber noch reichlich Speicher vorhanden.
Während das Script im backtracking läuft, gebe ich die Zwischenergebnisse auf die Konsole aus. Gleichzeitig wird jeder Sprung in eine neue Rekursion mit einer 1-sekündigen messagebox angezeigt.Irgendwann mitten im Ablauf gibt es keine Messageboxen mehr, sondern nur noch Konsolenausgaben. Die letzte angezeigte msgbox ist riesengroß und hat Grafikfehler. Einige Sekunden später beendet sich das Script ohne Fehlermeldung.
Ich versuche natürlich, möglichst "sauber" aus den Rekursionen (und Funktionen) rauszukommen, d.h. keine Speicherleichen zu hinterlassen. Wahrscheinlich liegt der Hase aber in der per auskommentierten ;GUISetState(@SW_SHOW) "unsichtbaren" Grafikausgabe begraben.
Für die "sichtbare" Version des Lösungsvorgangs verwende ich eine GUI mit einer 9x9 Sudoku-Matrix, diese Matrix habe ich mit Buttons realisiert. Wenn jetzt einige Sudokus gelöst wurden, und man ein kleines Fensterchen (z.B. die msgbox) über die GUI bewegt, dann flackern die Buttons und zeigen alle bisher dort angezeigten Zahlen an , als ob 100 Buttons übereinanderliegen und jeder dieser Buttons schnell mal "ganz nach oben" wollte....irgendwie auch nicht ganz astrein
Jedenfalls mache ich weiter, es werden noch 2 Strategien eingebaut, und dann versuche ich bissl speed rauszuholen. Mit Sicherheit gibts für 30 Programmzeilen einen einzigen Befehl
ciao
Andy