O videogame Minecraft é sobre colocar e remover diferentes tipos de blocos na rede inteira 3D que compõe o mundo virtual. Cada ponto de rede pode conter exatamente um bloco ou estar vazio (um bloco " aéreo " oficialmente). Neste desafio, nos preocuparemos apenas com um plano 2D horizontal do mundo 3D e um tipo de bloco: baús .
Baús permitem que os jogadores armazenem itens. Quando dois baús são ortogonais adjacentes no mesmo plano horizontal, suas texturas se ligam e um baú duplo com o dobro da capacidade. Nada maior que um baú duplo pode ser feito; não há baús triplos nem quádruplos.
Um bloqueio torácico só pode ser colocado em um ponto de treliça vazio se seus quatro pontos ortogonais adjacentes estiverem todos vazios ou se exatamente um contiver um bloqueio torácico que ainda não faz parte de um baú duplo. Essas regras de posicionamento garantem que nunca haja ambiguidade sobre quais blocos de peito estão vinculados para formar baús duplos.
Por exemplo, suponha que .
haja espaço vazio e C
um baú: (os números também são espaço vazio e apenas para fins de identificação).
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Um baú pode ser colocado no ponto 1 porque seus 4 vizinhos estão vazios.
- Um baú pode ser colocado no ponto 2 porque o baú vizinho ainda não faz parte de um baú duplo.
- Um baú não pode ser colocado no ponto 3 porque haveria ambiguidade sobre como o baú duplo se forma.
- Um baú não pode ser colocado no ponto 4 porque o baú vizinho já faz parte de um baú duplo.
- Um baú pode ser colocado no ponto 5. O baú duplo na diagonal não afeta nada.
Assumindo que a área além da grade está vazia, alterar cada uma .
da grade para a *
se um baú puder ser colocado lá resulta:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
Nem todos os *
espaços podem ser ocupados com baús ao mesmo tempo, é claro, mas se você tivesse apenas um baú, ele poderia ser colocado em qualquer um deles.
Desafio
Escreva um programa ou função que leva em um .
e C
grade, e muda a cada .
um *
se um peito poderia ser colocado lá, imprimir ou retornar a grade resultante.
A entrada pode ser de stdin ou um arquivo ou como um argumento de string para uma função.
Você pode presumir que a entrada está bem formada - ou seja, uma grade de texto perfeitamente retangular, com pelo menos 1 caractere de largura e altura, contendo apenas
.
eC
Opcionalmente, você pode assumir que há uma nova linha à direita após a última linha (e pode haver uma na saída )Você pode assumir que o arranjo de baús na entrada é consistente com as regras acima. Nunca haverá ambiguidades sobre quais baús formam baús duplos.
Se desejar, você pode usar qualquer uma das três distintas ASCII imprimíveis caracteres no lugar de
.
,C
e*
. Você não pode usar outra coisa no lugar de novas linhas.Todos os baús são baús normais. Baús não presos ou baús ender .
Pontuação
O envio com o menor número de bytes vence.
Para um desafio relacionado ao Minecraft um pouco mais desafiador, tente o Nether Portal Detection .