Dadas dos formas contiguas de la misma área, determine la forma óptima de dividir la primera forma en un número mínimo de segmentos contiguos de modo que puedan reorganizarse para formar la segunda forma. En otras palabras, encuentre el número mínimo de segmentos requeridos que pueden formar ambas formas.
"Contiguo" significa que se puede llegar a cada cuadrado de la forma desde cualquier otro cuadrado caminando a través de los bordes. Se permite que las formas y los segmentos tengan agujeros.
"Reorganizar" significa que mueve los segmentos; puedes traducirlos, rotarlos y reflejarlos.
Las formas están contenidas en una cuadrícula; en otras palabras, cada forma consiste en una colección de cuadrados unitarios unidos por sus esquinas / bordes.
Especificaciones de entrada
La entrada se proporcionará en un formato razonable: lista de puntos, conjunto de cadenas que representan cada cuadrícula, etc. También puede tomar los tamaños de la cuadrícula si se solicita. Las cuadrículas tendrán las mismas dimensiones y se garantiza que las dos formas tendrán la misma área, y el área será positiva.
Especificaciones de salida
La salida debería ser solo un entero positivo. Tenga en cuenta que siempre habrá una respuesta positiva porque en el peor de los casos, simplemente divide las formas en N
cuadrados unitarios.
Ejemplos
Los ejemplos se presentan como una cuadrícula que .
representa un espacio en blanco y que #
representa parte de la forma.
Caso 1
Entrada
.....
.###.
.#.#.
.###.
.....
###..
..#..
..#..
..###
.....
Salida
2
Explicación
Puedes dividirlo en dos bloques en forma de L de 4:
#
###
Caso 2
Entrada
#...
##..
.#..
.##.
.##.
####
....
....
Salida
2
Explicación
Puedes dividir las formas así:
A...
AA..
.A.
.BB.
.AA.
BBAA
....
....
También puedes hacer:
A...
AA..
.B..
.BB.
.AB.
AABB
....
....
Caso 3
Entrada
#....#
######
.####.
.####.
Salida
2
Explicación
A....B
AAABBB
.ABBB.
.AAAB.
(Este caso de prueba demuestra la necesidad de rotar / reflejar formas para una salida óptima)
Caso 4
Entrada
.###.
..#..
.##..
.##..
Salida
2
Explicación
No importa cómo seleccione los bloques, seleccionar un 2x1 de la primera forma necesariamente evita que los otros dos se agrupen; por lo tanto, puede usar un 2x1 y dos 1x1s. Sin embargo, (gracias @Jonah), puede dividirlo en una forma de L de 3 bloques y un solo cuadrado de esta manera:
.AAB.
..A..
.AA..
.BA..