Trotz
dieser prinzipiellen Ablehnung einen Sudoku-Löser zu implementieren, hatte ich bereits im Herbst letzten Jahres rein zu Demonstrationszwecken den trivialsten Algorithmus als "erste Hilfe" mit APL2 realisiert:
Untersuche alle möglichen Lösungen für jede Zelle. Soweit nur eine Lösung übrig bleibt, schreibe diese ins Feld.
Jede Zelle eines Sudokus ist hier ein Element in einer 9x9 Matrix. Die zugehörige Lösungsmatrix enthält dann in jedem der 9x9 Elemente einen Vektor mit allen möglichen Lösungen. Der erste, offensichtliche Algorithmus löscht aus jeder Zelle die Lösungen, die bereits in den Zellen der jeweils zugehörigen Zeile, Spalte und des zugehörigen Blocks als endgültige Lösung eingetragen wurden.
Das war einfach und mal eben in 5 Minuten nieder zuschreiben. Missbraucht habe ich dies für eine Demonstration, wie APL2 und Excel vorwärts und rückwärts miteinander kommunizieren können:
Hinter dem Knopf "erste Hilfe" liegt ein VB-Sub, die in einen APL2-Interpreter startet unddort eine APL2-Funktion ausführt, die wiederum das Sudoku-Grid ausliest, eine Lösungsmatrix erstellt, diese wie beschreiben reduziert und letztendlich nachschaut, welche Matrixelemente nur einen Lösungsvorschlag enthalten. Diese Felder werden dann vom APL2 aus im Excel-Grid rot markiert.