电子游戏Minecraft就是要在构成虚拟世界的3D 整数格子中放置和移除不同类型的块。每个晶格点可以仅包含一个块,也可以为空(正式为“ air ”块)。在此挑战中,我们将只关注3D世界的一个水平2D平面和一种块:宝箱。
箱子让玩家存放物品。当两个箱子在同一水平面内正交相邻时,它们的纹理会链接在一起,形成容量为两倍的双箱子。没有比双胸大的东西了。没有三联箱,也没有四联箱。
仅当胸块的四个正交相邻点都为空时,或者如果正好包含一个尚未属于双胸的一部分的胸块时,才可以将其放置在空的网格点中。这些放置规则确保了哪个胸块链接在一起形成双胸永远不会有任何歧义。
例如,假设.
是一个空白空间并且C
是一个箱子:(数字也是空白空间,仅用于标识目的。)
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- 箱子可以放置在位置1,因为它的4个邻居是空的。
- 可以将胸部放置在位置2中,因为相邻的胸部还不是双胸部的一部分。
- 不能将箱子放在位置3,因为双箱子的形成方式会含糊不清。
- 无法将箱子放在位置4,因为相邻的箱子已经是双箱子的一部分。
- 可以在位置5放置一个箱子。对角相邻的双箱子不会影响任何东西。
假设超出网格的区域是空的,.
则将网格中的每个区域更改为一个*
是否可以在其中放置箱子的结果:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
当然,并不是所有的*
空间都可以同时被箱子占用,但是如果您只有一个箱子,则可以将其放置在任何一个箱子中。
挑战
编写一个程序和函数,该程序或函数接受.
和C
网格,如果可以在其中放置一个箱子,则将其全部更改.
为a *
,以打印或返回结果网格。
输入可以来自stdin或文件,也可以来自函数的字符串参数。
您可以假设输入格式正确-即一个完美的矩形文本网格,至少包含1个字符的宽度和高度,仅包含
.
和。C
您可以选择假设最后一行之后有换行符(并且输出中可能有一个换行符) )。您可以假设输入中的箱子排列与上述规则一致。关于哪个箱子形成双箱子永远不会有任何歧义。
如果需要,你可以使用任何三个不同的打印的ASCII到位的人物
.
,C
和*
。您不能使用其他方式代替换行符。
计分
字节最少的提交将获胜。
对于与Minecraft相关的挑战,它更具挑战性,请尝试Nether Portal Detection。