# Würfelturm



## schraube97 (3. Jun 2017)

Hey liebe Leute,
ich bin mit meinem Teamkollegen völlig am verzweifeln. Wir sollen für die uni ein rekursives Programm schreiben.

Kleine Info zu dem Programm:
Vier Würfel mit farbigen Flächen werden aufeinandergetürmt und so rotiert, dass an den Seitenwänden keine der vier Farben(Rotblau,grün,gelb) doppelt auftaucht.

Aufgabenstellung: 
Entwickeln Sie ein System von Klassen, welches für jeweils vier aufeinandergestapelte Würfel rekursiv alle durch Rotation möglichen Turmstellungen mit paarweise verschiedenfarbigen Seitenwänden berechnet und diese geeignet ausgibt. Dabei werden Rotationsinvariante Lösungen erkannt und nur einmal als Lösung aufgenommen. 

Also unser größtes Problem liegt darin, die vier Würfel zu drehen. Wir haben absolut keine Ahnung wie wir die Rekursion umsetzen sollen. 
Wir haben einen kleinen Lösungsansatz den ich kurz beschreiben kann. 
Wir haben bisher drei Klassen erstellt. Eine Würfel,InputOutput und Turm Klasse. 
In der Würfel Klasse haben wir festgelegt wie ein Würfel aussehen soll. Also haben wir ein charArray mit 6 Zeichen erstellt. Das Objekt Würfel wird in der InputOutput Klasse über die User Eingabe 4 mal in eine neue ArrayList mit den Namen Turm gespeichert. In dieser müssten dann 24 Zeichen enthalten sein. Wir haben uns überlegt die Würfel dann aus der Turm Liste zu holen und zu vergleichen (über den Index). Aber wir haben wie schon gesagt absolut keine Ahnung wie wir diese Rotationen und die Vergleiche implementieren sollen. Außerdem müssten die Farben den Würfel fest zugewiesen werden (oder?) also ich meine damit, dass z.B. die 1 der 6 gegenüberliegt. Also wenn der User zuerst rot und zuletzt blau eingibt dann müssen diese färben gegenüberliegend sein um bei der Rotation nicht durcheinander zu kommen und damit der Würfel nicht verfälscht wird. Wie kann man das am besten erreichen ? Wir haben uns überlegt eine Tupel Klasse zu erstellen mit den Klassenvariablen back, front,left,right (integer)..usw. und den Konstruktor dann irgendwie in der Turmklasse für die Rekusion zu übergeben.

Habt ihr vielleicht ein paar bessere Lösungsvorschläge oder könntet uns sagen ob wir mit den Grundgedanken richtig liegen und wie wir am besten die Rekursion angehen ?  

Vielen Dank im Voraus und schöne Pfingsten.


----------



## Meniskusschaden (4. Jun 2017)

schraube97 hat gesagt.:


> Also unser größtes Problem liegt darin, die vier Würfel zu drehen.


Warum wollt ihr die denn überhaupt drehen? Ein Würfel nimmt doch immer eine von nur 24 möglichen Ausrichtungen ein. Gebt die doch einfach fest vor, beispielsweise in einem Array. Dann müsst ihr nur einmal das Array durchlaufen, um jede mögliche Würfelausrichtung zu prüfen.


----------



## schraube97 (4. Jun 2017)

Meniskusschaden hat gesagt.:


> Warum wollt ihr die denn überhaupt drehen?


Erstmal danke für deine Antwort. Dein Lösungsvorschlag klingt ganz gut. Drehen müssen wir sie, da der ganze Turm betrachtet wird. Wir haben uns das jetzt so überlegt, dass man zuerst den obersten Würfel dreht und flippt, also in seine 24 positionen bringt und dann den zweiten 1 mal dreht, den obersten wieder 24 mal und den zweiten dann ein 2. mal .. den obersten dann wieder 24 mal und den 2. dann ein drittes mal .. usw. bis zum letzten Würfel. Somit werden alle möglichkeiten welche der Würfelturm annehmen kann abgedeckt.


----------



## mrBrown (4. Jun 2017)

Sind es genau vier verschiedene Farben und vier Würfel?


----------



## schraube97 (4. Jun 2017)

mrBrown hat gesagt.:


> Sind es genau vier verschiedene Farben und vier Würfel?


Ja genau. Das heißt, dass ein Würfel alle Farben (rot,grün,blau,gelb) enthalten muss aber eine Farbe auch maximal dreimal vorkommen kann.


----------

