Questi rettangoli possono riempire uno spazio rettangolare?
Dato un mucchio di rettangoli, ti viene chiesto se possono essere disposti o meno per riempire uno spazio rettangolare.
Specifiche
Dato un mucchio di m x n
rettangoli arbitrari ; 0 <= m, n <= 1000
, determinare se è possibile disporle o meno in modo che coprano esattamente un'area rettangolare senza fori o sovrapposizioni. I rettangoli non possono essere ruotati e ogni rettangolo può essere posizionato una sola volta.
Ingresso
L'input per questo è molto flessibile, purché l'input fornisca una sorta di elenco di dimensioni a 2 spazi. Ad esempio, entrambi i seguenti sono validi:
Separato da spazio, ritorno
1 2
1 5
4 5
3 6
Elenco di dimensioni
[[1, 2], [1, 5], [4, 5], [3, 6]]
Produzione
Qualsiasi tipo di valore vero / falso come vero / falso, 0/1, T / F, vero / falso, ecc. Se si intende utilizzare un metodo di output non molto ovvio, specificare nella risposta.
Esempi
Caso di prova 1
Ingresso:
1 1
1 5
2 6
Output:
true
(o qualcosa di simile)
Come organizzarlo:
XYYYYY
ZZZZZZ
ZZZZZZ
Caso di prova 2
Ingresso:
1 1
2 2
Output:
false
(o qualcosa di simile)
Spiegazione: Diventa ovvio che non è possibile disporre due quadrati di dimensioni diverse e allineare i bordi.
Caso di prova 3
Ingresso:
1 1
1 2
1 2
2 1
2 1
Output:
true
(o qualcosa di simile) Come organizzarlo:
AAB
DEB
DCC
Come sottolineato da @ETHProductions, per tutti gli altri casi di test, puoi continuare a combinare rettangoli con una lunghezza del bordo comune fino a quando non hai un solo rettangolo, quindi questo test è solo per rompere qualsiasi codice che utilizza questa idea.
Caso di prova 4
Ingresso:
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
Output:
true
(o qualcosa di simile)
Come organizzarlo:
AAABBBBEE
AAACCDDDD
FFFFFGGGH
FFFFFGGGH
IIIJJKKLH
IIIMMMMMH
Nota : non è necessario indicare come organizzarlo, è sufficiente determinare se non può essere organizzato.
Questo è il golf del codice, quindi vince la risposta più breve in byte! Accetterò la risposta più breve a partire dal 14 gennaio, ma mi sento libero di inviare le risposte più tardi poiché posso ancora dare voti! :)
Buon golf!
~ AL
PS Se sai quale tag dovrebbe essere applicato a questo problema, ti preghiamo di aggiungerlo, non ho assolutamente idea di cosa mettere come tag diverso da code-golf.
EDIT : il tuo programma dovrebbe essere in grado di elaborare fino a 25 rettangoli, in massimo 10 secondi su un computer decente (sarò abbastanza flessibile su questa regola).
EDIT : ho prorogato la scadenza di accettazione della presentazione fino all'ultimo giorno dell'anno, ma dubito che avrò una risposta entro ...
EDIT : ho prorogato il termine di accettazione della presentazione di 2 settimane, quindi se non arrivano più risposte entro allora, la risposta C corrente verrà accettata! :)
[[1, 2], [2, 1], [1, 1], [1, 2], [2, 1]]
(che può essere organizzato ABB ACD EED
). Potresti voler aggiungere questo semplice test case.