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
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
fuente
_
(guión bajo) después del último árbol._
.Python 2, 165 bytes
Este es un programa completo que acepta una lista como entrada. Todavía estoy jugando al golf este horrible desastre.
fuente
PHP, 231
277bytesEste desafío tiene una salida hermosa.
Lee una lista separada por comas (los espacios en blanco son opcionales) de
STDIN
:Sin golf
Ediciones
if/else
por operadores ternarios y movió algunas de las variables para guardar algunos bytes.fuente
Rubí,
157156153 caracteresEscrito solo porque inicialmente
Array.transpose
parecía una buena idea. Ya no.Ejecución de muestra:
fuente
C #, 318 bytes
Traté de transponer la matriz. No estoy seguro de si esa fue la mejor solución.
Sangría y nuevas líneas para mayor claridad:
fuente