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
((((())())())(())()) = [1, [1, [1, [1]], [1]]
powinno być ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.