Um die Grenzen von VBScript
auszuloten, habe ich diese Sprache zur Problemlösung verwendet. Ich will auch
bemerken, dass das Puzzle mich sehr genervt hat, weil mir keine Lösungsstrategie
eingefallen ist, die ohne Computer auskommt. Diese Seite sollte niemanden
verleiten sich derartige Puzzles zuzulegen. Aber falls jemand den Fehler
begangen hat, sollte ihm das folgende Skript helfen können den Ausgangszustand
wiederherzustellen oder weitere ungeahnte Lösungsvarianten zu realisieren. Es
läuft auf jedem Windows-Rechner mit XP oder neuer, muss aber selbstverständlich
entsprechend des konkreten Puzzles vorkonfiguriert werden - iKanten = Anzahl
der maximal möglichen Würfel an jeder Kante der quadratischen Grundfläche und alle Puzzleteile
sind analog zum Beispiel-Skript für den Algorithmus zu kodieren. Die
Ergebnisausgabe erfolgt in eine Datei, in der einzelne Lösungen mindestens 4-mal auftreten
werden. Mir ist klar, dass schon deshalb der realisierte Algorithmus nicht optimal
ist. Mein Ziel bestand darin ohne viel Kopfzerbrechen alle möglichen Lösungen zu
finden, was wahrscheinlich auch erreichbar ist, wenn das erste eingesetzte Teil nicht
zusätzlich gedreht eingesetzt wird. Die Interpretation der Ergebnisquadrate überlasse ich Ihnen - ein wenig
rätseln sollte bleiben ;-)
Das Skript könnte selbstverständlich auch dazu missbraucht werden andere - noch
schwerer lösbare - Puzzle zu analysieren. Ich meine aber, dass einfachere aus
menschlicher Sicht vorzuziehen sind.
WARNUNG: Die Anwendung des Skripts erfolgt auf eigene Gefahr! Versuchen Sie das Skript
zu verstehen, bevor Sie es konfigurieren und ausführen. Die Laufzeit des
Skripts ist etwa 20 mal länger, wenn Zwei Puzzleteile mehr zum Einsatz
kommen - 8 Teile etwa 3 s bis 60 min; 10 Teile etwa 1 min - 20 h; 12 etwa 20 min - 20 Tage; ... .
Ein weiteres Problem stellen fehlende Würfel dar, da das zu einem starken
Anstieg der Laufzeit und der möglichen Lösungen führt, wodurch die Lösungsdatei leicht an Hard-
und Softwaregrenzen stoßen kann. Bei dem pathologischen Fall eines 12-teiligen Puzzle, das keine Würfel
an den 12 Schienen aufweist, ergeben sich (2 hoch 12)*12! (! steht für Fakultät)
Lösungsfelder, die in eine Datei zu speichern wären. Vermutlich gibt es zurzeit
kein Dateisystem, das diese Datei aufnehmen könnte.
Schließlich tragen gleiche Puzzleteile und 'drehsymmetrische' Puzzleteile ebenfalls zu großen
Lösungsdateien und langen Laufzeiten bei.
Jedes Puzzleteil wird als zweidimensionales Feld der Länge 2 und der Tiefe iKanten + 1 dargestellt. Zu jedem der 2*(iKanten-1) Schritte der Puzzlevervollständigung gibt es ein Ergebnisfeld. Analog gibt es zu jedem Schritt ein dreidimensionales Feld der noch verbliebenen Teile. Dadurch ist eine Speicher sparende rekursive Lösung möglich. Die Parameter der Subroutinen haben in der Regel keinerlei Bedeutung, da hauptsächlich mit globalen Variablen gearbeitet wird. Sie waren aber beim Programmieren hilfreich und wurden deshalb belassen.