El juego
Recientemente, gran parte de mi tiempo ha sido ocupado por un juego adictivo en mi teléfono, llamado Logic Dots, que me inspiró a escribir este desafío. Es más fácil explicar las reglas si te muestro la pantalla del juego, así que aquí hay una captura de pantalla de un rompecabezas sin resolver y resuelto:
Ahora aquí, hay tres cosas principales a tener en cuenta.
- El tablero de juego (la cuadrícula de cuadrados de 4x4 en el centro)
- Las formas requeridas (los puntos vinculados en la segunda barra desde la parte superior, debajo de la partitura y el menú, etc.), que son todas líneas, o
a
por 1 rectángulos - Los números sobre las filas y columnas, que indican cuántos puntos deben estar en la columna, para una solución
El objetivo del juego es ajustar las formas requeridas en la cuadrícula. Puede rotar las formas, pero no pueden entrar en diagonal.
En la solución, observe que todas las formas se crean exactamente una vez (porque solo están en las formas requeridas una vez), y en este caso son todas horizontales pero también pueden ser verticales. Los cuadrados rellenos de color rosa indican cuadrados no utilizados.
Aquí hay una cuadrícula más grande y un poco más complicada:
Observe que en el rompecabezas sin resolver, ya hay algunos cuadrados rellenados. Los cuadrados en gris significan cuadrados bloqueados en los que NO PUEDE colocar un punto. Los puntos con colas le indican que hay un punto en ese punto, y se vincula con al menos un punto más en la dirección de la cola, pero no en cualquier otra dirección (incluida la dirección opuesta).
Notación
Para el resto de esta publicación, me referiré a la pizarra usando los siguientes símbolos:
- <,>, ^, v - Significa un punto colocado previamente con una cola que se extiende en la dirección del punto
- * - Significa un punto. Si se proporciona en una cuadrícula sin resolver (entrada), es una forma individual. Si está en la salida, entonces está conectado a los puntos a su alrededor.
- #: Significa un cuadrado de cuadrícula bloqueado (donde no puede colocar un punto)
- -, | (guión y barra): significa un punto con una cola derecha e izquierda, y un punto con una cola hacia arriba y hacia abajo respectivamente
- ** (carácter de espacio) - ** Significa un espacio vacío
Usando estos símbolos, el último caso de ejemplo (sin resolver) se puede representar de la siguiente manera:
<
#
^ #
Y la solución se puede representar como:
*< * *
*
*
* *
* *#*
^ # *
Tenga en cuenta que no hay dos formas que puedan tocarse horizontal, vertical o diagonalmente , por lo que el siguiente caso no es válido:
***
**
**
Desafío
Su desafío es resolver cualquier rompecabezas de puntos lógicos, desde 4x4 hasta 9x9 inclusive. Recibirá cuatro líneas de entrada, luego el tablero de juego. Las líneas serán las siguientes:
- Primera línea, Formas: las formas a buscar, cada una dada en la forma
sizexquantity
(por ejemplo,3x2
para dos formas de longitud tres) y separadas por un espacio. Línea de ejemplo:3x1 2x1 1x1
- 2da línea, Columnas: una lista separada por espacios del recuento de puntos requerido para cada columna. Línea de ejemplo:
1 1 2 2
- Tercera línea, Filas: una lista separada por espacios del recuento de puntos requerido para cada fila. Línea de ejemplo:
3 0 3 0
- 4ta línea, tamaño de la placa: un número entero único, el tamaño de la placa,
B
Luego se da el tablero, y son B
líneas de entrada que representan el tablero usando la notación mencionada anteriormente. Por ejemplo, la entrada completa para el último caso de ejemplo es la siguiente:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Su programa generará la placa resuelta, en la misma notación. La salida correspondiente para la entrada anterior es la siguiente:
** * *
*
*
* *
* *#*
* # *
Tenga en cuenta que un tablero de juego puede tener múltiples soluciones. En este caso, solo genera una solución válida. Además, su programa debe generar una solución correcta en 10 segundos en una computadora de escritorio razonable para una cuadrícula complicada de 10x10.
Este es el código de golf, por lo que gana menos bytes.
Casos de prueba
Entrada 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Salida 1
*** *
***#
#
* * *
Entrada 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Salida 2
* * *
*
* *
* #
* *
Entrada 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Salida 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(esto debería ser al principio, no se pierde casi al final, pero de todos modos ...)