In dem Videospiel Minecraft geht es darum, verschiedene Arten von Blöcken in dem 3D- Ganzzahlgitter , aus dem die virtuelle Welt besteht, zu platzieren und zu entfernen . Jeder Gitterpunkt kann genau einen Block enthalten oder leer sein ( offiziell ein " Luft " -Block). In dieser Herausforderung werden wir uns nur mit einer horizontalen 2D-Ebene der 3D-Welt und einem Blocktyp befassen: Truhen .
Mit Truhen können Spieler Gegenstände lagern. Wenn zwei Truhen in derselben horizontalen Ebene orthogonal nebeneinander liegen, verbinden sich ihre Texturen und es bildet sich eine doppelte Truhe mit der doppelten Kapazität. Nichts größer als eine doppelte Truhe kann gemacht werden; es gibt keine dreifachen oder vierfachen Truhen.
Ein Brustblock kann nur in einem leeren Gitterpunkt platziert werden, wenn seine vier orthogonal benachbarten Punkte alle leer sind oder wenn genau einer einen Brustblock enthält, der nicht bereits Teil einer doppelten Brust ist. Diese Platzierungsregeln stellen sicher, dass es niemals zu Unklarheiten darüber kommen kann, welche Brustblöcke sich zu doppelten Truhen verbinden.
Angenommen, es .ist ein leerer Raum und Ceine Truhe: (Die Zahlen sind ebenfalls ein leerer Raum und dienen nur zu Identifikationszwecken.)
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Eine Truhe kann auf Platz 1 gelegt werden, da ihre 4 Nachbarn leer sind.
- Eine Truhe kann in Punkt 2 platziert werden, da die benachbarte Truhe (noch) nicht Teil einer doppelten Truhe ist.
- Eine Truhe kann nicht in Position 3 platziert werden, da es Unklarheiten darüber geben würde, wie sich die doppelte Truhe bildet.
- Eine Truhe kann nicht in Position 4 platziert werden, da die benachbarte Truhe bereits Teil einer doppelten Truhe ist.
- Eine Truhe kann in Position 5 platziert werden. Die diagonal benachbarte Doppel-Truhe hat keinen Einfluss auf irgendetwas.
Angenommen, der Bereich jenseits des Gitters ist leer, ändert sich jeder Bereich .des Gitters in einen, *wenn dort eine Truhe platziert werden könnte:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
*Natürlich können nicht alle Räume gleichzeitig mit Truhen belegt werden, aber wenn Sie nur eine Truhe hätten, könnten Sie diese in eine der Truhen stellen.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die ein .und C-Raster enthält, und ändern Sie jedes .in ein, *wenn eine Truhe dort platziert werden könnte, um das resultierende Raster zu drucken oder zurückzugeben.
Die Eingabe kann von stdin oder einer Datei oder als Zeichenfolgenargument für eine Funktion erfolgen.
Sie können davon ausgehen, dass die Eingabe gut strukturiert ist, dh ein perfekt rechteckiges Textgitter , das mindestens 1 Zeichen breit und hoch ist und nur Folgendes enthält,
.undCSie können optional davon ausgehen, dass nach der letzten Zeile eine nachgestellte neue Zeile steht (und in der Ausgabe möglicherweise eine ).Sie können davon ausgehen, dass die Anordnung der Truhen in der Eingabe den obigen Regeln entspricht. Es wird niemals Unklarheiten darüber geben, welche Truhen Doppel-Truhen bilden.
Falls gewünscht, können Sie drei verschiedene verwenden druckbaren ASCII - Zeichen anstelle von
.,C, und*. Sie dürfen anstelle von Zeilenumbrüchen nichts anderes verwenden.Alle Truhen sind normale Truhen. Nicht eingeschlossene Truhen oder Ender-Truhen .
Wertung
Die Einsendung mit den wenigsten Bytes gewinnt.
Versuchen Sie für eine Minecraft-bezogene Herausforderung, die etwas schwieriger ist, Nether Portal Detection .