Fillomino es un rompecabezas en el que rellenas una cuadrícula con poliominós . Cada poliomino es un área de células contiguas. La representación de la cuadrícula muestra qué tamaño de poliomino cubre cada celda. Por ejemplo, un pentomino (5) se mostraría como 5
en cada una de las cinco celdas contiguas (ver más abajo). Dos poliominós del mismo tamaño no pueden compartir un borde, pero pueden hacerlo en diagonal.
Para cada juego, que está comenzado con una serie de Givens y debe rellenar las celdas restantes. Un ejemplo sencillo de rompecabezas y solución:
Su tarea: dado un rompecabezas cuadrado, resuélvalo y envíe la respuesta. La entrada puede ser a través de stdin, un argumento de línea de comando único o un archivo de texto. La entrada se dará como un número entero n
, seguido de n
líneas de n
dígitos cada uno. Las celdas vacías se darán como puntos ( .
). Para el ejemplo de rompecabezas anterior, sería:
5
3..66
5.4.6
.54.6
.1.6.
..312
La salida es el rompecabezas resuelto, dado en n
líneas de n
dígitos, a la consola o al archivo de texto:
33366
55446
55466
51462
33312
Si el rompecabezas no es válido, salida 0
. Un rompecabezas podría no ser válido si la entrada está mal formada o no hay solución. Si hay varias soluciones, puede generar una o todas ellas.
Dado que cada celda está representada por un solo dígito, todos los rompecabezas consistirán en tamaño de poliominós 9
y solo debajo. Si no es posible resolver sin poliominós más grandes, considérelo inválido.
Las respuestas válidas resolverán cualquier rompecabezas dado, no simplemente soluciones de salida para probar casos. Sin recursos externos, ya sea en línea o local. Si resulta que hay un idioma con una función incorporada de resolución de fillomino, no puede usarlo. En resumen, juega limpio .
Caso de prueba:
Entrada:
9
..21.3..5
.5...5..5
.1.44.334
...53.4..
2.3.3..5.
1.15.5.15
..45..1..
.24.53.53
....2....
Salida (una posible solución):
322133315
355445555
315443334
235531444
233135551
141535515
344553155
324553553
321223133
Recuerde que algunos poliominós no tienen números dados, y algunos tienen más de uno. Hay no una relación de uno a uno entre el número de Givens y el número de poliominós.
El puntaje es el código de golf estándar, el tamaño del programa en bytes.
fuente
Respuestas:
4882 caracteres - Java
No es una solución muy desarrollada (es decir, 4800 caracteres es mucho más) Podría jugarse un poco más de golf ya que todavía hay 1 o 2 líneas de impresión de depuración. Creo que todavía puedo reducir bastante en términos de código inútil / optimizado.
Como nunca había visto Polyominoes antes de esto, leí lo que son y, sin mirar a resolver los alrogitmos, acabo de inventar el mío (bastante lento).
Básicamente, usa mucho la recursividad ... Encuentra un Polyomino que está incompleto, intenta completarlo. Encuentra un espacio vacío, recorre 1-9 a través de todos los cuadrados en el bolsillo, establece ese bolsillo en ese valor. Si el bolsillo está completo, intenta encontrar otro bolsillo, luego se repite hasta terminar. No pude hacer que funcione para una cuadrícula de tamaño 9 ... Tengo al menos una optimización en mente que podría hacer que funcione dentro de un tiempo razonable para 9. Podría intentar ponerlo en práctica pronto.
fuente