Отказ от ответственности: история, рассказанная в этом вопросе, является полностью вымышленной и придумана исключительно с целью ознакомления.
У меня есть друг, который является архитектором, и, после объяснения ему концепции code-golf и этого сайта, он сказал, что я должен написать что-то действительно полезное для изменений. Я спросил его, что он посчитал бы полезным, и, будучи архитектором, он ответил, что ему понравится иметь планировщика, который предоставил ему все возможные меры для помещений определенных размеров в доме определенного размера. Я думал, что докажу, что код-гольф все-таки бесполезен, и дам ему эту программу с наименьшим возможным числом байтов.
Твое задание:
Напишите программу или функцию, которые, когда дан массив 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]
, не так ли?