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
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
fonte
_
sublinhado à direita após a última árvore._
.Python 2, 165 bytes
Este é um programa completo que aceita uma lista como entrada. Eu ainda estou jogando essa bagunça horrível.
fonte
PHP, 231
277bytesEste desafio tem uma saída bonita.
Lê uma lista separada por vírgula (os espaços em branco são opcionais) em
STDIN
:Ungolfed
Editar% s
if/else
por operadores ternários e moveu algumas das variáveis para economizar alguns bytes.fonte
Ruby,
157156153 caracteresEscrito apenas porque inicialmente
Array.transpose
parecia uma boa ideia. Não mais.Exemplo de execução:
fonte
C #, 318 bytes
Eu tentei transpor a matriz. Não tenho certeza se essa foi a melhor solução.
Recuo e novas linhas para maior clareza:
fonte