Санта был в состоянии восстановить все подарки, которые эльфы украли за одну ночь! Теперь он должен отправить их на конвейер для упаковки. У него обычно есть камера для наблюдения за сборочной линией, чтобы убедиться, что эльфы делают хорошую работу, а также потому, что картинки с сборочной линии выглядят хорошо на рекламных плакатах [цитата-нужна]
К сожалению, его камера сломалась, поэтому он хотел бы, чтобы вы нарисовали симуляцию того, как будет выглядеть сборочная линия!
Для того, чтобы сборочная линия работала с максимальной эффективностью и чтобы снизить риск ошибки или отказа, все имеющиеся коробки имеют одинаковую ширину, чтобы они идеально подходили к конвейерной ленте.
Вызов
Учитывая список подарков, представленных их размерами, выведите конвейерную ленту со всеми подарками.
Подарок нарисован так:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Этот подарок имеет ширину 1, высоту 2 и длину 4. Обратите внимание, что знаки плюс не учитывают длину стороны, поэтому подарок длиной 4 фактически занимает 6 позиций.
Все подарки рисуются рядом друг с другом с одним пробелом между ближайшими двумя символами; то есть левые нижние углы подарков разнесены таким образом, что, если существующий блок имеет длину l
и ширину w
, нижний левый угол следующего текущего блока будет точно l + w + 4
расположен справа от нижнего левого угла предыдущего блока.
После того, как все существующие ящики нарисованы, конвейерная лента вытягивается путем замены пространства между ящиками в каждой из последних width + 2
строк подчеркиванием.
Окончательный вывод для существующих ящиков с (l, w, h)
of [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
будет:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Спецификации форматирования
Вы можете выбрать либо взять список из 3-х кортежей, где один из элементов согласован по всему списку (это будет ширина), либо вы можете взять текущую ширину, а затем список из 2-х кортежей, представляющих длину и высота каждого подарка. Вы можете принимать входные данные в любом порядке и в любом разумном формате, но подарки должны отображаться в том же порядке, в котором они представлены в качестве входных данных.
Вы можете выбрать любой приемлемый формат вывода для ASCII-искусства (включая возврат из функции).
Тестовые случаи
Эти тесты приведены в [(l, w, h), ...]
формате.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:
+-+
/ /|
/ / |
+-----+ / / |
/ /| +-+ |
/ / | | | |
/ / | +--------+ | | |
+-----+ | / /| | | |
| | +___/ / +_| | +
| | /___/ / /__| | /
| | /___+--------+ /___| | /
| |/____| |/____| |/
+-----+_____+--------+_____+-+
[(0, 0, 0)] (this is the most interesting test case ever :P)
++
+++
++
[(8, 3, 0), (0, 3, 8)] (more zero cases)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
правила
- Применяются стандартные лазейки
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах
- Ответ не будет принят
Примечание: я черпал вдохновение для этой серии испытаний из Advent Of Code . У меня нет связи с этим сайтом
Вы можете увидеть список всех испытаний в серии, посмотрев раздел «Связанные» первого испытания здесь .