Este desafío se basa en el juego Layerz.
Dado, en stdin o como argumento de función, una matriz rectangular 2D de celdas donde cada celda contiene un espacio en blanco (puede optar por usar 0s en lugar de espacios en blanco sin penalización), un 1, un 2, un 3 o un 4 ; encuentre una manera de dividirlo en regiones válidas (como se define a continuación) de modo que cada celda no vacía esté contenida exactamente por una región. Luego, envíe la solución encontrada en cualquier formato razonable. Si no hay solución, deténgase sin producir salida o dé un solo valor de falsey y luego deténgase.
Cualquiera de los siguientes constituye una región válida:
- Una sola celda que contiene un 1
- Una celda que contiene un 2 y exactamente uno de sus vecinos ortogonales no en blanco
- Una celda que contiene un 3 y exactamente dos de sus vecinos ortogonales no en blanco
- Una celda que contiene un 4 y exactamente tres de sus vecinos ortogonales no en blanco
Este es el código de golf , por lo que la respuesta válida más corta, en bytes, gana.
Algunos casos de prueba:
1. Una bastante trivial:
Y esta es la solución, con cada región en un color diferente:
2. Una más interesante
Esta tiene más de una solución, pero esta es una de ellas:
3. Una más pequeña, que contenga espacios en blanco, que no tenga ninguna solución (dependiendo de si usas una de las dos para "capturar" las tres, o las tres para tomar dos de las dos, te queda un par de dos no adyacentes [y por lo tanto no agrupables] o un solo dos por sí solo):
Debido a que esta grilla no tiene soluciones, su programa debería detenerse sin producir ningún resultado cuando se le da esta grilla.
4. Sin embargo, esta (con los 2 primeros desplazados una celda a la izquierda) tiene una solución:
Solución:
(La parte inferior derecha 2 se usa para "capturar" la 3)
5. Porque necesitábamos un caso de prueba con cuatro patas:
Una solución:
fuente
4
s si son entradas válidas.Respuestas:
Sé que este desafío tiene más de un año, pero acabo de encontrarlo en "sin respuesta" y me pareció bastante interesante.
Suponiendo que el número de la celda "raíz" es el único significativo en cada región (deducible de los ejemplos), aquí está mi solución de retroceso:
Python 3 ,
355351349 bytesPruébalo en línea!
El formato de entrada es una lista 2D de enteros, espacios en blanco como cero, y el formato de salida también es una lista 2D de enteros que representan una región por número. El número de región comienza en uno; cero está reservado para celdas en blanco (como en la entrada). Si la entrada dada no se puede resolver, la función devuelve un solo cero (valor falso).
Por ejemplo, el caso de prueba 5 se ingresa como
y la salida es
Sin golf, con comentarios:
Pruébalo en línea!
Nota: Este es un caso especial de Set Packing que se sabe que es NP-complete. Este problema específico tiene un tamaño de conjunto limitado (máx. 4) y existen algoritmos de aproximación para encontrar el empaque de conjunto "bueno" en tiempo polinómico, pero no garantizan el empaque de conjunto máximo posible (que es estrictamente necesario en este problema).
fuente