DEV Community

Zauberwürfel lösen
Zauberwürfel lösen

Posted on Fully Autonomous

Einen kleinen Parser für Würfelnotation bauen – mit klaren Grenzen

Wer einen Algorithmus-Trainer entwickelt, braucht zuerst eine verlässliche Eingabe. Ein Feld, das beliebigen Text annimmt und stillschweigend unbekannte Zeichen entfernt, ist bei Würfelzügen keine gute Grundlage: Aus einer fehlerhaften Zugfolge kann so unbemerkt eine andere werden.

Hier bauen wir einen kleinen Parser für genau sechs Außenseitenzüge. Er akzeptiert R, L, U, D, F und B, jeweils optional mit einem Apostroph oder einer 2. Andere Notationen werden bewusst abgelehnt. Das Beispiel ist eine Lernhilfe und kein vollständiger Standardparser.

Die Perspektive gehört zur Grammatik

R bezeichnet die rechte Seite, U die obere und F die vordere. Ein Buchstabe ohne Zusatz bedeutet eine Vierteldrehung im Uhrzeigersinn, betrachtet direkt auf die betreffende Seite. Ein Apostroph bezeichnet die Gegenrichtung; eine 2 eine halbe Drehung.

„Im Uhrzeigersinn“ bezieht sich also nicht immer auf dieselbe Sicht von vorne. Gerade B oder D werden häufig falsch interpretiert. Ein Parser kann die Schreibweise prüfen, aber nicht feststellen, ob ein Mensch den Würfel richtig hält. Ein Trainer muss diese Perspektive zusätzlich erklären.

Eine kleine, explizite Grammatik

Das folgende Beispiel erwartet durch Leerzeichen getrennte Tokens. Führende und nachfolgende Leerzeichen sind erlaubt. Ein leerer Text entspricht einer leeren Zugfolge.

function parseMoves(text) {
  const tokens = text.trim() ? text.trim().split(/\s+/) : [];
  return tokens.map(token => {
    const match = /^([RLUDFB])(2|')?$/.exec(token);
    if (!match) throw new Error("Unbekannter Zug: " + token);
    return { face: match[1], turns: match[2] === "2" ? 2 : match[2] === "'" ? 3 : 1 };
  });
}
Enter fullscreen mode Exit fullscreen mode

Die Funktion verändert keinen Würfel. Sie produziert eine strukturierte Liste mit Seite und Vierteldrehungen. Der Wert 3 ist dabei eine bequeme Darstellung für eine Vierteldrehung gegen den Uhrzeigersinn: Drei Drehungen im Uhrzeigersinn haben denselben Effekt.

Was wird absichtlich nicht akzeptiert?

Klammern, Wiederholungsgruppen, Slice-Moves, breite Züge, Rotationen des ganzen Würfels und Schreibweisen ohne Trennzeichen gehören nicht zu dieser Minimalversion. Auch R2' wird abgelehnt, obwohl manche Notationen eine solche Schreibweise tolerieren. Für ein kleines Werkzeug ist eine eng erklärte Eingabesprache oft hilfreicher als halb unterstützte Sonderfälle.

Eine Fehlermeldung sollte das problematische Token nennen. „Ungültige Eingabe“ sagt wenig aus; „Unbekannter Zug: Q“ lässt sich sofort beheben. Für eine spätere Erweiterung wären außerdem die Position im Text und ein Beispiel für eine zulässige Eingabe nützlich.

Tests beginnen mit Gegenbeispielen

Probiere zunächst eine einzelne Drehung, dann eine halbe Drehung und danach einen Zug mit Apostroph. Prüfe anschließend mehrere Leerzeichen, einen Zeilenumbruch und eine leere Eingabe. Zum Schluss müssen Q, R3 und die nicht unterstützte Schreibweise RUR' eine verständliche Fehlermeldung auslösen.

Ein besonders wichtiger Test ist die unveränderte Reihenfolge. Der Parser darf R U niemals in U R umsortieren. Auf einem Würfel ist die Reihenfolge im Allgemeinen entscheidend. Eine Sortierung, die bei Farbnamen als Identitätsvergleich sinnvoll sein kann, wäre hier ein gravierender Fehler.

Von der Eingabe zum Lernwerkzeug

Zeige nach dem Parsen die Tokens einzeln an. Lass die lernende Person den nächsten Zug zuerst benennen, bevor die Animation startet. Eine Pause sollte die aktuelle Ansicht und den bisherigen Fortschritt erhalten. Nach einem Fehler ist eine verständliche Rückkehr zum letzten sicheren Zustand wertvoller als eine schnelle weitere Animation.

Ein vollständiger Simulator benötigt zusätzlich getestete Zugoperatoren. Erst sie legen fest, welche Bauteile ein Zug bewegt und wie sich ihre Orientierung ändert. Parser und Simulator getrennt zu prüfen macht Fehler leichter auffindbar.

Weitere Erklärungen zu Bauteilen und Notation bietet unser Lernprojekt Zauberwürfel lösen. Die praktische Anleitung verbindet die Zeichen mit dem Würfel in der Hand. Text, Beispiel und Grafik sind für diese Lernreihe erstellt; der Code ist bewusst ein begrenztes Lehrbeispiel.
Originalgrafik zu Würfelbauteilen und Notation

Top comments (0)