El videojuego Minecraft se trata de colocar y eliminar diferentes tipos de bloques en la red de enteros 3D que conforma el mundo virtual. Cada punto de la red puede contener exactamente un bloque o estar vacío (un bloque " aéreo " oficialmente). En este desafío, solo nos ocuparemos de un plano horizontal 2D del mundo 3D y un tipo de bloque: cofres .
Los cofres permiten a los jugadores almacenar artículos. Cuando dos cofres son adyacentes ortogonalmente en el mismo plano horizontal, sus texturas se unen y se forma un cofre doble con el doble de capacidad. No se puede hacer nada más grande que un cofre doble; no hay cofres triples ni cofres cuádruples.
Un bloque de cofre solo se puede colocar en un punto de celosía vacío si sus cuatro puntos adyacentes ortogonalmente están todos vacíos, o si exactamente uno contiene un bloque de cofre que aún no es parte de un cofre doble. Estas reglas de colocación aseguran que nunca haya ambigüedad sobre qué bloques de cofres se vinculan para formar cofres dobles.
Por ejemplo, supongamos que .
es un espacio vacío y C
es un cofre: (Los números también son espacios vacíos y solo con fines de identificación).
.......C..
.1.C2.C3..
........5C
.CC4..CC..
..........
- Se puede colocar un cofre en el lugar 1 porque sus 4 vecinos están vacíos.
- Se puede colocar un cofre en el lugar 2 porque el cofre vecino no es (todavía) parte de un cofre doble.
- No se puede poner un cofre en el lugar 3 porque habría ambigüedad sobre cómo se forma el cofre doble.
- No se puede colocar un cofre en el lugar 4 porque el cofre vecino ya es parte de un cofre doble.
- Se puede colocar un cofre en el lugar 5. El doble cofre adyacente en diagonal no afecta nada.
Suponiendo que el área más allá de la cuadrícula esté vacía, cambiar cada una .
de las cuadrículas a *
si se pudiera colocar un cofre allí resulta en esto:
******.C**
***C**C.**
*..***..*C
.CC.*.CC.*
*..***..**
No todos los *
espacios se pueden ocupar con cofres al mismo tiempo, por supuesto, pero si solo tuviera un cofre, podría colocarse en cualquiera de ellos.
Desafío
Escriba un programa o función que abarque una cuadrícula .
y C
, y cambie cada uno .
a *
si se puede colocar un cofre allí, imprimiendo o devolviendo la cuadrícula resultante.
La entrada puede ser desde stdin o un archivo o como un argumento de cadena a una función.
Puede suponer que la entrada está bien formada, es decir, una cuadrícula de texto perfectamente rectangular, de al menos 1 carácter de ancho y alto, que solo contiene
.
yC
, opcionalmente, puede suponer que hay una nueva línea final después de la última fila (y puede haber una en la salida )Puede suponer que la disposición de los cofres en la entrada es coherente con las reglas anteriores. Nunca habrá ambigüedades sobre qué cofres forman cofres dobles.
Si lo desea, puede utilizar cualquiera de los tres distintos ASCII imprimibles caracteres en lugar de
.
,C
, y*
. No puede usar otra cosa en lugar de nuevas líneas.Todos los cofres son cofres normales. No cofres atrapados o cofres de ender .
Puntuación
El envío con la menor cantidad de bytes gana.
Para un desafío relacionado con Minecraft que es un poco más desafiante, prueba la detección de portal abisal .