У відеоігри Minecraft все йде про розміщення та видалення різних типів блоків у цілій 3D- решітці, яка складає віртуальний світ. Кожна точка решітки може містити рівно один блок або бути порожньою (" повітряний " блок офіційно). У цьому виклику ми будемо стосуватися лише однієї горизонтальної двовимірної площини тривимірного світу та одного типу блоку: скрині .
Скрині дозволяють гравцям зберігати речі. Коли дві комоди ортогонально сусідять в одній горизонтальній площині, їх текстури з’єднуються і утворюється подвійний комод з подвійною місткістю. Не можна зробити нічого більшого, ніж подвійний комод; немає потрійних скринь чи чотириразових скринь.
Грудний блок може бути розміщений у порожній точці решітки лише у тому випадку, якщо чотири ортогонально суміжні точки є порожніми або якщо саме одна містить грудний блок, який вже не є частиною подвійної скрині. Ці правила розміщення гарантують, що ніколи не може бути двозначності щодо того, які грудні блоки пов'язують, щоб утворити подвійні скрині.
Наприклад, припустимо, що .
це порожній простір і C
є скринькою: (Цифри також порожні місця та просто для ідентифікації).
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Скриню можна розмістити в місці 1, оскільки 4 сусідки порожні.
- Скриня може бути розміщена у місці 2, оскільки сусідня скриня не є (ще) частиною подвійної скрині.
- Скриня не може бути поставлена в місці 3, тому що існує двозначність щодо того, як утворюється подвійна скриня.
- Скриня не може бути розміщена в місці 4, оскільки сусідня скриня вже є частиною подвійної скрині.
- Скриня може бути розміщена на місці 5. Діагонально сусідня подвійна скриня нічого не впливає.
Якщо припустити, що область поза сіткою порожня, змінюючи кожну .
в сітці на a, *
якщо там можна розмістити скриню:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
Не всі *
простори можуть бути одночасно зайняті комодами, але якщо у вас була лише одна скриня, її можна розмістити в будь-якому з них.
Виклик
Напишіть програму або функцію, яка займає а .
та C
сітку, і змініть кожен .
на a, *
якщо туди можна було розмістити комод, надрукувавши або повернувши отриману сітку.
Введення може бути з stdin або файлу або як аргумент рядка функції.
Ви можете припустити, що вхід добре сформований - тобто ідеально прямокутна сітка тексту, щонайменше 1 символ у ширину та висоту, містить лише
.
таC
ви, при бажанні, можете припустити, що після останнього рядка є зворотний новий рядок (а у виході може бути один ).Ви можете припустити, що розташування комодів на вході відповідає правилам, наведеним вище. Ніколи не буде сумнівів щодо того, які скрині утворюють подвійні скрині.
При бажанні, ви можете використовувати будь-які три різних друкуються ASCII символи замість
.
,C
і*
. Ви можете використовувати щось інше замість нових рядків.Усі скрині - це звичайні скрині. Не захоплені комоди чи вічні скрині .
Оцінка балів
Виграє подання з найменшими байтами .
Для виклику, пов'язаного з Minecraft, це трохи складніше, спробуйте виявлення порталу Nether .