Überblick
Pearls (oder Masyu) ist ein Logikspiel, das auf einem Raster gespielt wird. Es gibt schwarze und weiße Perlen auf dem Gitter. Das Ziel ist es, eine einzelne, geschlossene Schleife zu bilden , die jede Perle nur mit geraden Liniensegmenten und rechten Winkeln durchläuft.
Es gibt einige Regeln, die bestimmen, wie die Schleife mit Perlen interagiert:
- Weiße Perlen müssen gerade durchlaufen werden, aber die Schleife muss sich in der vorherigen und / oder nächsten Zelle auf ihrem Weg drehen .
- Schwarze Perlen müssen einge auf, aber die Schleife muss reisen gerade durch die nächsten und vorherigen Zellen in seinem Weg.
- Die Schleife darf sich nicht kreuzen oder anderweitig kreuzen. Alle Zellen haben genau null oder zwei Schleifenein- / ausgänge.
Ein Beispielpuzzle aus Wikipedia (und seiner Lösung):
Ihr Ziel ist es, ein bestimmtes Rätsel zu lösen. Wenn es mehrere mögliche Lösungen gibt, spielt es keine Rolle, welche Sie geben.
Eingang
Die Eingabe ist ein ungelöstes quadratisches Gitter. Das oben gezeigte Beispiel würde folgendermaßen aussehen:
..w.w.....
....w...b.
..b.b.w...
...w..w...
b....w...w
..w....w..
..b...w...
w...b....w
......ww..
..b......b
w
ist eine weiße Perle, b
ist eine schwarze Perle und .
ist eine leere Zelle.
Angenommen, die Eingabe ist gültig. Dies bedeutet, dass es gut geformt ist und mindestens eine Lösung möglich ist. Alle gültigen Rätsel sind mindestens 3x3 und enthalten mindestens eine Perle.
Ausgabe
Die Ausgabe ist eine Folge von Koordinaten, die den Pfad darstellen. Die linke obere Ecke des Gitters ist 0 0
, die rechte obere Ecke ist n-1 0
, wobei n die Breite des Gitters ist.
Ein Pfad besteht einfach aus einer Reihe geordneter Koordinaten:
x1 y1 x2 y2 x3 y3 ...
Es wird davon ausgegangen, dass der Pfad geschlossen ist, sodass Sie die erste Koordinate am Ende nicht wiederholen müssen , es gibt jedoch keine Strafe dafür.
Die Ausgabe sollte aus mindestens allen Ecken im Pfad bestehen. Sie müssen nicht jede Zelle auf dem Pfad ausgeben, wenn es keine Kurve gibt. Die Ausgabe für das Beispiel könnte beispielsweise beginnen mit:
1 0 5 0 5 1 ...
oder
1 0 2 0 3 0 4 0 5 0 5 1 ...
Ausgabe sollte nicht jede Zelle nicht im Pfad enthalten. Sie können an einer beliebigen Zelle im Pfad beginnen.
Ausschnitt
Hier ist ein Ausschnitt, mit dem Sie Ihre Lösung visualisieren können. Fügen Sie einfach das Raster ein, an dem Sie arbeiten, und den Pfad, den Sie ausgeben. Mir ist bewusst, dass es schmerzhaft ist, meinen Code zu betrachten.
Testfälle
Diese Testfälle zeigen eine mögliche Ausgabe für jede Eingabe (mit Ausnahme der letzten, die als ungelöst angezeigt wird). Möglicherweise gibt es andere gültige Pfade, Sie können im Uhrzeigersinn oder gegen den Uhrzeigersinn fahren oder an einem anderen Punkt beginnen usw. Die Lösungen sollten in der Lage sein, die Testfälle in Sekunden / Minuten / Stunden und nicht in Tagen / Wochen / Äonen zu lösen.
...
w..
..b
0 0 1 0 2 0 2 1 2 2 1 2 0 2 0 1
.wb..b
......
..b...
w.ww..
......
b....b
0 0 2 0 2 2 4 2 4 1 3 1 3 0 5 0 5 5 3 5 3 4 4 4 4 3 1 3 1 4 2 4 2 5 0 5 0 2 1 2 1 1 0 1
.....w.b.w..
ww..b...b...
.w.....b....
...wbww..b.b
....b.......
w.w.........
..w......b.b
.....bb.....
.....b.....w
w.ww..b.....
...w......w.
b..w.....b..