„Das Kreuz ist fertig“ klingt nach einer einfachen Aussage. Für ein Lernwerkzeug ist sie aber erst dann brauchbar, wenn klar ist, welche Bedingungen tatsächlich erfüllt sein müssen. Eine weiße Form auf einer Seite ist dafür zu wenig.
Wir betrachten einen gewöhnlichen 3×3 und ein weißes Kreuz. Die vier weißen Kanten müssen um den weißen Mittelstein liegen. Zusätzlich muss die zweite Farbe jeder dieser Kanten zum Mittelstein der angrenzenden Seite passen. Genau diese zweite Bedingung wird beim Lernen leicht übersehen.
Vom Eindruck zur überprüfbaren Regel
Stell dir vor, ein Programm erhält für jede der vier Kreuzpositionen drei Angaben: Liegt Weiß auf der weißen Seite? Welche Farbe zeigt die Kante seitlich? Welche Farbe hat der Mittelstein dieser Seite? Dann lässt sich eine bewusst lokale Prüfung formulieren.
function hasAlignedWhiteCross(edges) { return edges.length === 4 && edges.every(edge => edge.whiteOnWhiteFace && edge.sideColor === edge.centerColor ); } Diese Funktion setzt voraus, dass die vier Einträge bereits die vier verschiedenen Kreuzpositionen beschreiben. Sie prüft nicht, ob die Eingabe aus einem echten Würfel stammt. Wer denselben Eintrag viermal übergibt, hat den Datenvertrag verletzt. Ein produktives Werkzeug müsste Positionen identifizieren und doppelte oder fehlende Angaben gesondert behandeln.
Die entscheidenden Gegenbeispiele
Beginne mit vier korrekt ausgerichteten Kanten. Ändere nun die seitliche Farbe genau einer Kante. Der Test muss fehlschlagen, obwohl von oben weiterhin ein weißes Kreuz zu sehen sein kann. Das ist ein nützlicher Regressionstest für eine Oberfläche, die sonst nur die obere Fläche betrachtet.
Ein zweites Gegenbeispiel ist eine Kante mit korrekter Farbkombination, aber falscher Orientierung. Auch sie darf die Prüfung nicht bestehen. Ein dritter Fall sind nur drei erfasste Kanten: „Alle vorhandenen stimmen“ ist logisch etwas anderes als „Alle erforderlichen sind vorhanden und stimmen“.
Gerade der letzte Fall zeigt, warum ein bloßes every auf einer Liste nicht genügt. Auf einer leeren Liste liefert every in JavaScript true. Die Längenprüfung im Beispiel gehört deshalb zur fachlichen Aussage, nicht nur zur defensiven Programmierung.
Eine hilfreiche Fehlermeldung
Ein rotes Kreuzsymbol allein erklärt wenig. Besser ist eine Rückmeldung wie: „Die weiß-grüne Kante liegt auf der weißen Seite; ihre grüne Seite passt aber noch nicht zum grünen Mittelstein.“ So sieht die lernende Person, welcher Teil bereits stimmt und welcher noch geprüft werden muss.
Das Werkzeug sollte aus einer solchen Diagnose keine universelle Reparaturfolge ableiten. Die passenden Züge hängen von der gesamten Stellung ab. Eine kurze Folge kann in einem bestimmten Fall helfen und in einem anderen bereits gelöste Kanten wieder verändern. Diagnose und Lösungsvorschlag benötigen unterschiedliche Informationen.
Übung am echten Würfel
Halte den Würfel zunächst mit Weiß oben. Prüfe jede der vier Kanten einzeln und lies ihre zweite Farbe ab. Drehe anschließend den gesamten Würfel in der Hand, um die Seiten zu sehen, ohne die Ebenen zu verändern. Vergleiche jede Kantenfarbe mit dem zugehörigen Mittelstein.
Notiere für jede Position „oben richtig“ und „seitlich richtig“ getrennt. Erst wenn alle acht Teilprüfungen stimmen, ist dieses Kreuz korrekt ausgerichtet. Die Ecken sind damit noch nicht gelöst; ein korrektes Kreuz ist ein Zwischenziel.
Warum diese Spezifikation nützt
Ein klar benanntes Zwischenziel macht einen Lernweg nachvollziehbar. Die Oberfläche muss kein vollständiger Solver sein, um hilfreiches Feedback zu geben. Sie muss aber die Grenzen ihrer Prüfung offenlegen und darf einen Teilzustand nicht als vollständig gelösten Würfel ausgeben.
Die Originalgrafik zeigt den Unterschied zwischen einer weißen Form und einem korrekt ausgerichteten Kreuz. Unser Projekt Zauberwürfel lösen bietet dazu eine praktische Schritt-für-Schritt-Anleitung. Dieser technische Beitrag beschreibt die Prüfung hinter dem Lernziel, keinen universellen Lösungsalgorithmus.

![Why Object.keys(user) Returns string[], Not (keyof User)[]: TypeScript Means It](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q4w48b9bzs43tynyhsf.png)
