... kommt gerade zum Tragen bei der Implementierung von Sodoku-Lösungsstrategien. Ein Sudoku sieht aus wie eine Matrix und lässt sich auch so darstellen. Um solche eine Sudoku-Matrix - ob zwei- oder
fünfdimensional - als Einheit zu bearbeiten, braucht ich mit APL keine einzige Schleife. Das Objekt der Begierde wird einfach nur einer Reihe von APL-Operationen unterzogen, die auf jedes Element der Matrix wirken.
Das klingt sicher erstmal sehr abstrakt. Daher werde ich hier versuchen, dies an folgenden Beispiel zu illustrieren.
Ein gelöstes Sudoku enthält in jeder Zeile, in jeder Spalte und in jedem 3x3-Block jeweils alle Zahlen von 1 bis 9. So ist die Regel. Mit APL lässt es sich nun ganz einfach überprüfen, ob eine vorgegebene 9x9-Matrix SD ein gelöstes Sudoku darstellt:
^/(⍳9)^.∊SD,(⍉SD),9 9⍴3 1 4 2⍉3 3 3 3⍴SD
Wer wie ich komplizierte Einzeiler nicht mag, der kann dieser Ausdruck auch in zwei oder drei Zeilen aufspalten. Der letzte Teil des obigen Einzeilers schreibt die 9 Blöcke in die 9 Spalten der 9x9-Matrix.
Es werden sukzessive alle Spalten, alle Zeilen und alle Blöcke auf die Sudoku-Regel überprüft. Eine 1 als Ergebnis bedeutet dann, dass SD eine gültige Sudoku-Lösung ist.
Erst wollte ich nie einen eigenen Sudoku-Löser schreiben, dann habe ich doch einen implementiert. Zwar nur einige logische Methoden, aber immerhin. Dann wollte ich kein Trial-and-Error-Verfahren vorsehen, aber auch hier bin ich mir jetzt untreu geword
Aufgenommen: Jul 02, 23:30