Stellen Sie sich ein rechteckiges zweidimensionales Gitter vor, in dem jede Zelle entweder leer ( .) oder voll ( 0) sein kann.
z.B
..00....
0000....
.00000..
000...00
..000000
000.00..
Das Gitter wird als unendlich betrachtet, alle Zellen außerhalb des abgebildeten Bereichs sind leer.
Das Ziel ist es, die gefüllten Räume zu bedecken und die leeren Räume offen zu lassen, indem Sie einen Satz von 7 verschieden geformten Steinen verwenden, die jeweils 4 Zellen (2 × 2) des Gitters einnehmen.
Dies sind die 7 Steine:
Blöcke - 1 Variante
11 11Platten - 2 Varianten
.. 2233 ..Treppen - 4 Varianten
.4 445. 5566 .677 7.
Diese Bausteine müssen immer an einem Raster ausgerichtet sein, dessen Zellen doppelt so breit und hoch sind wie die Zellen des Eingaberasters. Jeder Baustein kann nur eine Zelle dieses größeren Rasters belegen, aber das kleinere Raster kann unterhalb des größeren Rasters verschoben (nach oben, unten, links, rechts) werden, um mehr Optionen zum Auffinden einer Abdeckung zu erhalten. Weder die Gitter noch einzelne Steine dürfen gedreht werden.
Eine Möglichkeit, das obige Beispiel zu behandeln (oder zu lösen), ist wie folgt:
..11....
2211....
.47733..
447...22
..771133
227.11..
(Identische benachbarte Bausteine können immer noch Unklarheiten verursachen. Durch sorgfältiges Identifizieren des größeren Rasters wird dies jedoch behoben.)
Eine ungültige Lösung für
000000
000000
ist
566774
556744
weil die Ziegel nicht alle auf das größere Gitter ausgerichtet sind und nur eine Zelle davon belegen.
Eine gültige Lösung ist hier 3 Blöcke hintereinander:
111111
111111
Eine andere gültige Lösung umfasst 6 Platten:
......
222222
333333
......
Beachten Sie also, dass einige Eingabegitter mehrere Lösungen haben .
Eine ungültige Lösung für
00.00
00...
ist
11.33
11...
weil die Ziegel nicht auf das größere Gitter ausgerichtet sind. Die Platte müsste sich um eins nach links oder rechts bewegen, aber dann wäre die Abdeckung natürlich unvollständig. Dieses Eingangsraster hat keine Lösung .
Herausforderung
Schreiben Sie ein Programm, das (über stdin / command line) einen rechteckigen Textblock von .'s und 0' s aufnimmt , der ein abzudeckendes Raster darstellt.
Wenn es eine gültige Decklösung ist, drucken (via stdout) jede eine Lösung in der gleichen Weise wie oben, ersetzt all 0‚s mit dem entsprechenden 1durch 7bricks.
Wenn es keine Lösung gibt, sollte Ihr Programm nichts ausgeben, sondern einfach ganz normal enden.
Anmerkungen
Der Eingang und der Ausgang müssen nicht die gleichen rechteckigen Abmessungen haben. Ihre Ausgabe kann überflüssige Zeilen und / oder Spalten von allen enthalten
.(solange sie die Lösung nicht ungültig machen).Es ist auch in Ordnung, Zeilen und Spalten von allen zu trimmen
., wenn dies die gefüllten Räume nicht beeinflusst. z.B222222 333333ist eine gültige Lösung für
000000 000000Umgekehrt konnten die beiden leeren Spalten in
00..00nicht entfernt werden, da dies die gefüllten Räume durcheinander bringen würde.Optional können Sie davon ausgehen, dass die Eingabe eine einzelne nachgestellte Newline enthält. Eine einzelne nachgestellte Zeile in der Ausgabe ist auch dann in Ordnung, wenn keine Lösung vorliegt.
Gitter, die vollständig leer sind (alle
.) und das einfache 0 × 0-Gitter sind keine Eingabefälle, über die Sie sich Sorgen machen müssen. Aber das 1 × 1-0Raster ist, wie alle anderen Raster, die mindestens eines enthalten0. (Sie können nicht davon ausgehen, dass die Breite oder Höhe des Eingaberasters gerade ist!)Anstelle eines Programms können Sie eine Funktion schreiben, die die Eingabe als Zeichenfolgenargument verwendet und die Ausgabe normal ausgibt oder als Zeichenfolge zurückgibt. Jeder falsche Wert kann zurückgegeben werden, wenn es keine Lösung gibt.
Sie können 9 verschiedene druckbare ASCII- Zeichen anstelle von verwenden
.01234567. Sagen Sie einfach, was Ihre Substitutionen waren! Zeilenumbrüche müssen unverändert bleiben.
Wertung
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist der am höchsten gewählte Beitrag.
Diese Herausforderung wurde von Blöcken , Platten und Treppen in Minecraft inspiriert , die den hier beschriebenen Regeln folgen. Wenn Sie PPCG und Minecraft mögen, sollten Sie sich den PPCG Minecraft Server ansehen .