Ein Untersetzer-Puzzle und ein Lösungsalgorithmus für Puzzles dieses Typs

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.

Ein Wenig zum Verständnis des Skripts:

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.

Aufruf des Skripts von der Kommandozeile:

cscript Untersetzer.vbs

Inhalt der Lösungsdatei 'Loesung_Untersetzer.txt' zum Skript-Beispiel:





Skript-Beispiel: