Biorąc pod uwagę potencjalnie zagnieżdżoną, niepustą tablicę jednocyfrowych liczb całkowitych dodatnich (nie gwarantowanych niepowtarzalnych), wyprowadzaj reprezentację ASCII-art jako drzewo, używając znaków rysujących ramkę ┌ ┴ ┐ ─ │ ┬ ┼
. (Zostały one skopiowane z Code Page 437, ale możesz użyć dowolnej równoważnej reprezentacji).
Każda liczba całkowita tablicy powinna być liściem drzewa. Elementy tego samego poziomu głęboko w tablicy powinny znajdować się na tym samym poziomie drzewa. Wszystkie elementy powinny być oddzielone wystarczającą liczbą białych znaków, aby były wyraźne (to Ty decydujesz, jak szeroka, minimum jedna przestrzeń między nimi).
Na przykład podana tablica [[1, [2]], [3, [4, 5]]]
wyświetla następujące drzewo
┌─┴─┐
┌┴┐ ┌┴─┐
1 │ 3 ┌┴┐
2 4 5
Dla tablicy [1, 2, 3]
drzewo może wyglądać
┌─┼─┐
1 2 3
Ale tablica [[1, 2, 3]]
wyglądałaby tak
│
┌─┼─┐
1 2 3
Podczas gdy tablica [1, [1, [1, [1]]]]
może wyglądać
┌─┴┐
1 ┌┴─┐
1 ┌┴┐
1 │
1
Bardziej skomplikowanym przykładem [1, [[[2, 3], 4], 5]]
może być
┌┴───┐
1 ┌─┴┐
┌─┴┐ 5
┌┴┐ 4
2 3
lub kilka innych odmian.
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Możesz wydrukować go do STDOUT lub zwrócić jako wynik funkcji.
- Dopuszczalny jest pełny program lub funkcja.
- Dopuszczalna jest dowolna ilość obcych białych znaków, o ile znaki są odpowiednio ustawione w jednej linii.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
źródło
[1,[[[2,3],4],5]]
może być interesującym przypadkiem testowym, ponieważ musi on sztucznie rozciągać się root, aby prawe poddrzewa nie kolidowało z lewym poddrzewem.1
jest tablicą z 3 elementów:[2,3]
,4
, i5
. Ale 4 i 5 nie sąsiadują ze sobą.[1, [[[2, 3]], [4], 5]]
.Odpowiedzi:
Python 3 ,
400393390 bajtówZwraca listę ciągów znaków od góry do dołu.
EDYCJA 1: Skrócono 7 bajtów, unikając powielania
┴┼
(oszczędność netto 2 bajtów), wycinając 0 z jednego ciągu, zmieniając sposób wybierania znaków rysunkowych┬┌┐
(używaj<
zamiast==
) i zastępującL(z)
brakującee
EDYCJA 2: -2 bajty dzięki ovs i -1 bajtów dzięki Kevin Cruijssen
Wypróbuj online!
Bez golfa
Z liści tworzy się drzewo, jedna warstwa na raz.
źródło
S,*K=' ┴┼│123456789'
.e==1
może byće<2
zapisanie bajtu (nie sądzę, że może to być zawsze 0, ponieważ wyzwanie mówi, że dane wejściowe są niepuste - a puste dane i tak już by się nie udałymax(map(L,z))
w tym przypadku.)Czysty ,
544506 bajtówUcieczki służą do uniknięcia nieprawidłowego UTF-8 na SE / TIO, ale są liczone jako jeden bajt, ponieważ są poprawnymi literałami
Wypróbuj online!
Pobiera dane wejściowe w formacie
L[I 3, L[I 4, I 5], I 2]..
Łączy drzewa od dołu do góry, od lewej do prawej, a następnie dostosowuje odległości od prawej do lewej.
Prettified, sorting of:
źródło
Węgiel drzewny ,
127123 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Zmień domyślny kierunek rysowania na wyższy, ponieważ nie rysujemy niczego po prawej stronie.
Pierwszym etapem jest konwersja zagnieżdżonych reprezentację tablicy do reprezentowania indeksu, który znajduje się lista wszystkich wpisów wraz z indeksom subarrays, np dla wejścia jest i dlatego chcemy listy jest . Zaczynamy od pojedynczego wpisu do przetworzenia, który jest listą zawierającą listę bieżących indeksów (tj. Jak dotąd żadnych) i oryginalne dane wejściowe.
q=[1, [[[2, 3]], [4], 5]]
5
q[1][2]
1, 2
Pętla nad tablicami podczas ich przetwarzania. (Dogodnie węgiel drzewny będzie kontynuował iterację po liście, jeśli naciśniesz ją podczas iteracji.)
Uzyskaj kolejną tablicę do przetworzenia.
Czy to rzeczywiście skalar, a nie tablica?
Jeśli tak, to lista, którą mieliśmy, faktycznie należy do ostatecznej listy list indeksów.
W przeciwnym razie zapętlić każdy element w tej tablicy ...
... i zapisz go z nową listą indeksów do dalszego przetwarzania. Zapisywany jest również maksymalny indeks tablicy, który jest używany do specjalnego przypadku ostatniego elementu tablicy.
Jesteśmy teraz gotowi na przeglądanie listy list indeksów. Jednak lista nie jest uporządkowana leksykograficznie, więc nie możemy iterować jej bezpośrednio.
Znajdź następny element w porządku leksykograficznym.
Usuń go z listy.
Przeskocz do pozycji skalara na wyjściu. Możemy to obliczyć, biorąc pod uwagę, że możemy zliczać liczbę skalarów, które wypisujemy, a także znamy liczbę pozycji na liście indeksów.
Właściwie wydrukuj skalar.
Pętla nad wpisami na liście indeksów. Ponownie, nie jest to prosta iteracja, ponieważ wpisy przychodzą parami, a my musimy także być w stanie wyjść z pętli.
Wyodrębnij następny indeks z listy.
Jeśli to nie pierwszy element na liście ...
... następnie wydrukuj
┐
lub w┬
zależności od tego, czy jest to ostatni element na liście ...... i wydrukuj tyle
─
s, aby wypełnić poprzedni wpis na tym poziomie ...... i wyczyść zmienną, aby wyjść z pętli, odkąd skończyliśmy.
W przeciwnym razie, jeśli jest to (pierwszy element) listy wieloelementowej, wydrukuj
┌┴
, pozostawiając kursor powyżej,┴
aby zająć się rodzicem tego poziomu.W przeciwnym razie, jeśli jest to lista 1-elementowa, po prostu wydrukuj a
│
i przejdź w górę linii, aby poradzić sobie z rodzicem tego poziomu.źródło