Відмова: Історія, розказана в цьому питанні, є повністю вигаданою та придумана виключно для того, щоб забезпечити вступ.
У мене є друг, який є архітектором, і, пояснивши йому поняття код-гольф і цей сайт, він сказав, що я повинен кодувати щось дійсно корисне для зміни. Я запитав у нього, що він вважає корисним, і, будучи архітектором, він відповів, що йому сподобається мати планувальник підлоги, який дасть йому всі можливі розташування кімнат певних розмірів в будинку певного розміру. Я думав, що докажу, що код-гольф не виявився марним, і дам йому цю програму в найменшій кількості можливих байтів.
Ваше завдання:
Напишіть програму або функцію, яка при заданому масиві D, що містить розміри всього будинку, та другому масиві R, що містить розміри внутрішніх приміщень, виводять як арт ASCII, усі можливі конфігурації приміщень всередині будинку.
Усі кімнати та зовнішні стіни будинку повинні бути сформовані як стандартні коробки ASCII, використовуючи | символ вертикальних стін, символ - як горизонтальні стіни, а символ + для кутів. Наприклад, будинок розмірами [4,4] буде мати вигляд:
+----+
| |
| |
| |
| |
+----+
Як бачите, кути не вважаються частиною набору розмірів. Кількість - або | символи, що утворюють сторони, повинні дорівнювати кількості, вказаному в розмірах. У номерах можуть бути спільні стіни або спільні стіни з будинком. Кімната може не містити в собі менших кімнат.
Наприклад, конфігурація
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
справедливо для D = [5,8], а R = [[2,2], [2,3]].
Вхід:
Два масиви, один з яких містить два цілі числа, розміри для будинку, а другий з них містить ряд масивів, що містять розміри для кімнат.
Вихід:
Або масив усіх можливих будинків у вигляді рядків, або рядок, що містить усі можливі будинки, розмежовані певним чином. Зауважте, що обертання точно такої ж конфігурації слід рахувати лише один раз.
Випробування:
D R -> Output
[4,3] [[2,1],[4,1]] -> +-+-+ +-+-+ +-+-+ Note that though there is an option to switch which side the [2,1] room and the [4,1] room are on, doing so would merely be rotating the house by 180 degrees, and therefore these possibilities do not count.
| | | +-+ | | | |
+-+ | | | | | | |
| | | | | | +-+ |
| | | +-+ | | | |
+-+-+ +-+-+ +-+-+
[4,7] [[3,1],[4,2],[2,2] -> +----+--+ +----+--+ +----+--+ +----+--+ There are some more possiblities I didn't feel like adding, but it's the same four again, just with the [4,2] and the [2,2] room switched.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
Оцінка:
Це кодовий гольф , найнижчий бал у виграші байтів!
D = [4,2]
, але ваш будинок є [4,3]
, чи не так?