Esses retângulos podem preencher um espaço retangular?
Dado um monte de retângulos, você será perguntado se eles podem ou não ser organizados para preencher um espaço retangular.
Especificações
Dado um monte de m x n
retângulos arbitrários ; 0 <= m, n <= 1000
, determine se é possível ou não organizá-los para que cubram exatamente uma área retangular, sem furos ou sobreposições. Os retângulos não podem ser girados e cada retângulo pode ser colocado apenas uma vez.
Entrada
A entrada para isso é muito flexível, desde que a entrada forneça algum tipo de lista de dimensões com 2 espaços. Por exemplo, ambos os seguintes são válidos:
Separado pelo espaço, retorno
1 2
1 5
4 5
3 6
Lista de dimensões
[[1, 2], [1, 5], [4, 5], [3, 6]]
Saída
Qualquer tipo de valor verdadeiro / falso, como verdadeiro / falso, 0/1, T / F, Verdadeiro / Falso etc. Se você usar um método de saída que não seja muito óbvio, especifique na sua resposta.
Exemplos
Caso de teste 1
Entrada:
1 1
1 5
2 6
Saída:
true
(ou algo semelhante)
Como organizar:
XYYYYY
ZZZZZZ
ZZZZZZ
Caso de teste 2
Entrada:
1 1
2 2
Saída:
false
(ou algo semelhante)
Explicação: Torna-se óbvio que você não pode organizar dois quadrados de tamanhos diferentes e alinhar suas bordas.
Caso de teste 3
Entrada:
1 1
1 2
1 2
2 1
2 1
Saída:
true
(ou algo semelhante) Como organizar:
AAB
DEB
DCC
Como o @ETHProductions apontou, para todos os outros casos de teste, você pode continuar combinando retângulos com um comprimento de borda comum até ter apenas um retângulo; portanto, este caso de teste é apenas para quebrar qualquer código que use essa idéia.
Caso de teste 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
Saída:
true
(ou algo semelhante)
Como organizar:
AAABBBBEE
AAACCDDDD
FFFFFGGGH
FFFFFGGGH
IIIJJKKLH
IIIMMMMMH
Nota : Você não precisa declarar como organizá-lo, apenas precisa determinar se não pode ser arranjado.
Isso é código de golfe, então a resposta mais curta em bytes vence! Aceitarei a resposta mais curta a partir de 14 de janeiro, mas fique à vontade para enviar respostas depois disso, pois ainda posso dar votos! :)
Feliz golfe!
~ AL
PS Se você souber qual tag deve ser aplicada a esse problema, adicione-a, não faço a menor idéia do que colocar como tag, exceto code-golf.
Edição : seu programa deve ser capaz de processar até 25 retângulos, em no máximo 10 segundos em um computador decente (eu serei bastante flexível com essa regra).
EDIT : Estendi o prazo de aceitação de envio para o último dia do ano, mas duvido que receberei uma resposta até então ...
EDIT : estendi o prazo de aceitação de envio em 2 semanas; portanto, se não houver mais respostas até então, a resposta C atual será aceita! :)
[[1, 2], [2, 1], [1, 1], [1, 2], [2, 1]]
(que pode ser arranjado ABB ACD EED
). Você pode adicionar este caso de teste simples.