Видеоигра Minecraft - это все о размещении и удалении различных типов блоков в трехмерной целочисленной решетке, которая составляет виртуальный мир. Каждая точка решетки может содержать ровно один блок или быть пустой (официально « воздушный » блок). В этой задаче мы будем иметь дело только с одной горизонтальной двухмерной плоскостью трехмерного мира и одним типом блока: сундуками .
Сундуки позволяют игрокам хранить предметы. Когда два сундука ортогонально соседствуют в одной и той же горизонтальной плоскости, их текстуры соединяются, и образуется двойной сундук с удвоенной емкостью. Ничто больше, чем двойной сундук, не может быть сделано; нет ни тройных сундуков, ни четырехместных сундуков.
Блок сундуков может быть помещен в пустую точку решетки только в том случае, если все четыре ортогонально смежных точки пусты, или если ровно одна содержит блок сундуков, который еще не является частью двойного сундука. Эти правила размещения гарантируют, что никогда не может быть никакой двусмысленности относительно того, какие блоки сундуков соединяются для образования двойных сундуков.
Например, предположим, что .
это пустое пространство и C
сундук: (Числа также являются пустым пространством и только для целей идентификации.)
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Сундук может быть размещен в месте 1, потому что его 4 соседа пусты.
- Сундук может быть размещен в месте 2, потому что соседний сундук (пока) не является частью двойного сундука.
- Сундук не может быть помещен в точку 3, потому что было бы двусмысленность относительно того, как формируется двойной сундук.
- Сундук не может быть помещен в точку 4, потому что соседний сундук уже является частью двойного сундука.
- Сундук может быть размещен в пятом месте. Соседний по диагонали двойной сундук ни на что не влияет.
Предполагая, что область за сеткой пуста, изменение каждого .
в сетке на a, *
если сундук может быть размещен там, приводит к этому:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
Конечно, не все *
пространства могут быть заняты сундуками одновременно, но если бы у вас был только один сундук, он мог бы быть помещен в любой из них.
Вызов
Написать программу или функцию , которая принимает в .
и C
сетки, и изменяется каждый .
к *
если грудь может быть помещен там, печати или возврата полученной сетки.
Ввод может быть из стандартного ввода или файла или в виде строкового аргумента функции.
Вы можете предположить, что входные данные правильно сформированы - то есть идеально прямоугольная сетка текста, по крайней мере, 1 символ шириной и высотой, содержит только
.
иC
Вы можете дополнительно предположить, что после последней строки есть завершающий символ новой строки (и может быть один в выходных данных). ).Вы можете предположить, что расположение сундуков на входе соответствует приведенным выше правилам. Там никогда не будет двусмысленности о том, какие сундуки образуют двойные сундуки.
При желании, вы можете использовать любые три различных печатаемые ASCII символы вместо
.
,C
и*
. Вы не можете использовать что-то другое вместо новых строк.Все сундуки нормальные сундуки. Сундуки не в ловушке или сундуки .
счет
Представление с наименьшим количеством байтов выигрывает.
Для более сложной задачи, связанной с Minecraft, попробуйте Nether Portal Detection .