Gleich vorweg, kodelaStradoku ist in Java geschrieben, mit dem ich bisher gute Erfahrungen gemacht habe. Der Code umfasst ohne die Hilfe mittlerweile fast 21.000 Zeilen in 49 Dateien. Natürlich kann das "Innenleben" eines so umfangreichen Programms, wenn überhaupt, dann nur in sehr gekürzter Form beschrieben werden. Ich versuche es besser nicht, will aber auf eine Besonderheit eingehen, die meines Erachtens wesentlich dazu beiträgt, dass dieses Programm mit einer beachtlich hohen Ausführungsgeschwindigkeit aufwarten kann.
Jeder, der die Str8ts-Aufgaben von Andrew Stuart und den vielen anderen Quellen kennt weiß, dass für die Darstellung eines Str8ts zweimal 81 Zeichen verwendet werden. KodelaStradoku verwendet jedoch nur einmal 81 Zeichen. Dies ist nicht die einzige Minimierung der zu verarbeitenden Daten.
In kodelaStradoku wurde die Minimierung für zeitintensiver Prozesse gewissermaßen zum Dogma erhoben. Mit 81 Zeichen, genauer mit einem Array von 81 Integerwerten, wird jeder Zustand eines Stradoku definiert. 81 Integerwerte enhalten alle Informationen, welche für die Darstellung und Bearbeitung eines Stradoku benötigt werden, also alle Eigenschaften die eine einzelne Zelle haben kann. Dazu gehören das Aussehen, also schwarze oder weiße Zelle, freie Zelle oder Vorgabe- beziehungsweiser Sperrwert, bereits gelöst und wenn ja, mit welchem Wert, wie viele Kandidaten und welche gibt es noch, sind Notizen gesetzt und welche, ist die Zelle markiert und mit welcher Farbe. Alle diese Informationen sind über einen einzigen Integerwert abrufbar.
Wenn ich auf meiner alten Kiste eine Liste mit 2.500 Stradokus mit einem Level von 1 bis 4 archivtaglich importiere, dann dauert dies etwa 5 Sekunden. Archievtauglich bedeutet, dass jedes dieser Stradokus 15 mal verändert wird. Dies bedeutet weiterhin, dass jedes Stradoku der Liste in der ursprünglichen und allen modifizierten Formen, also zusammen 16 mal gelöst werden muss. Das ergibt für die 2.500 Stradokus 40.000 Lösungs- und Bewertungsvorgänge.
Dabei muss noch geprüft werden, ob alle der 16 Lösungen den selben Level haben, wenn nicht, wird das Stradoku nicht übernommen und statt dessen ein Eintrag mit den Details in eine Datei unberücksichtigt.txt geschrieben. Nicht übernommen werden auch Stradokus, die in der Liste öfter als einmal vertreten sind.
Das sieht allerdings etwas anders aus, wenn Sttradokus mit dem Level 5 archivtauglich importiert werden. Für einen solchen Import ist die benötigte Zeit etwa um den Faktor 100 größer. Bei diesen Stradokus wird die Lösung zwar auch über eine logische Auswertung gesucht, aber immer dann, wenn es mit der Logik nicht mehr weiter geht, wird für eine noch ungelöste Zelle ein Testwert eingesetzt und anschließend versucht, ob die Logik weiter übernehmen kann. Das funktioniert manchmal, oft aber nicht und dann wird der Testwert gegen einen anderen ausgetauscht. Sind alle möglichen Varianten ohne Erfolg getestet, geht es mit der nächsten ungelösten Zelle nach dem Motto 'Versuch - Irrtum - neuer Versuch' im sogenannten Backtracking Verfahren weiter..
Stradokus bis einschließlich dem Level 4 werden ausschließlich logisch ausgewertet.
Die kompakte Datenhaltung über die 32 Bit eines Integerwertes ermöglicht sehr kurze Zeiten für viele Entscheidungen, die durch einfache binäre Operationen getroffen werden können und wirkt sich offensichtlich enorm auf die Geschwindigkeit aus.
Noch ein Wort zum Archiv.
Es ist eine Liste von über 3.000 Zeilen mit Stradokus, denen jeweils zwei Zeichen vorangestellt sind, das erste zeigt den Level an, nach dem die Liste auch sortiert ist, das zweite den Status der Modifizierung. Nach der neunten Änderung folgen dafür auf die '9' die Zeichen ' : ; < = > ? ''. Diese Liste erlaubt derzeit das Generieren von mehr als 50.000 Stradokus.
Das Archiv kann durch manuelles Hinzufügen neuer Stradokus oder Änderung bestehender bearbeitet werden. Es sollte allerdings darauf geachtet werden, dass im Archiv nur Stradokus aufgenommen werden, die auch archivtauglich sind. Um dies zu gewährleisten muss im Arbeitsverzeichnis eine (leere) Datei mit dem Namen "archiftauglich" angelegt werden. Nur dann wird bei der Erstellung und Bearbeitung von Stradokus darauf hingewiesen, wenn ein Stradoku nicht archivtauglich ist. Durch geringfügige Änderungen, zum Beispiel Hinzufügen oder Entfernen eines Sperrwertes, kann die Archivtauglichkeit wieder hergestellt werden.
Bei der Generierung von Stradokus greift das Programm auf das Archiv zurück und wandelt ein dort gespeichertes Stradoku in eine von 16 möglichen Abwandlungen um. Dabei ist sichergestellt, dass sich eine Abhandlung erst dann wiederholt, wenn alle anderen 15 Formen schon einmal für eine Generierung verwendet wurden.
Soll ein Stradoku für das Archiv verwendet werden, muss es in allen 16 möglichen Formen mit dem selben Level zu lösen sein. Bei aktivierter Archivtauglichkeit iwird diese im Bearbeitungsmosus vor Beendigung der Bearbeitung geprüft und bei fehlender Archivtauglichkeit darauf hingewiesen.
Die Position eines Stradoku aus dem Archiv kann über die Kurztaste Strg+F12 abgefragt werden. Über Strg+F10 kann das Archiv auf doppelte Einträge überprüft werdem. Dabei werden für jeden Eintrag alle möglichen Varianten in die Überprüfung einbezogen. Die Überprüfung wird nur in der Statuszeile angezeigt, das Ergebnis in der Datei ArchivCheck.txt.
Das Archiv kann bearbeitet werden. Dafür eignet sich der 7-Zip File Manager sehr gut, am besten mit dem Notepad++ als Standard-Editor. Damit kann arche.txt in arche.zip bearbeitet und nach einer Änderung gespeichert werden. Notepad++ zeigt auch die Zeilennummern an. Damit lässt sich jeder Eintrag schnell finden.
Wichtig ist, dass die Sortierung nach dem Level nicht gestört wird. Es muss also jedem Stradoku die Ziffer 1-5 für den Level, gefolgt von einer 0 für den Status vorangestellt und im jeweiligen Level-Bereich eingeordnet werden. Innerhalb eines Levelbereiches kann die Platzierung beliebig erfolgen.