Санта зміг відновити всі подарунки, які ельфи вкрали за ніч! Тепер він повинен відправити їх на складальну лінію для упаковки. Зазвичай у нього є камера для нагляду за конвеєром і для того, щоб переконатися, що ельфи роблять хорошу роботу, і тому, що малюнки з конвеєра добре виглядають на рекламних плакатах [потрібна цитата]
На жаль, його камера зламалася, тому він хотів би, щоб ви намалювали, як виглядатиме складальна лінія!
Для того, щоб конвеєрна лінія працювала з максимальною ефективністю і щоб знизити ризик помилок або відмов, всі наявні коробки мають однакову ширину, щоб вони ідеально помістилися на конвеєрі.
Виклик
Враховуючи список подарунків, представлених їх розмірами, виведіть конвеєр зі всіма подарунками.
Подарунок оформлений так:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Цей подарунок має ширину 1, висоту 2 та довжину 4. Зверніть увагу, що знаки плюс не враховуються в бічній довжині, тому презент довжиною 4 насправді охоплює 6 позицій.
Усі подарунки намальовані поруч з одним пробілом між найближчими двома символами; тобто нижній лівий кут подарунків розміщений таким чином, що якщо нинішня коробка має довжину l
та ширину w
, нижній лівий кут наступного вікна буде точно l + w + 4
розташований праворуч від нижнього лівого кута попереднього поля.
Після того, як усі наявні коробки намальовані, конвеєрна стрічка намалюється, замінивши пробіл між коробками на кожному з останніх width + 2
рядків підкресленнями.
Остаточний вихід для справжніх коробок з (l, w, h)
з [(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 . Я не маю приналежності до цього сайту
Ви можете переглянути список усіх викликів у серії, переглянувши розділ "Пов'язані" першого виклику тут .