¿Pueden estos rectángulos llenar un espacio rectangular?
Dado un montón de rectángulos, se le pregunta si se pueden organizar o no para llenar un espacio rectangular.
Especificaciones
Dado un montón de m x n
rectángulos arbitrarios ; 0 <= m, n <= 1000
, determine si es posible o no organizarlos de modo que cubran exactamente un área rectangular sin agujeros ni superposiciones. Los rectángulos no se pueden girar, y cada rectángulo solo se puede colocar una vez.
Entrada
La entrada para esto es muy flexible, siempre que la entrada proporcione algún tipo de lista de dimensiones de 2 espacios. Por ejemplo, los dos siguientes son válidos:
Separado por espacio, retorno
1 2
1 5
4 5
3 6
Lista de dimensiones
[[1, 2], [1, 5], [4, 5], [3, 6]]
Salida
Cualquier tipo de valores verdadero / falso como verdadero / falso, 0/1, T / F, Verdadero / Falso, etc. Si va a utilizar un método de salida que no sea muy obvio, especifique en su respuesta.
Ejemplos
Caso de prueba 1
Entrada:
1 1
1 5
2 6
Salida:
true
(o algo similar)
Cómo organizarlo:
XYYYYY
ZZZZZZ
ZZZZZZ
Caso de prueba 2
Entrada:
1 1
2 2
Salida:
false
(o algo similar)
Explicación: Resulta obvio que no puede organizar dos cuadrados de diferentes tamaños y alinear sus bordes.
Caso de prueba 3
Entrada:
1 1
1 2
1 2
2 1
2 1
Salida:
true
(o algo similar) Cómo organizarlo:
AAB
DEB
DCC
Como señaló @ETHProductions, para todos los demás casos de prueba, puede seguir combinando rectángulos con una longitud de borde común hasta que tenga solo un rectángulo, por lo que este caso de prueba es solo para romper cualquier código que use esta idea.
Caso de prueba 4
Entrada:
3 2
4 1
2 1
4 1
2 1
5 2
3 2
1 4
3 2
2 1
2 1
1 1
5 1
Salida:
true
(o algo similar)
Cómo organizarlo:
AAABBBBEE
AAACCDDDD
FFFFFGGGH
FFFFFGGGH
IIIJJKKLH
IIIMMMMMH
Nota : No necesita indicar cómo organizarlo, solo necesita determinar si no se puede organizar.
Este es el código de golf, por lo que gana la respuesta más corta en bytes. Aceptaré la respuesta más corta a partir del 14 de enero, ¡pero siéntase libre de enviar respuestas más tarde ya que todavía puedo dar votos a favor! :)
¡Feliz golf!
~ AL
PD: Si sabe qué etiqueta debe aplicarse a este problema, agréguela, no tengo absolutamente ninguna idea de qué poner como etiqueta, aparte de code-golf.
EDITAR : Su programa debería poder procesar hasta 25 rectángulos, en un máximo de 10 segundos en una computadora decente (seré bastante flexible en esta regla).
EDITAR : he extendido el plazo de aceptación de envío hasta el último día del año, pero dudo que obtenga una respuesta para entonces ...
EDITAR : he extendido el plazo de aceptación de envío en 2 semanas, por lo que si no hay más respuestas para entonces, ¡se aceptará la respuesta C actual! :)
[[1, 2], [2, 1], [1, 1], [1, 2], [2, 1]]
(que se puede arreglar ABB ACD EED
). Es posible que desee agregar este caso de prueba simple.