4. solve()

Wir haben uns für eine Methode für das Lösen des Würfels entschieden, die wir vor dem Projekt schon kannten.

Den Algorithmus zu implementieren, hat für mich am meisten Zeit in Anspruch genommen.

Andrey und ich haben zusammen lange an diesem Teil des Programms geknobelt und wir mussten viel ausprobieren, viele Fehler finden und beheben, bis alles irgendwann funktioniert hat.

Die App, die ich geschrieben habe, hat uns aber dabei geholfen, die Fehler einigermaßen schnell finden zu können, da wir uns immer genau anschauen konnten, was in jedem Schritt nicht richtig funktioniert hat.

Das Programm ist am Ende sehr lang geworden. Die Möglichkeit, den Würfel drehen zu können, hätte auch den Algorithmus an vielen Stellen vereinfachen und verkürzen können.

Bei unserer Methode wird der Rubik’s Cube ebenenweise gelöst. Man nutzt dabei aus, dass es kurze Algorithmen gibt, mit denen man beispielsweise die letzte Ebene lösen kann, ohne dabei die beiden anderen, schon gelösten Ebenen wieder zu zerstören.

Ich habe zu dem Thema ein gutes YouTube-Video gefunden: https://www.youtube.com/watch?v=vK9XjwmseSk.

Für das Beispiel braucht unser Algorithmus 214 Drehungen. Das entspricht ungefähr dem 10-fachen von der maximal benötigten Anzahl von Drehungen, um den Würfel von jeder beliebigen Startposition aus zu lösen. Diese Zahl ist als God’s Number bekannt und man geht seit 2010 geht davon aus, dass sie bei 20 Drehungen liegt.

Wir haben den Algorithmus in verschiedene Methoden unterteilt, die alle aufeinander aufbauen und jeweils einen Teil des Würfels lösen.

Auf den Bildern sieht man nun, wie der Würfel von unserem Programm Schritt für Schritt gelöst wird.

 

makeSunflower()

makeWhiteCross()

finishFirstLayer()

solveSecondLayer()

makeYellowCross()

swapYellowEdges()

positionYellowCorners()

orientYellowCorners()