Écrivez un programme ou une fonction qui accepte une liste non vide d'entiers dans un format pratique raisonnable tel que 4, 0, -1, -6, 2
ou [4 0 -1 -6 2]
.
Imprimez ou renvoyez une chaîne qui représente la liste comme une forêt d'art ASCII où chaque nombre devient un arbre de hauteur proportionnelle. Chaque arborescence occupe quatre colonnes de texte dans la sortie comme suit:
Un entier positif N devient un arbre dont la base est
__|_
et le sommet est^
, avec N couches d'/ \
entre les deux.Par exemple, lorsque N = 1, l'arbre est
^ / \ __|_
lorsque N = 2, l'arbre est
^ / \ / \ __|_
lorsque N = 3, l'arbre est
^ / \ / \ / \ __|_
etc.
Un entier négatif N devient exactement comme l'arbre positif correspondant, sauf qu'une barre verticale se trouve entre les barres obliques au lieu d'un espace.
Par exemple, lorsque N = -1, l'arbre est
^ /|\ __|_
lorsque N = -2, l'arbre est
^ /|\ /|\ __|_
lorsque N = -3, l'arbre est
^ /|\ /|\ /|\ __|_
etc.
Lorsque l'entier est 0, il n'y a techniquement pas d'arbre, juste un espace vide de quatre traits de soulignement:
____
Les traits de soulignement à la base de chaque arbre doivent être alignés dans la sortie, c'est-à-dire que tous les arbres doivent avoir leurs bases au même niveau. En outre, un seul trait de soulignement est ajouté à la fin de la ligne de traits de soulignement après le dernier arbre. Cela fait en sorte que chaque arbre a une colonne vide "d'air" de chaque côté.
Par exemple, la sortie pour 4 0 -1 -6 2
serait
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Notez que les modèles d'arbre ont toujours une colonne principale d'espace vide mais un trait de soulignement a dû être ajouté pour remplir le côté droit du dernier arbre.
Aussi:
- Les espaces de fin sur n'importe quelle ligne conviennent, mais il ne doit pas y avoir d'espaces de début inutiles.
- Les sauts de ligne de début ne sont pas autorisés (l'arbre le plus haut doit toucher le haut de la grille de texte de sortie) et un seul saut de ligne de fin est autorisé.
- La liste peut contenir tous les entiers de -250 à 250 inclus. Il n'est pas nécessaire de manipuler des arbres plus grands.
Le code le plus court en octets gagne.
Plus d'exemples
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
la source
_
(trait de soulignement) après la dernière arborescence._
.Python 2, 165 octets
Il s'agit d'un programme complet qui accepte une liste en entrée. Je joue toujours à ce désordre horrible.
la source
PHP, 231
277octetsCe défi a une belle sortie.
Lit une liste séparée par des virgules (les espaces sont facultatifs) à partir de
STDIN
:Non golfé
Modifications
if/else
par des opérateurs ternaires et déplacé certaines variables pour économiser quelques octets.la source
Ruby,
157156153 caractèresÉcrit juste parce qu'au départ, cela
Array.transpose
semblait être une bonne idée. Plus maintenant.Exemple d'exécution:
la source
C #, 318 octets
J'ai essayé de transposer le tableau. Je ne sais pas si c'était la meilleure solution.
Indentation et nouvelles lignes pour plus de clarté:
la source