Escreva um programa ou função que inclua uma lista não vazia de números inteiros em qualquer formato conveniente razoável como 4, 0, -1, -6, 2
ou [4 0 -1 -6 2]
.
Imprima ou retorne uma sequência que representa a lista como uma floresta artística ASCII, em que cada número se torna uma árvore de altura proporcional. Cada árvore ocupa quatro colunas de texto na saída da seguinte maneira:
Um número inteiro positivo N se torna uma árvore cuja base é
__|_
e é o topo^
, com N camadas/ \
intermediárias.Por exemplo, quando N = 1, a árvore é
^ / \ __|_
quando N = 2 a árvore é
^ / \ / \ __|_
quando N = 3 a árvore é
^ / \ / \ / \ __|_
e assim por diante.
Um número inteiro negativo N se torna exatamente como a árvore positiva correspondente, exceto que uma barra vertical está entre as barras, em vez de um espaço.
Por exemplo, quando N = -1, a árvore é
^ /|\ __|_
quando N = -2 a árvore é
^ /|\ /|\ __|_
quando N = -3 a árvore é
^ /|\ /|\ /|\ __|_
e assim por diante.
Quando o número inteiro é 0, tecnicamente não há árvore, apenas um espaço vazio de quatro sublinhados:
____
Os sublinhados na base de cada árvore devem estar alinhados na saída, ou seja, todas as árvores devem ter suas bases no mesmo nível. Além disso, um único sublinhado é adicionado ao final da linha de sublinhados após a última árvore. Isso faz com que cada árvore tenha uma coluna vazia de "ar" em ambos os lados.
Como exemplo, a saída para 4 0 -1 -6 2
seria
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Observe como os padrões da árvore sempre têm uma coluna à esquerda de espaço vazio, mas um sublinhado precisa ser adicionado para preencher o lado direito da última árvore.
Além disso:
- Os espaços à direita em qualquer linha são bons, mas não deve haver espaços à esquerda desnecessários.
- Novas linhas iniciais não são permitidas (a árvore mais alta deve tocar na parte superior da grade de texto de saída) e apenas uma linha nova é permitida.
- A lista pode conter números inteiros de -250 a 250, inclusive. Não é necessário manusear árvores mais altas.
O código mais curto em bytes vence.
Mais exemplos
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
_
sublinhado à direita após a última árvore.