Entrada
Su entrada en este desafío es una lista de pares enteros. Representan las esquinas sudoeste de cuadrados unitarios en el plano, y la lista representa su unión como un subconjunto del plano. Por ejemplo, la lista
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
representa el conjunto de color rojo en esta imagen:
Salida
Su salida es una lista de cuádruples enteros, que representan subconjuntos rectangulares del plano. Más explícitamente, un cuádruple (x,y,w,h)
repite un rectángulo de ancho w > 0
y alto h > 0
cuya esquina suroeste está (x,y)
. Los rectángulos deben formar una cobertura exacta de la región de entrada, en el sentido de que cada uno de los cuadrados unitarios es un subconjunto de algún rectángulo, cada rectángulo es un subconjunto de la región y dos rectángulos pueden solaparse solo en sus bordes. Para prohibir soluciones triviales, la cubierta no debe contener dos rectángulos que puedan fusionarse en un rectángulo más grande.
Por ejemplo, la lista
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
representa la cobertura legal
de la región anterior, mientras que la cobertura dada por
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
es ilegal, ya que los cuadrados vecinos 1 por 1 podrían fusionarse:
Reglas
Puedes dar un programa completo o una función. El formato preciso de la entrada y salida no es importante, dentro de lo razonable. El conteo de bytes más corto gana, y las lagunas estándar no se permiten. Se le recomienda que proporcione una explicación de su algoritmo y algunos resultados de ejemplo.
Casos de prueba
Una región en forma de U:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
Un gran triángulo:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
Un cuadrado con agujeros:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
Regiones desconectadas:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
Verificador
Use este programa Python 2 para verificar su solución. Toma de STDIN una lista de tuplas (la entrada) y una lista de cuádruples (su salida), separadas por una coma.
También escribí este programa Python 2 para generar las imágenes, y también puedes usarlo. Toma de STDIN una lista de tuplas o cuádruples, y produce un archivo llamado out.png
. Requiere la biblioteca PIL. También puede cambiar el tamaño de las celdas de la cuadrícula y el ancho de las líneas de ceñido, si lo desea.