Zum Generieren von Levels könnte man andersherum vorgehen: Mauern erzeugen, dann Blockgruppen erzeugen und die dann nach "inversen Regeln" verschieben und "nach oben fallen" lassen. Muss man aber etwas Überlegung investieren, wie das genau geht (z.B. dürfen die erst erzeugten Blockgruppen sich nicht berühren falls sie gleichen Typs sind, etc.), dafür ist das Erstellen eines lösbaren Levels von der Rechenzeit her dann super-fix.
PUPU Solver mit Python
- 64erGrufti
- Thread is Unresolved
-
-
Kann es sein, dass der Solver folgendes Puzzle nicht lösen kann?
Es ist das Level 25 von Lynx siehe PUPU-Level - Sammelthread
Seine d64 im Anhang.
Hier die txt des Levels:
CodeUnd so sieht der Solver nach 2h aus (arbeitet immer noch):
-
Plötzlich hing mein Linux. Der Solver war bei über 4.5 Mio (3. Zahl).
Nach Reboot nun wieder über 5.63 Mio.
Aber Lösung kommt keine.
Kein Wunder. Eines der 3 Herzen ist immer zu unterst im rechten tiefen Kanal.
Auch ein Kreiz ist immer links ganz unten.
Dort wird's nie eine Lösung geben!
-
Dort wird's nie eine Lösung geben!
64erGruftis Pupu Solver hab ich mir bisher nicht genauer angesehen, aber die Kernkompetenz des Solvers ist wohl "brute force", da kann es tricky werden, wenn Steine erst auf bestimmte Positionen geschoben und/oder Brücken gebaut werden müssen, damit andere Steine zusammenfinden. Zu erkennen, ob "Reihe" oder "Winkel" die zielführende Lösung ist, wäre auch ein Faktor.
Alle anderen Level hat der Solver geschafft? Cool, dann hab ich wenigstens mit einem Level gegen die Maschine, bzw. gegen 64erGruftis Code gewonnen.
Daher ist "LAST ONE" der verdiente letzte Level.
-
Plötzlich hing mein Linux. Der Solver war bei über 4.5 Mio (3. Zahl).
Nach Reboot nun wieder über 5.63 Mio.
Aber Lösung kommt keine.
Kein Wunder. Eines der 3 Herzen ist immer zu unterst im rechten tiefen Kanal.
Auch ein Kreiz ist immer links ganz unten.
Dort wird's nie eine Lösung geben!
Da gibt es beim Solver wohl noch Optimierungspotential.
Der Level ist lösbar.
-
Da gibt es beim Solver wohl noch Optimierungspotential.
Der Level ist lösbar.
Das hab ich auch nie bestriten. Die Frage ist nur, wie kann man das optimieren? Ich schrieb ja schon, ich habe keine Ahnung, wie ich meine Vorgehensweise in einen Algorithmus stecken soll.
-
... kann es sein, daß das Laden einer Solution (.sol) noch einen Fehler hat?
Shell-Script
Das File level015.sol existiert, auch das Lösen (-f) ist möglich.Danke fürs Nachschauen...
-
... kann es sein, daß das Laden einer Solution (.sol) noch einen Fehler hat?
Shell-Script
Das File level015.sol existiert, auch das Lösen (-f) ist möglich.Danke fürs Nachschauen...
Hänge doch bitte noch die Datei an, nur damit man selber damit auch herumspielen kann
-
Hänge doch bitte noch die Datei an, nur damit man selber damit auch herumspielen kann
... ich kann gar kein Solutionfile öffnen, auch nicht das originale puzzle.sol .... evtl Bedien-/ Installationsfehler meinerseits?
Code- ls
- level001.sol level015.seq puzzle.txt
- level001.txt level015.sol requirements.txt
- level014.sol pupu_solver.py
- level014.txt puzzle.sol
- python3 pupu_solver.py -s puzzle.sol
- pygame 2.6.1 (SDL 2.28.4, Python 3.13.0)
- Hello from the pygame community. https://www.pygame.org/contribute.html
- usage: pupu_solver.py [-h] [-z FACTOR] [-s FILE] [-d] [-f] puzzle
- pupu_solver.py: error: the following arguments are required: puzzle
... an der verwendeten OSX-Shell liegt's wohl auch nicht, hab von zsh auf bash gewechselt: gleiches Ergebnis.
-
pupu_solver.py: error: the following arguments are required: puzzle
Die Fehlermeldung sagt es schon. Du brauchst auch noch das Puzzle dazu. In der SOL stehen lediglich die Züge drin. Aber welche Steine überhaupt initial im Puzzle wo stehen, ist dort nicht gespeichert. Die SOL ist immer in Verbindung mit dem Puzzle zu sehen. Also:
Edit:
Theoretisch kann man eine SOL mit einem völlig anderen Puzzle starten. Kommt natürlich nur Quatsch raus und könnte sogar zum Absturz führen.
-
Die Fehlermeldung sagt es schon. Du brauchst auch noch das Puzzle dazu. In der SOL stehen lediglich die Züge drin. Aber welche Steine überhaupt initial im Puzzle wo stehen, ist dort nicht gespeichert. Die SOL ist immer in Verbindung mit dem Puzzle zu sehen. Also:
... das erklärt es natürlich, danke! Und wenn das jetzt noch im GitHub-README stünde...
-
Und wenn das jetzt noch im GitHub-README stünde...
Tut es eigentlich. Der Parameter "puzzle" ist nicht als optionaler Parameter deklariert, sondern positional. Das bedeutet, dass er an dieser Position stehen muss, wobei die meisten Systeme optionale Parameter auch an anderen Stellen akzeptieren. Desweiteren sagt er es einem ja, wenn man ihn vergisst.
Aber ich werde es nochmal explizit rein schreiben. Beim nächsten Update wird es dann mit drin stehen. Ich habe noch eine kleine Optimierung geplant. Zumindest denke ich, dass das nochmal ein kleines Bißchen Zeit ausmachen dürfte.
-
Und wenn das jetzt noch im GitHub-README stünde...
Meine geplante Optimierung bringt leider nix. Die Funktion, die ich verwense, ist bereits gut genug optimiert. Die Readme wurde ergänzt.
-
... noch eine Frage: gibt es einen Grund, warum der Solver unverschiebbare (da kein leeres Feld vorhanden) Glasbausteine doch offenbar versucht zu verschieben?
Zumindest sieht das während der Lösungsversuche so aus:
Die Fläche im konkreten Beispiel ist eigentlich komplett mit Glasbausteinen ausgefüllt:
Wo schiebt er die denn hin? Vielleicht lässt sich hier unnötiges Verschieben reduzieren und damit insgesamt laufzeittechnisch optimieren? -
... noch eine Frage: gibt es einen Grund, warum der Solver unverschiebbare (da kein leeres Feld vorhanden) Glasbausteine doch offenbar versucht zu verschieben?
Zumindest sieht das während der Lösungsversuche so aus:
Die Fläche im konkreten Beispiel ist eigentlich komplett mit Glasbausteinen ausgefüllt:
Wo schiebt er die denn hin? Vielleicht lässt sich hier unnötiges Verschieben reduzieren und damit insgesamt laufzeittechnisch optimieren?Schick mir mal das Puzzle. Sollte eigentlich nicht passieren. Wobei man natürlich auch sagen könnte, sollte in einem Puzzle gar nicht vorkommen, weil unsinnig.
-
Schick mir mal das Puzzle. Sollte eigentlich nicht passieren. Wobei man natürlich auch sagen könnte, sollte in einem Puzzle gar nicht vorkommen, weil unsinnig.
.. benutze sowas gern als "künstlerisches Element"...
Passiert immer, wenn die Glasbausteine ohne Bewegungsmöglichkeit eingegrenzt sind. Eine Begrenzung ist der Spielfeldrand - also keine richtige Mauer.
Unten offen passiert es offenbar nicht, rechts schon.
Anbei ein Dummy-Level-File, bei welchem man das beobachten kann.(aber kein Stress, war mir nur beim abschliessenden Testdurchlauf meiner fertigen Level aufgefallen).