Naja, die Lösung selbst habe ich schon lange fertig. Allerdings habe ich für den Zustand der Schalter keine Variable, sondern 14 einzelne Switches verwendet, weil diese einfacher abzufragen sind, um die Grafiken für die Schalter bewegen zu lassen. Der Zustand des Rätsels ist aber das einzige, was ich mit Switches speichere. Für den Zustand brauche ich überhaupt keine Variable, aber ich brauche 14 Variablen, um zu bestimmen, welche Switches welcher der 14 Schalter switcht..Zitat von DR_Zeph
Tja, der Lösungsweg ist nunmal zufällig. Aber ich erkläre jetzt mal konkret, was ich codetechnisch gemacht habe, um die Variablen zu erzeugen: Ich habe zunächst eine zufällige Variable zwischen 0 und 16383 erstellt, die bitweise definiert, welche Schalter für die Lösung relevant sind, also gedrückt werden müssen, und welche nicht. Diese nenne ich die Relevanzvariable. Mit Hilfe dieser Variable habe ich dann die Nummern der letzten beiden relevanten Schalter ausfindig gemacht (hier ist das Problem mit dem Rückwärtsentziffern). Anschliessend habe ich für jede Variable eine Zahl aus zufälligen Bits zusammengesetzt und zwar mit Hilfe von mehreren Loops und Pointern. In dieser Routine musste ich auch einbauen, dass das Bit, welches den Schalter der entsprechenden Variablen selbst darstellt, auf jeden Fall 1 sein muss, damit der bezogene Schalter auf jeden Fall umgeschaltet wird. Bei der Variable des vorletzten relevanten Schalters habe ich zunächst den Lösungsweg bis dahin berechnet. Konkret habe ich die Variablen aller relevanten Schalter mit der XOR-Operation berechnet und in die Lösungsvariable gespeichert. Diese wird dann wieder aufgesplittet, um das Bit des letzten relevanten Schalters in der Variable des vorletzten relevanten Schalters gleich zu setzen wie das Bit der bisherigen Lösungsvariable (dies ist notwendig, damit der letzte Schalter zu diesem Zeitpunkt der Lösung auf jeden Fall nicht umgelegt ist). Anschliessend habe ich beim letzten relevanten Schalter zunächst nochmals eine XOR-Operation durchgeführt und zwar mit der Lösungsvariable und der Variable des vorletzten Schalters. Die Negation der Lösungsvariable bis dahin muss dann dem Bitmuster des letzten relevanten Schalters entsprechen, damit dieser alle zu diesem Zeitpunkt nicht umgelegten Schalter umlegt. Negiert wird ganz einfach, indem die Differenz der Zahl und 16383 berechnet wird.Zitat
Du hast mich nicht verstanden. Die Pointer brauche ich, um zu speichern, welche der 14 Schalter die letzten beiden relevanten Schalter sind und diese brauche ich wie oben beschrieben für die Berechnung ihrer eigenen Variablen, damit diese zusammen mit den anderen relevanten Schaltern den Lösungsweg ergeben können.Zitat
Und meine Frage ist unbeantwortet. Vorwärts aufsplitten ist kein Problem, da nehme ich einfach direkt /2 und mod2. Ich will aber rückwärts aufsplitten können.
EDIT:
Ich sehe beim nochmals durchlesen gerade, dass ich mich falsch ausgedrückt habe: Das Problem ist die Berechnung für das Rückwärts-entziffern (also vom hohen zum tiefen Bit).







Zitieren