Чи можуть ці прямокутники заповнити прямокутний простір?
Враховуючи купу прямокутників, вас запитують, чи можна їх розташувати для заповнення прямокутного простору.
Технічні характеристики
Дано купу довільних m x n
прямокутників; 0 <= m, n <= 1000
, визначте, чи можна розташувати їх так, щоб вони покривали саме прямокутну область без жодних отворів чи перекриттів. Прямокутники не можна обертати, і кожен прямокутник може бути розміщений лише один раз.
Вхідні дані
Вхід для цього дуже гнучкий, якщо вхід дає певний перелік 2-пробільних розмірів. Наприклад, обидві наведені нижче дії:
Відокремлений пробілом, поверненням
1 2
1 5
4 5
3 6
Список розмірів
[[1, 2], [1, 5], [4, 5], [3, 6]]
Вихідні дані
Будь-які істинні / хибні значення, такі як true / false, 0/1, T / F, True / False тощо. Якщо ви збираєтесь використовувати метод виведення, що не дуже очевидно, вкажіть у своїй відповіді.
Приклади
Тестовий випадок 1
Вхід:
1 1
1 5
2 6
Вихід:
true
(або щось подібне)
Як це організувати:
XYYYYY
ZZZZZZ
ZZZZZZ
Тестовий випадок 2
Вхід:
1 1
2 2
Вихід:
false
(або щось подібне)
Пояснення: Стає очевидним, що ви не можете впорядкувати два квадрати різної величини і змусити їх краї вирівнятись.
Тестовий випадок 3
Вхід:
1 1
1 2
1 2
2 1
2 1
Вихід:
true
(або щось подібне) Як це організувати:
AAB
DEB
DCC
Як зазначав @ETHProductions, для всіх інших тестових випадків ви можете продовжувати комбінувати прямокутники із загальною довжиною ребра, поки у вас не буде лише одного прямокутника, тому цей тестовий випадок - це просто зламати будь-який код, який використовує цю ідею.
Тестовий випадок 4
Вхід:
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
Вихід:
true
(або щось подібне)
Як це організувати:
AAABBBBEE
AAACCDDDD
FFFFFGGGH
FFFFFGGGH
IIIJJKKLH
IIIMMMMMH
Примітка : Вам не потрібно вказувати, як це оформити, потрібно лише визначити, чи не можна це влаштувати.
Це кодовий гольф, тому найкоротша відповідь у байтах виграє! Я прийму найкоротшу відповідь станом на 14 січня, але сміливо надсилайте відповіді пізніше, оскільки я все-таки можу відмовитись! :)
Щасливого гольфу!
~ AL
PS Якщо ви знаєте, який тег слід застосувати до цієї проблеми, будь ласка, додайте його, я абсолютно не маю уявлення, що поставити як тег, окрім коду-гольфу.
EDIT : Ваша програма повинна мати можливість обробляти до 25 прямокутників, принаймні 10 секунд на пристойному комп’ютері (я буду досить гнучким щодо цього правила).
EDIT : Я продовжив термін прийому заявок до останнього дня року, але я сумніваюся, що отримаю відповідь до цього часу ...
EDIT : Я продовжив термін прийняття заявки на 2 тижні, тому якщо більше відповідей до цього часу не надійде, поточна відповідь C буде прийнята! :)
[[1, 2], [2, 1], [1, 1], [1, 2], [2, 1]]
(що можна домовитись ABB ACD EED
). Ви можете додати цей простий тестовий випадок.