Gra wideo Minecraft polega na umieszczaniu i usuwaniu różnego rodzaju bloków w siatce liczb całkowitych 3D, która tworzy świat wirtualny. Każdy punkt sieci może zawierać dokładnie jeden blok lub być pusty ( oficjalnie blok „ powietrzny ”). W tym wyzwaniu zajmiemy się tylko jedną poziomą płaszczyzną 2D świata 3D i jednym rodzajem bloku: skrzyniami .
Skrzynie pozwalają graczom przechowywać przedmioty. Kiedy dwie skrzynie są prostopadle przylegające do tej samej płaszczyzny poziomej, ich tekstury łączą się i tworzy się podwójna skrzynia o podwójnej pojemności. Nie można zrobić nic większego niż podwójna skrzynia; nie ma potrójnych skrzyń ani poczwórnych skrzyń.
Blok skrzyni można umieścić w pustym kracie tylko wtedy, gdy wszystkie cztery sąsiadujące ze sobą prostopadle punkty są puste lub jeśli dokładnie jeden zawiera blok skrzyni, który nie jest już częścią podwójnej skrzyni. Te zasady rozmieszczania zapewniają, że bloki skrzyń łączące się w podwójne skrzynie nigdy nie będą dwuznaczne.
Załóżmy na przykład, że .jest to puste miejsce i Cskrzynia: (Liczby są również pustym miejscem i służą wyłącznie do identyfikacji).
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Skrzynię można umieścić w miejscu 1, ponieważ jej 4 sąsiadów jest pustych.
- Skrzynię można umieścić w miejscu 2, ponieważ sąsiednia skrzynia nie jest (jeszcze) częścią podwójnej skrzyni.
- Skrzyni nie można umieścić w miejscu 3, ponieważ istniałaby dwuznaczność co do sposobu tworzenia podwójnej skrzyni.
- Skrzyni nie można umieścić w miejscu 4, ponieważ sąsiednia skrzynia jest już częścią podwójnej skrzyni.
- Skrzynia może zostać umieszczona w miejscu 5. Podwójna skrzynia sąsiadująca po przekątnej niczego nie wpływa.
Zakładając, że obszar poza siatką jest pusty, zmiana każdej .na siatce na pozycję, *jeśli można tam umieścić skrzynię, powoduje:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
*Oczywiście nie wszystkie pola mogą być jednocześnie zajęte przez skrzynie, ale jeśli masz tylko jedną skrzynię, można ją umieścić w dowolnej z nich.
Wyzwanie
Napisz program lub funkcję, która pobiera a .i Cgrid, i zmienia każdy .na a, *jeśli można tam umieścić skrzynię, drukując lub zwracając wynikową siatkę.
Dane wejściowe mogą pochodzić ze standardowego wejścia lub pliku lub jako argument ciągu funkcji.
Możesz założyć, że dane wejściowe są dobrze uformowane - tj. Idealnie prostokątna siatka tekstu, o szerokości i wysokości co najmniej 1 znaku, zawierająca tylko
.iCMożesz opcjonalnie założyć, że po ostatnim wierszu znajduje się znak nowej linii (i może być jedna na wyjściu ).Możesz założyć, że rozmieszczenie skrzyń na wejściu jest zgodne z powyższymi zasadami. Nigdy nie będzie dwuznaczności, które skrzynie tworzą podwójne skrzynie.
W razie potrzeby można użyć dowolnych trzech odrębnych druku ASCII znaków w miejsce
.,Ci*. Nie możesz używać czegoś innego zamiast nowych linii.Wszystkie skrzynie są normalnymi skrzyniami. Nie uwięzione skrzynie lub skrzynie końcowe .
Punktacja
Zgłoszenie z najmniejszą liczbą bajtów wygrywa.
W przypadku wyzwania związanego z Minecraft, które jest nieco trudniejsze, spróbuj Nether Portal Detection .