W tym wyzwaniu musisz przeanalizować listę list w prostszym formacie listy.
To wyzwanie opiera się na moim parserze Sadflak. W moim parserze sadflak usunął wszystkie (), zastąpione sumą () na początku listy, aby program działał szybciej.
Aby parsować do Sad-List, musisz to zrobić (implementacja Pythona, używa krotki krotek):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
To jest funkcja rekurencyjna. Aby uzyskać listę, rozpocznij nową listę, zaczynając od liczby () z danych wejściowych listy, a następnie reszta tej listy to wersje list smutnych każdej listy, która nie była () z danych wejściowych listy, w kolejności. zwróć listę.
Wejście:
możesz wziąć dane wejściowe w kilku różnych formatach:
- możesz wziąć to jako listę
- możesz wziąć to jako krotkę
- możesz wziąć to jako ciąg
jeśli weźmiesz go jako ciąg, powinieneś użyć jakiegoś zestawu nawiasów, które pojawiają się w trzepoczeniu mózgu. nie możesz używać znaków 1 i 2
po prostu bądź rozsądny
Dane wejściowe zawsze będą znajdować się na jednej liście, ale twój program może założyć niejawną warstwę listy poza danymi wejściowymi, tj. () () () = (() () ()), Lub może tego nie robić. Przykłady będą z jawną listą zewnętrzną
wynik:
może być listą, krotką, łańcuchem lub czymkolwiek. możesz użyć dowolnego rozsądnego formatu wyjściowego, podobnie jak meta konsensus.
Przykład:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
zauważ, że dane wejściowe nie są ścisłe. te dane wejściowe mogą być:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
lub jakiś inny rozsądny format
wyjaśniony przypadek testowy:
(()()((())())())
aby to „usankcjonować”, najpierw liczymy liczbę ()
()() ()
( ((())()) )
3. następnie usuwamy je i dodajemy 3 na początku
(3,((())()))
na tej liście jest jedna lista. smucimy to
((())())
ile ()?
()
((()) )
1. usuwamy i dodajemy 1 na początku
(1,(()))
zawiera jedną listę
(())
liczyć
()
( )
usuń i dodaj liczbę
(1)
następnie umieszczamy to z powrotem na liście
(1,(1))
następnie umieszczamy to z powrotem na liście
(3,(1,(1)))
gotowy
To jest golf golfowy , więc krótszy jest lepszy
źródło
for... in
, dzięki czemu pamiętam, dlaczego go nigdy nie używasz: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
powinno być((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Odpowiedzi:
Pyth , 13 bajtów
Zestaw testowy .
Jak to działa
źródło
]
.CommonLisp, 49 bajtów
weź dane jako listę list.
Wypróbuj online!
źródło
Brachylog , 21 bajtów
Wypróbuj online!
źródło
Mathematica, 42 bajty
Unika jawnej rekurencji za pomocą
//@
(MapAll
), która mapuje funkcję na każdym węźle w drzewie. Oznacza to również, że funkcje są wykonywane od liści w górę. Jednak zostanie również zastosowany, w{}
który zostanie przekształcony{0}
. Dlatego{0}
zamiast tego liczymy i usuwamy{}
.źródło
Siatkówka , 42 bajty
Wypróbuj online!
źródło
Clojure, 59 bajtów
Niewiele różni się od odpowiedzi CommonLisp . Jego
count
iremove
zdają się akceptować konstrukt nieco ładniejszy, tutaj musiałem użyć sety.źródło
Właściwie 12 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako rozdzieloną przecinkami listę nawiasów kwadratowych z wyraźnymi nawiasami zewnętrznymi.
Wyjaśnienie:
źródło
Python 2 ,
694645 bajtówWypróbuj online!
źródło
f=
do swojego bytecount, ponieważ używasz funkcji f, a nadanie jej nazwy inaczej złamałoby twoje rozwiązanieGalaretka , 10 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę list list ...
Oczywiście używa algorytmu, którego używają inne odpowiedzi. ;)
źródło
Haskell , 102 bajty
Wypróbuj online!
Ponieważ Haskell jest ściśle wpisany, nie ma arbitralnie zagnieżdżonych list. Jako środek zaradczy
data L=I Int|T[L]deriving Show
deklaruje drzewiaste listy zagnieżdżone z Ints lub pustymi listami jako liście.Wejście jest jak w drugim przykładzie formacie, z dodatkowym konstruktora
T
przed każdym nawiasu otwierającego:T[T[T[]],T[],T[T[]]]
. To samo dotyczy danych wyjściowych, przy czym każda liczba jest poprzedzona konstruktoremI
. Funkcjaf
wykonuje zasmucenie .Dane wyjściowe dla przypadków testowych:
źródło
JavaScript (ES6), 77 bajtów
Gra w golfa:
Nie golfowany:
Próbny
Pokaż fragment kodu
źródło