Considere una cuadrícula bidimensional rectangular donde cada celda puede estar vacía ( .
) o llena ( 0
).
p.ej
..00....
0000....
.00000..
000...00
..000000
000.00..
La cuadrícula se considera infinita, todas las celdas fuera de la región representada están vacías.
El objetivo es cubrir los espacios llenos y dejar los espacios vacíos abiertos utilizando un conjunto de 7 ladrillos de formas distintas que ocupan 4 celdas (2 × 2) de la cuadrícula.
Estos son los 7 ladrillos:
Bloques - 1 variante
11 11
Losas - 2 variantes
.. 22
33 ..
Escaleras - 4 variantes
.4 44
5. 55
66 .6
77 7.
Estos ladrillos siempre deben alinearse con una cuadrícula cuyas celdas son dos veces más anchas y altas que las celdas de la cuadrícula de entrada. Cada ladrillo solo puede ocupar una celda de esta cuadrícula más grande, pero la cuadrícula más pequeña se puede traducir (desplazada hacia arriba, abajo, izquierda, derecha) debajo de la cuadrícula más grande para dar más opciones para encontrar una cubierta. Ni las rejillas ni los ladrillos individuales pueden rotarse.
Entonces, una forma de cubrir (también conocido como resolver) el ejemplo anterior es así:
..11....
2211....
.47733..
447...22
..771133
227.11..
(Los ladrillos vecinos idénticos aún pueden causar ambigüedad, pero la identificación cuidadosa de la cuadrícula más grande lo resuelve).
Una solución inválida para
000000
000000
es
566774
556744
porque no todos los ladrillos se alinean con la cuadrícula más grande ni solo ocupan una celda de ella.
Una solución válida aquí es 3 bloques seguidos:
111111
111111
Y otra solución válida involucra 6 losas:
......
222222
333333
......
Tenga en cuenta que algunas cuadrículas de entrada tienen múltiples soluciones .
Una solución inválida para
00.00
00...
es
11.33
11...
porque los ladrillos no se alinean con la cuadrícula más grande. La losa necesitaría moverse hacia la izquierda o hacia la derecha por una, pero luego, por supuesto, la cubierta estaría incompleta. Esta cuadrícula de entrada no tiene solución .
Desafío
Escriba un programa que tome (a través de stdin / línea de comando) un bloque rectangular de texto de .
'sy 0
' que representa una cuadrícula que se cubrirá.
Si hay una solución válida recubrimiento, impresión (a través de stdout) cualquier una solución de la misma manera que anteriormente, en sustitución de todos 0
's con el apropiado 1
a través de 7
ladrillos.
Si no hay solución, su programa no debería generar nada, simplemente finalizar en silencio normalmente.
Notas
La entrada y la salida no necesitan tener las mismas dimensiones rectangulares. Su salida puede tener filas y / o columnas extrañas de todos
.
(siempre que no invaliden la solución).También está bien recortar filas y columnas de todos
.
si no afecta los espacios rellenos. p.ej222222 333333
es una solución válida para
000000 000000
Por el contrario, las dos columnas vacías
00..00
no se pudieron eliminar, ya que eso desorganizaría los espacios rellenos.Opcionalmente, puede suponer que la entrada tiene una nueva línea final. Una nueva línea final en la salida también está bien, incluso en el caso de que no haya solución.
Las cuadrículas que están completamente vacías (todas
.
) y la cuadrícula trivial 0 × 0 no son casos de entrada de los que deba preocuparse. Pero la0
cuadrícula 1 × 1 es, al igual que todas las otras cuadrículas que contienen al menos una0
. (¡No puede suponer que el ancho o la altura de la cuadrícula de entrada es par!)En lugar de un programa, puede escribir una función que tome la entrada como un argumento de cadena e imprima la salida normalmente o la devuelva como una cadena. Cualquier valor falso puede ser devuelto si no hay solución.
Puede usar 9 caracteres ASCII imprimibles distintos en lugar de
.
0
1
2
3
4
5
6
7
. ¡Solo asegúrese de decir cuáles fueron sus sustituciones! Las nuevas líneas deben permanecer como están.
Puntuación
El código más corto en bytes gana. Tiebreaker es la publicación más votada.
Este desafío se inspiró en bloques , losas y escaleras en Minecraft , que siguen las mismas reglas descritas aquí. Si disfrutas de PPCG y Minecraft, es posible que desees consultar el servidor de Minecraft PPCG .