Напишіть програму або функцію, яка містить непорожній список цілих чисел у будь-якому розумному зручному форматі, наприклад, 4, 0, -1, -6, 2
або [4 0 -1 -6 2]
.
Роздрукуйте або поверніть рядок, який зображує список як ліс мистецтва ASCII, де кожне число стає деревом пропорційної висоти. Кожне дерево займає чотири стовпці тексту у висновку таким чином:
Позитивне ціле число N стає деревом, основою якого є
__|_
і верх^
, з N шарами/ \
між ними.Наприклад, коли N = 1 дерево
^ / \ __|_
коли N = 2 дерево
^ / \ / \ __|_
коли N = 3 дерево
^ / \ / \ / \ __|_
і так далі.
Негативне ціле число N стає таким же, як і відповідне позитивне дерево, за винятком того, що вертикальна смужка знаходиться між косими гілками замість пробілу.
Наприклад, коли N = -1 дерево
^ /|\ __|_
коли N = -2 дерево
^ /|\ /|\ __|_
коли N = -3 дерево
^ /|\ /|\ /|\ __|_
і так далі.
Коли ціле число 0, технічно немає дерева, просто порожній пробіл у чотири підкреслення:
____
Підкреслення в основі кожного дерева повинні вирівнюватися у висновку, тобто всі дерева повинні мати свої основи на одному рівні. Крім того, в кінці рядка підкреслення після останнього дерева додається єдине підкреслення. Це робить його таким, що кожне дерево має порожній стовпчик "повітря" по обидва боки від нього.
В якості прикладу, вихід для 4 0 -1 -6 2
буде
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Зверніть увагу, як у шаблонах дерев завжди є провідний стовпчик порожнього простору, але підкреслення потрібно було додати, щоб розмістити праворуч останнього дерева.
Також:
- Пробіли на будь-яких лініях є нормальними, але не повинно бути зайвих провідних пробілів.
- Провідні нові рядки заборонені (найвище дерево повинно торкатися вершини вихідної текстової сітки), і допускається лише до одного зворотного нового рядка.
- Список може містити будь-які цілі числа від -250 до 250 включно. Поводження з високими деревами не потрібно.
Виграє найкоротший код у байтах.
Більше прикладів
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
_
(підкреслення) після останнього дерева.