Noch einige Worte zu meinem
Trial-and-Error-Funktion ...
Mit wenigen Änderungen finde ich alle möglichen Lösungen zu einem Sudoku. Anstatt bei der ersten gefundenen Lösung (siehe 3.2) aufzuhören, kann man auch alle Kandidaten bis zum bitteren Ende durchlaufen und die jeweiligen Lösungen sammeln. Je nachdem wie das Problem gestellt ist, können das sehr viele werden, so viele, dass einem der Workspace um die Ohren fliegt. Was da passieren kann, habe ich noch nicht ausprobiert, ich tippe mal irgendwo in den Tiefen der Rekursion auf einen WS Full.
Lösungen sammeln war aber nie der Anlass für den Trial-and-Error. Es war die Idee, damit einen billigen Sudoku-Generator zu bekommen. Und das funktioniert prächtig:
RESULT TRIAL 9 9⍴81↑1
liefert eine nette, aber strukturell recht triviale Sudoku-Lösung. Eine Menge nicht-trivialer Lösungen bekomme ich mit
RESULT TRIAL 9 9↑3 3⍴9?9
Nun könnte ich eine binäre Maske über ein so generiertes Sudoku legen und erhalte ein beliebig schwer zu lösendes Rätsel. Wie schwer so ein Sudoku tatsächlich ist, kann ich ja mit den
logischen Methoden testen.
Apropos testen: mit TRIAL kann ich sofort feststellen, ob ein beliebiges - selbst gestricktes oder gefundenes - Sudoku überhaupt lösbar ist:
CHECK RESULT TRIAL sudoku
Dies war der zweite Anlass für TRIAL.
Hat sich doch gelohnt. TRIAL verspricht mir eine fast unendlich große Spielwiese.