Санта был в состоянии восстановить все подарки, которые эльфы украли за одну ночь! Теперь он должен отправить их на конвейер для упаковки. У него обычно есть камера для наблюдения за сборочной линией, чтобы убедиться, что эльфы делают хорошую работу, а также потому, что картинки с сборочной линии выглядят хорошо на рекламных плакатах [цитата-нужна]
К сожалению, его камера сломалась, поэтому он хотел бы, чтобы вы нарисовали симуляцию того, как будет выглядеть сборочная линия!
Для того, чтобы сборочная линия работала с максимальной эффективностью и чтобы снизить риск ошибки или отказа, все имеющиеся коробки имеют одинаковую ширину, чтобы они идеально подходили к конвейерной ленте.
Вызов
Учитывая список подарков, представленных их размерами, выведите конвейерную ленту со всеми подарками.
Подарок нарисован так:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Этот подарок имеет ширину 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 . У меня нет связи с этим сайтом
Вы можете увидеть список всех испытаний в серии, посмотрев раздел «Связанные» первого испытания здесь .
Ответы:
Древесный уголь ,
9681 байтПопробуйте онлайн! Ссылка на подробную версию кода. Ввод - это ширина в первой строке, затем остальные измерения в следующих строках, заканчивающиеся пустой строкой. Объяснение:
Введите ширину.
Зациклите оставшиеся строки, пока не будет достигнута пустая строка.
Нарисуйте пояс между подарками.
u
Переменная предопределена пустой список, который , следовательно , ничего не делает на первом проходе, а потом он заканчивает с одним элементом, в результате чего этот код , чтобы запустить один раз. (Использованиеif
было бы меньше гольфа.)Разделите размеры в пространстве, приведите их к целому числу и сохраните их
u
.Удалите последнее измерение и сохраните его
p
.Скопируйте первое измерение
r
, но оставьте егоu
так, чтобы ремень натягивался на следующую петлю.Сотрите внутреннюю часть подарка, если ремень перекрывает его.
Нарисуйте внутренние линии настоящего.
Нарисуйте на полпути вокруг настоящего, затем повторите для другой половины.
источник
Пип ,
160154 байта153 байта кода, +1 для
-l
флага.Это функция, которая принимает список списков, содержащих
[width height length]
. Попробуйте онлайн!Как?
Объяснение на высшем уровне:
Оставьте комментарий и я добавлю более подробное объяснение.
источник
Python 2 , 508 байт
Попробуйте онлайн!
Принимает список списков
[height, width, length]
источник