Das Spiel
In letzter Zeit hat ein süchtig machendes Spiel namens Logic Dots auf meinem Handy viel Zeit in Anspruch genommen, das mich dazu inspiriert hat, diese Herausforderung zu schreiben. Es ist einfacher, die Regeln zu erklären, wenn ich Ihnen die Spielanzeige zeige. Hier ist ein Screenshot eines ungelösten und gelösten Puzzles:
Hier gibt es drei Hauptmerkmale.
- Das Spielbrett (das 4x4-Gitterfeld in der Mitte)
- Die erforderlichen Formen (die verknüpften Punkte in der zweiten Leiste von oben, unter der Partitur und im Menü usw.), die alle Linien oder
a
1 Rechtecke sind - Die Zahlen über den Zeilen und Spalten, die angeben, wie viele Punkte in der Spalte enthalten sein müssen, um eine Lösung zu finden
Das Ziel des Spiels ist es, die erforderlichen Formen in das Gitter einzupassen. Sie können die Formen drehen, sie können jedoch nicht diagonal eingehen.
Beachten Sie in der Lösung, dass alle Formen genau einmal erstellt werden (da sie nur einmal in den erforderlichen Formen vorliegen). In diesem Fall sind sie alle horizontal, können jedoch auch vertikal sein. Die rosa ausgefüllten Quadrate bezeichnen nicht verwendete Quadrate.
Hier ist ein größeres und etwas komplizierteres Raster:
Beachten Sie, dass im ungelösten Rätsel bereits einige Felder ausgefüllt sind. Die ausgegrauten Felder stehen für blockierte Felder, auf die Sie KEINEN Punkt setzen KÖNNEN. Die Punkte mit Schwänzen zeigen an, dass sich ein Punkt an diesem Punkt befindet, und er verweist auf mindestens einen weiteren Punkt in der Richtung des Schwanzes, jedoch nicht in einer anderen Richtung (einschließlich der entgegengesetzten Richtung).
Notation
Für den Rest dieses Beitrags verweise ich mit den folgenden Symbolen auf das Board:
- <,>, ^, v - Bezeichnet einen zuvor platzierten Punkt mit einem Ende, das sich in Richtung des Punkts erstreckt
- * - Bezeichnet einen Punkt. Wenn auf einem ungelösten Gitter (Eingabe) angegeben, handelt es sich um eine individuelle Form. Wenn in Ausgabe, dann ist es mit den Punkten um ihn herum verbunden.
- # - Zeigt ein blockiertes Gitterquadrat an (wo Sie keinen Punkt platzieren können)
- -, | (Bindestrich und Strich) - Bezeichnet einen Punkt mit einem rechten und einem linken Ende sowie einen Punkt mit einem oberen bzw. unteren Ende
- ** (Leerzeichen) - ** Bezeichnet ein Leerzeichen
Mit diesen Symbolen kann der zuletzt genannte Beispielfall (ungelöst) wie folgt dargestellt werden:
<
#
^ #
Und die Lösung kann wie folgt dargestellt werden:
*< * *
*
*
* *
* *#*
^ # *
Beachten Sie, dass sich keine zwei Formen horizontal, vertikal oder diagonal berühren können , sodass der folgende Fall nicht gültig ist:
***
**
**
Herausforderung
Ihre Herausforderung besteht darin, alle Logik-Punkte-Rätsel zu lösen, von 4x4 bis einschließlich 9x9. Sie erhalten vier Eingabezeilen und dann den Spielplan. Die Zeilen lauten wie folgt:
- 1. Zeile, Formen - Die zu findenden Formen, jeweils in der Form angegeben
sizexquantity
(z. B.3x2
für zwei Formen der Länge drei) und durch ein Leerzeichen getrennt. Beispielzeile:3x1 2x1 1x1
- 2. Zeile, Spalten - Eine durch Leerzeichen getrennte Liste der erforderlichen Punktanzahl für jede Spalte. Beispielzeile:
1 1 2 2
- 3. Zeile, Zeilen - Eine durch Leerzeichen getrennte Liste der erforderlichen Punktanzahl für jede Zeile. Beispielzeile:
3 0 3 0
- 4. Zeile, Boardgröße - Eine einzelne Ganzzahl, die Boardgröße,
B
Die Karte ist dann gegeben und enthält B
Eingabezeilen, die die Karte unter Verwendung der oben erwähnten Notation darstellen. Die vollständige Eingabe für den letzteren Beispielfall lautet beispielsweise wie folgt:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Ihr Programm gibt dann die gelöste Karte in derselben Notation aus. Die übereinstimmende Ausgabe für die obige Eingabe lautet wie folgt:
** * *
*
*
* *
* *#*
* # *
Beachten Sie, dass ein Spielbrett mehrere Lösungen haben kann. In diesem Fall geben Sie einfach eine gültige Lösung aus. Außerdem muss Ihr Programm auf einem vernünftigen Desktop-Computer für ein kompliziertes 10x10-Raster innerhalb von 10 Sekunden eine korrekte Lösung ausgeben.
Das ist Codegolf, also gewinnen die wenigsten Bytes.
Testfälle
Eingang 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Ausgang 1
*** *
***#
#
* * *
Eingang 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Ausgang 2
* * *
*
* *
* #
* *
Eingang 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Ausgang 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(dies sollte am Anfang sein, nicht fast am Ende verloren, aber trotzdem ...)