Gestelltes Problem
Lange nichts mit anspruchsvollem Algorithmus programmiert. Um zu gucken ob ichs noch kann, entschied ich mich einen Sudoku-Löser für Android zu schreiben. Dieses Mal aber mit einem mehr an die menschliche Denkweise angelehnten Algorithmus.
Programm
Man sieht das Sudoku in der Anzeige und kann die Zellenwerte verändern (die Anzeige könnte man noch etwas aufhübschen, mir war das nicht so wichtig).
Dann kann man für jede Zelle eine Liste von möglichen Kandidaten generieren und anzeigen lassen. Es ist dann möglich sich Tipps geben zu lassen, dabei werden Zellen mit schon bestimmtem Inhalt gelb unterlegt. Für diese Hints werden auch Zweier- und Dreiergruppen bestimmt (wenn also in einem Block zwei Zellen mit den Kandidaten 2/7 und 2/7 vorkommen, dann kann weder 2 noch 7 als Kandidat in den anderen Zellen des Blocks vorkommen).
Schliesslich gibt es auch einen automatischen Lösemodus bei dem das Sudoku komplett gelöst wird. Das ist im Vergleich zu meinem weiter oben beschriebenen Brute-Force-Sudoku sehr schnell. Ich hatte hier bisher die Lösung stets in unter einer Sekunde Rechenzeit. Das alte Programm hat durchaus auch mal 10 Minuten (und das auf einem Desktop) gebraucht.
Es kann jetzt sein dass es ein Sudoku gibt, bei dem die Betrachtung von 3er-Gruppen nicht ausreicht, so dass man dann z.B. 4er-Gruppen ins Programm einbauen oder doch noch eine rekursive Brute-Force-Lösung (die dann aber nur noch auf das schon teilweise gelöste Sudoku angewendet würde und damit schneller wäre als komplett Brute-Force) ergänzen müsste.
Da habe ich aber aktuell garnicht so grosses Interesse weil ich die App an sechs Abenden relativ entspannt ohne grössere Irrwege oder lange Fehlersuchen (und auch ohne Konzept oder Skizzen) runterprogrammieren konnte und damit dann festgestellt habe dass ichs noch kann B-) .
Screenshot: