![]() |
Aufgabe: Algorithmus eines Zauberwürfels
Also eigentlich wäre eine derartige Aufgabe besonders für die Studierten unter den DP Members gedacht, die sich schon mit dem Damenproblem (mathematisch :) ), dem Traveling Salesman Problem und diesem ganzen Kram auskennen.
Es geht also darum ein Programm zu schreiben, welches einem irgendwie einen Zauberwürfel berechnen kann (dieses nette Spielzeug, bei dem man versuchen muss auf jeder Seite des Würfels hinterher jeweils nur noch 9 Facetten einer Farbe zu haben). Ich weiß nich ob das überall Zauberwürfel genannt wird. Vielleicht gibt es ja sogar schon ein fertiges Programm diesbezüglich. Ansonsten würde mir es aber auch einfach nur Spass machen euch zu diesem Thema diskutieren und überlegen zu sehen. (Hinweis: Falls es sich so anhören sollte: Ich habe keine Lösung dafür, so das ich euch abfragen könnte diesbezüglich :) ) Ich hoffe mal das kam verständlich rüber. Ansonsten liefere ich gerne noch Infos nach. (und fragt nich wozu ich das brauche, wirklich brauchen tu ich das nämlich nich... is mehr ne Spassaufgabe) Gruss p0ke |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Fragt sich nur, wie willst du die aktuelle Position der Facetten eingeben ?
Ich hab grad keinen Zauberwürfel zur Hand, aber man kann doch jede Reihe drehen, oder ? Vielllleicht kennt ja jemand ne Seite, auf der der Aufbau eines solchen Würfels beschrieben ist, das könnte sicherlich Weiterhelfen. Aber das sich dies mit einem Algorithmus lösen lässt, wag ich zu bezweifeln !? |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zitat:
...:cat:... P.S.: Lang ist es her, aber ich kannte die Algos auch mal. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Hallo p0ke,
man kann ohne Probleme im Internet Anleitungen finden, wie man einen Zauberwürfel (auch Rubikwürfel genannt) wieder in die Ausgangsposition zurückbringen kann. Bei dieser Lösung handelt es sich allerdings nicht um die schnellste Lösung, sondern um eine einigermaßen geordnete, so dass ein Mensch sie nachvollziehen kann. Man könnte nun einen Rubikwürfel-programm schreiben, dass einen solchen Algorithmus durchführt. Wie gesagt wäre das aber nicht die schnellste Lösung. Sprich: Man dreht an dem Würfel dreimal--> Das Programm findet eine Lösung, bei der man 53mal drehen muss. Vielleicht kann man rekursiv alle möglichkeiten durchgehen und so die schnellste finden. Das verbraucht nur ziemlich viel Speicher, weil man von jeder Position aus 18 Drehungen machen kann. Edit: Falls jemand wissen will, wie so ein Rubikwürfel von innen aussieht: Man kann diese Teile ganz einfach auseinanderbauen (und hinterher wieder zusammen). Einfach eine Ebene um etwa 30° drehen und dann eine andere dagegendrehen. Man muss ein wenig Kraft anwenden, aber das klappt. Das ist dann auch gleichzeitig, die Methode für Verzweifelte: Würfelauseinandernehmen und geordnet wieder zusammensetzen. Klappt zwar nicht in 30 sek, aber bestimmt in 5 Minuten :-D . Grüße Seniman |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zitat:
Zum Problem: Ich hab so ein Teil schon lange nicht mehr gesehen...Lieg ich richtig, wenn ich annehmen, dass, wenn man eine Seite komplett hat, man alle anderen auch hat? :gruebel: Man liest sich, Stanlay :hi: |
Re: Aufgabe: Algorithmus eines Zauberwürfels
nicht unbedingt, besser gesagt: "Das ist ja das schwierige :mrgreen: "
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
Das sind doch schonmal interessante Ansätze :)
Öhm, also Stanlay, es kann sein das du nur eine Seite hast und der Rest nicht passt, es kann auch passieren das du 3 Seiten fertig hast aber die anderen 3 nich. Dann kommt das Problem, jetzt musst du die 3 fertigen Seiten wieder "kaputt" machen um auch noch die anderen 3 fertig zu bekommen :) @Seniman: Wir bleiben mal bei dem Programm. Also da die Elemente auseinander ziehen und geordnet wieder zusammenstecken (mogeln) is nich :mrgreen: |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Hallo
@Stanlay: Nein, das hat absolut nichts mit Glück zu tun. Ich war mal absolut begeistert von diesen Teilen und hab es eine ganze Weile geübt. Ich konnte dann einen komplett chaotischen Rubikwürfel in ca 2 Minuten wieder "heile" machen. Inzwischen hab die Übung nicht mehr so ganz drin und brauche länger. Grüße Seniman |
Re: Aufgabe: Algorithmus eines Zauberwürfels
ich hab meiner Schwester mal ne Email geschrieben, die hatt sich früher auch Stundenlang mit den Dingern beschäftigt, zudem hat ist sie Mathe-Lehrerin, vielleicht hat sie ja eine Lösung :roll:
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
Hab mal n bisschen rumgesucht und was gefunden. Habs mir noch nich angesehen, aber ich denke es is für alle interessant.
![]() Delphi 6 Source gibts da ebenfalls. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Wikipedia:
Man kann den Zauberwürfel auch mit verbundenen Augen lösen. Zu diesem Zweck bekommt man zuerst Zeit, sich den verdrehten Würfel einzuprägen. Der amerikanische Student Leyan Lo stellte in dieser Disziplin im Jahre 2006 mit 1 min 28,82 sec einen neuen Weltrekord auf :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zauberwürfel: Es gibt ca. 8 Operationen, um bestimmte Teilaufgaben zu lösen. Dazu gehören:
1. Alle 8 Ecken in die richtige Position bringen 2. Obere und untere Fläche fertigstellen 3. Die Mitte fertigstellen Meist sind jetzt 2 Steine vertauscht. Die bekommt man mit 8*3 Drehungen umgedreht- 4.Fertig. Das o.g. ist nur eine von vielen Möglichkeiten. Ich hab das früher in so ca. 40 Sekunden geschafft. Wie gesagt, keine Kunst, wenn man die Operationen geübt hat. Mit ein wenig Übung schafft das Jeder ohne Gichtproblemen in den Händen. Als Algorithmus eine nette Aufgabe, mehr aber auch nicht. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
![]() |
Re: Aufgabe: Algorithmus eines Zauberwürfels
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
@ Corpsman: cooles Teil, aber berechnet das auch die schnellst mögliche Lösung?
Die einzige Möglichkeit, die Lösung mit den wenigsten Drehungen zu finden, ist wohl die Brute-Force-Methode. Einfach alle Möglichkeiten durchspielen. Es gibt, wie hier schon gesagt wurde, zu jedem Zug 18 mögliche Drehungen. Ich behaupte mal, dass selbst die schlechteste Positionierung mit weniger als 50 Drehungen gelöst werden kann. Das heißt es gibt 18^50 verschiedene Wege. Der erste Weg wäre, 50 mal die gleiche Drehung zu machen, der zweite wäre 49 mal die gleiche Drehung wie beim ersten zu machen und als 50ten Zug dann einen anderen Weg zu gehen. Diese 18^50 verschiedene Wege müssten alle nacheinander durchgespielt würden. Stimmt, braucht Monate bis da ne Lösung gefunden würde. Aber das alles könnte man ja ein bisschen vereinfachen und an vielen Ecken und Kanten einschränken, sodass man die Anzahl der Wege verringert.
Ich kann nicht genau abschätzen, wie viele mögliche Zug-Folgen dann noch übrig blieben, die berechnet werden müssen. Vielleicht ist mein Lösungsansatz Bullshit, weil er zwar nicht Monate, dafür aber Tage braucht. War nur so meine spontane Idee. Es wird aber nicht übermäßig viel Speicher belegt. Was gespeichert werden muss:
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
wie redet ihr hier über den Zauberwürfel???
ich hatte früher(ok sehr viel früher) so einen und hab stunden versucht ihn wieder zurückzukriegen aber nie wieder geschafft bei *Simpsons* hat er in der Folge, wo *Flanders* durchdreht auch mal kurz für verwirrung unter den *Simpsons* gesorgt |
Re: Aufgabe: Algorithmus eines Zauberwürfels
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
den zauberwürfel hab ich damals verflucht und zerstört, sonst würde ich jetzt dazu verführt sein die seite auszuprobieren
|
Re: Aufgabe: Algorithmus eines Zauberwürfels
@Cöster :
Du hast nicht ganz unrecht, es gibt soviel ich weis sogar einen Beweis das man nicht sehr viele Drehungen braucht , ich meine es waren sogar unter 30. Die Brute Force habe ich auch mal getestet. Selbst wenn man das mit einer Heuristischen Variante Koppelt geht es nicht. Das heist es geht schon. Aber mein Algo hat es nur geschafft wenn weniger oder 6 drehungen notwendig waren, d.h 18^6 Möglichkeiten ( unoptimiert ). Sobald ich den Würfel mehr Verdreht habe ist die Rechenzeit derartig explodiert das nichts mehr ging. Zusätzlich mus man ja noch speichern wie man auf die Lösung kommt. Das hat mein 1 GB RAM Speicher dannn auch noch zerlegt. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zitat:
Es gibt inzwischen u.a. schon einen Lego-Roboter, der die Lösen kann. Der Link dazu war irgendwann mal bei Userfriendly.org als Link of the Day promoted. Da hat einer so eine Halterung für den Würfel gebaut und einen Roboterarm der den ganzen würfel bzw. die einzelnen Seiten drehen und per Webcam fotografieren konnt. Der hat halt ne Weile gebraucht, ging aber komplett vollautomatisch. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zitat:
[OT] Aber zum Thema Backtracking stelle ich jetzt auch mal ein kleines Tutorial in Aussicht mit allgemeiner Klasse, hab alles hier, muss es nur noch vernünftig dokumentieren und abtippen. |
Re: Aufgabe: Algorithmus eines Zauberwürfels
Zitat:
Wenn das nicht ginge/zu kompliziert wäre:
Delphi-Quellcode:
private
FBestWay: array of Byte; // Speicherung des bisher besten Weges FCurrentWay: array of Byte; // Speicherung des aktuell berechneten Weges function AllTried(const Way: array of Byte): Boolean; // prüft, ob alles probiert wurde procedure CalcWay(var Way: array of Byte); // Berechnet nächsten Weg function Solved(var Way: array of Byte): Boolean; // geht Drehungen durch, // bei Lösung: verkürzt Way und gibt True zurück {...} implementation procedure TForm1.btnLoesen1Click(Sender: TObject); var i: Byte; begin SetLength(FCurrentWay, 30); for i := 1 to 29 do FCurrentWay[i] := 1; FCurrentWay[30] := 0; repeat CalcWay(FCurrentWay); if Solved(FCurrentWay) then begin SetLength(FBestWay, Length(FCurrentWay); FBestWay := FCurrentWay; end; until AllTried(FCurrentWay); end; {...} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz