Escriba un programa o función que tome una lista no vacía de enteros en cualquier formato conveniente razonable como 4, 0, -1, -6, 2
o [4 0 -1 -6 2]
.
Imprima o devuelva una cadena que represente la lista como un bosque de arte ASCII donde cada número se convierte en un árbol de altura proporcional. Cada árbol ocupa cuatro columnas de texto en la salida de la siguiente manera:
Un entero positivo N se convierte en un árbol cuya base es
__|_
y la parte superior es^
, con N capas/ \
intermedias.Por ejemplo, cuando N = 1 el árbol es
^ / \ __|_
cuando N = 2 el árbol es
^ / \ / \ __|_
cuando N = 3 el árbol es
^ / \ / \ / \ __|_
y así.
Un entero negativo N se convierte en el árbol positivo correspondiente, excepto que hay una barra vertical entre las barras diagonales en lugar de un espacio.
Por ejemplo, cuando N = -1 el árbol es
^ /|\ __|_
cuando N = -2 el árbol es
^ /|\ /|\ __|_
cuando N = -3 el árbol es
^ /|\ /|\ /|\ __|_
y así.
Cuando el número entero es 0, técnicamente no hay árbol, solo un espacio vacío de cuatro guiones bajos:
____
Los guiones bajos en la base de cada árbol deben alinearse en la salida, es decir, todos los árboles deben tener sus bases en el mismo nivel. Además, se agrega un guión bajo al final de la línea de guiones bajos después del último árbol. Esto hace que cada árbol tenga una columna vacía de "aire" a cada lado.
Como ejemplo, la salida para 4 0 -1 -6 2
sería
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Observe cómo los patrones de árbol siempre tienen una columna inicial de espacio vacío, pero se debe agregar un guión bajo para rellenar el lado derecho del último árbol.
También:
- Los espacios finales en cualquier línea están bien, pero no debe haber espacios iniciales innecesarios.
- No se permiten nuevas líneas iniciales (el árbol más alto debe tocar la parte superior de la cuadrícula de texto de salida) y solo se permite hasta una nueva línea final.
- La lista puede contener enteros de -250 a 250 inclusive. No se requiere el manejo de árboles más altos.
El código más corto en bytes gana.
Más ejemplos
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
_
(guión bajo) después del último árbol.