Napisz program lub funkcję, która przyjmuje niepustą listę liczb całkowitych w dowolnym rozsądnym dogodnym formacie, takim jak 4, 0, -1, -6, 2
lub [4 0 -1 -6 2]
.
Wydrukuj lub zwróć ciąg przedstawiający listę jako las artystyczny ASCII, w którym każda liczba staje się drzewem o proporcjonalnej wysokości. Każde drzewo zajmuje cztery kolumny tekstu wyjściowego w następujący sposób:
Dodatnia liczba całkowita N staje się drzewem, którego podstawa jest
__|_
i góra jest^
, z N warstwami/ \
pomiędzy nimi.Na przykład, gdy N = 1, drzewo jest
^ / \ __|_
gdy N = 2, drzewo jest
^ / \ / \ __|_
gdy N = 3, drzewo jest
^ / \ / \ / \ __|_
i tak dalej.
Ujemna liczba całkowita N staje się podobna do odpowiedniego drzewa dodatniego, z tym wyjątkiem, że pionowy pasek znajduje się między kreskami gałęzi zamiast spacji.
Na przykład, gdy N = -1, drzewo jest
^ /|\ __|_
gdy N = -2, drzewo jest
^ /|\ /|\ __|_
gdy N = -3, drzewo jest
^ /|\ /|\ /|\ __|_
i tak dalej.
Kiedy liczba całkowita wynosi 0, technicznie nie ma drzewa, tylko pusta przestrzeń czterech znaków podkreślenia:
____
Podkreślenia u podstawy każdego drzewa muszą być wyrównane na wyjściu, tzn. Wszystkie drzewa muszą mieć swoje podstawy na tym samym poziomie. Ponadto pojedynczy znak podkreślenia jest dodawany na końcu wiersza podkreśleń po ostatnim drzewie. Dzięki temu każde drzewo ma po każdej stronie pustą kolumnę „powietrza”.
Przykładem 4 0 -1 -6 2
może być wynik dla
^
/|\
^ /|\
/ \ /|\
/ \ /|\ ^
/ \ ^ /|\ / \
/ \ /|\ /|\ / \
__|_______|___|___|__
Zwróć uwagę, że wzory drzew zawsze mają wiodącą kolumnę pustej przestrzeni, ale należało dodać podkreślenie, aby wstawić prawą stronę ostatniego drzewa.
Również:
- Końcowe spacje na dowolnych liniach są w porządku, ale nie powinno być niepotrzebnych spacji wiodących.
- Wiodące znaki nowej linii są niedozwolone (najwyższe drzewo powinno dotykać górnej krawędzi siatki tekstu wyjściowego) i dozwolony jest tylko jeden znak nowej linii.
- Lista może zawierać dowolne liczby całkowite od -250 do 250 włącznie. Obsługa wyższych drzew nie jest wymagana.
Najkrótszy kod w bajtach wygrywa.
Więcej przykładów
3
:
^
/ \
/ \
/ \
__|__
-2
:
^
/|\
/|\
__|__
0
:
_____
0, 0
:
_________
0, 1, 0
:
^
/ \
______|______
0, -1, 2, -3, 4
:
^
^ / \
^ /|\ / \
^ / \ /|\ / \
/|\ / \ /|\ / \
______|___|___|___|__
źródło
_
(podkreślenia) po ostatnim drzewie._
.Python 2, 165 bajtów
Jest to pełny program, który przyjmuje listę jako dane wejściowe. Nadal gram w ten okropny bałagan.
źródło
PHP, 231
277bajtówTo wyzwanie ma piękny efekt.
Czyta listę oddzieloną przecinkami (białe znaki są opcjonalne) z
STDIN
:Nie golfił
Edycje
if/else
operatorami trójskładnikowymi i przeniesiono niektóre zmienne, aby zaoszczędzić kilka bajtów.źródło
Ruby,
157156153 znakówNapisane tylko dlatego, że początkowo
Array.transpose
wyglądało na dobry pomysł. Nigdy więcej.Przykładowy przebieg:
źródło
C #, 318 bajtów
Próbowałem transponować tablicę. Nie jestem pewien, czy to było najlepsze rozwiązanie.
Wcięcia i nowe linie dla jasności:
źródło