Dostajesz drzewo, które w tradycji informatycznej ma korzeń u góry i liście u dołu. Węzły liści są oznaczone liczbami. Twoim celem jest zabranie specjalnego liścia oznaczonego -1
i przesunięcie go w górę, aby był nowym korzeniem.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Możesz sobie wyobrazić obrócenie specjalnego liścia do góry i pozwolenie, by reszta drzewa zwisała z niego. Utrzymywanie drzewa w płaszczyźnie podczas obracania go, aby uzyskać prawidłową kolejność wszystkich gałęzi od lewej do prawej.
Nowe drzewo ma wszystkie liście oryginalnego drzewa oprócz -1
.
Wejście:
Drzewo, którego liście są wyraźnymi dodatnimi liczbami całkowitymi, z wyjątkiem jednego liścia -1
. Korzeń drzewa będzie miał co najmniej dwie odgałęzienia.
Dane wejściowe są podawane jako zagnieżdżona lista [3, [[16], -1], [[4]]]
lub jej ciąg znaków. Ograniczniki są opcjonalne i zależą od ciebie, ale sąsiednie liczby muszą być oddzielone.
Wynik:
Wyjdź lub wydrukuj przewrócone drzewo w tym samym formacie co dane wejściowe. Kolejność wpisów na liście musi być poprawna. Modyfikacja na miejscu jest w porządku.
Jeśli dane wejściowe / wyjściowe są typem danych, domyślnie musi to być drukowany w wymaganym formacie. Wbudowane, które w zasadzie wykonują zadanie za Ciebie, nie są dozwolone.
Przypadki testowe:
>> [3, [[16], -1], [4]]
[[[[4], 3], [16]]]
>> [2, -1]
[[2]]
>> [44, -1, 12]
[[12, 44]]
>> [[[[-1]]], [[[[4]]]]]
[[[[[[[[[4]]]]]]]]]
>> [[1, 2, 3], [4, -1, 6], [7, 8, 9]]
[[6, [[7, 8, 9], [1, 2, 3]], 4]]
>> [9, [8, [7, [6, -1, 4], 3], 2], 1]
[[4, [3, [2, [1, 9], 8], 7], 6]]
4
Posiada dwa kolejne nawiasy wokół niego niż3
, ale jest tylko 1 warstwa diagramed głębiej.Odpowiedzi:
CJam,
242422 bajtówWypróbuj online .
Dzięki Dennis za usunięcie 2 bajtów.
Wyjaśnienie
źródło
{s$}$
z odwróconą kolejnością sortowania. Również anonimowa funkcja zaoszczędziłaby jeden bajt w całym programie.[
.Pyth,
26252423 bajtówDemonstracja. Uprząż testowa.
Definiuje funkcję,
y
która pobiera zagnieżdżoną listę Pythów jako dane wejściowe.Istnieją trzy przypadki, w celu zbadania tej funkcji rekurencyjnej, ze względu na trójskładnikowych
?
, a próba - z wyjątkiem funkcji.x
. W funkcji wejście tob
.Pierwszy przypadek występuje, gdy
}\-`Jtb
jest prawdą. To sprawdza, czy-
w reprezentacji ciągutb
znajduje się „ogon”b
, który jestb
wyjątkiem z wyjątkiem pierwszego elementu.tb
jest również przechowywany wJ
. Ponieważ wszystkie etykiety są dodatnie, z wyjątkiem-1
, będzie to prawdą wtedy i tylko wtedy, gdy-1
nie będzie w pierwszym elemencie listy.W takim przypadku cyklicznie przesuwamy w prawo
b
o 1 za pomocą.>b1
, a następnie wywołujemy funkcję rekurencyjnie. To gwarantuje, że przejdziemy do następnego kroku z elementem zawierającym-1
jako nagłówek (pierwszy element) listy.W następnych dwóch przypadkach powyższe jest fałszem, więc
-1
znajduje się na czele listy.W drugim przypadku
ahbJ
nie zgłasza błędu. Błąd zostanie wygenerowany tylko wtedy, gdyhb
jest liczbą całkowitą. Jeśli tak nie jest, tohb
jest lista i musimy obrócić drzewo, aby-1
liść był bliżej korzenia.ahbJ
dokonuje tego poprzez dołączenieJ
jako jednego elementu na końcuhb
, który skutecznie przenosi korzeń drzewa odb
dohb
.W trzecim i ostatnim przypadku generowany jest błąd. Zatem
hb
jest jednym elementem. Ze względu na test w pierwszym przypadkuhb
musi być-1
. W ten sposób możemy zwrócić resztęb
, a mianowicieJ
, zawinięte w listę, a mianowicie]J
.źródło