Diese Herausforderung basiert auf dem Spiel Layerz.
Gegeben, auf stdin oder als Funktionsargument, ein rechteckiges 2D-Array von Zellen, wobei jede Zelle entweder ein Leerzeichen (Sie können 0 anstelle von Leerzeichen ohne Strafe verwenden), eine 1, eine 2, eine 3 oder eine 4 enthält ; Finden Sie eine Möglichkeit, es in gültige Regionen (wie unten definiert) zu unterteilen, sodass jede nicht leere Zelle in genau einer Region enthalten ist. Geben Sie dann die gefundene Lösung in einem angemessenen Format aus. Wenn es keine Lösung gibt, stoppen Sie entweder, ohne eine Ausgabe zu erzeugen, oder geben Sie einen einzelnen Falsey-Wert aus, und stoppen Sie dann.
Jedes der folgenden Elemente stellt eine gültige Region dar:
- Eine einzelne Zelle mit einer 1
- Eine Zelle mit einer 2 und genau einem ihrer nicht leeren orthogonalen Nachbarn
- Eine Zelle mit einer 3 und genau zwei nicht leeren orthogonalen Nachbarn
- Eine Zelle, die 4 und genau drei ihrer nicht leeren orthogonalen Nachbarn enthält
Dies ist Codegolf , daher gewinnt die kürzeste gültige Antwort in Bytes.
Einige Testfälle:
1. Eine eher triviale:
Und das ist die Lösung, mit jeder Region in einer anderen Farbe:
2. Interessanter
Dieser hat mehr als eine Lösung, aber hier ist eine davon:
3. Ein kleineres, das Leerzeichen enthält und keine Lösung hat (je nachdem, ob Sie eines der beiden verwenden, um die drei zu "erfassen", oder die drei, um zwei der beiden zu nehmen, bleibt entweder ein Paar nicht benachbarter (und daher nicht gruppierbarer) Zweien oder eine einzelne Zwei für sich):
Da dieses Raster keine Lösungen enthält, sollte Ihr Programm angehalten werden, ohne dass eine Ausgabe erfolgt, wenn dieses Raster angegeben wird.
4. Diese (wobei die obersten 2 um eine Zelle nach links verschoben sind) hat jedoch eine Lösung:
Lösung:
(Die untere rechte 2 wird verwendet, um die 3 "einzufangen")
5. Weil wir einen Testfall mit ein paar Vieren brauchten:
Eine Lösung:
4
s abdecken, wenn diese gültige Eingaben sind.