In dieser Herausforderung müssen Sie eine Liste von Listen in ein einfacheres Listenformat umwandeln.
Diese Herausforderung basiert auf meinem Sadflak-Parser. In meinem Sadflak-Parser wurden alle () entfernt und durch die Summe der () am Anfang der Liste ersetzt, damit das Programm schneller ausgeführt wird.
Um eine Sad-List zu parsen, müssen Sie dies tun (Python-Implementierungssache, verwendet ein Tupel von Tupeln):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Dies ist eine rekursive Funktion. Starten Sie für eine Liste eine neue Liste, beginnend mit der Nummer () aus der Listeneingabe. Der Rest dieser Liste besteht aus Versionen aller Listen, die nicht () aus der Listeneingabe waren. Gib die Liste zurück.
Eingang:
Sie können Eingaben in verschiedenen Formaten vornehmen:
- Sie können es als Liste nehmen
- Sie können es als Tupel nehmen
- Sie können es als Zeichenfolge nehmen
Wenn Sie es als eine Schnur nehmen, sollten Sie einige Klammern verwenden, wie sie in Brain-Flak erscheinen. Sie dürfen die Zeichen 1 und 2 nicht verwenden
Sei einfach vernünftig
Die Eingabe befindet sich immer in einer Liste, aber Ihr Programm nimmt möglicherweise eine implizite Listenebene außerhalb der Eingabe an, dh () () () = (() () ()), oder es entscheidet sich möglicherweise dagegen. Beispiele werden mit expliziter externer Liste sein
Ausgabe:
kann list oder tuple oder string sein, oder was auch immer. Sie können jedes vernünftige Ausgabeformat verwenden, genau wie der Metakonsens.
Beispiel:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
Beachten Sie, dass die Eingabe nicht streng ist. Diese Eingaben könnten sein:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
oder ein anderes vernünftiges Format
erklärter Testfall:
(()()((())())())
um dies zu "sadifizieren", zählen wir zuerst die Anzahl der ()
()() ()
( ((())()) )
3. Dann entfernen wir diese und fügen am Anfang eine 3 hinzu
(3,((())()))
Es gibt eine Liste in dieser Liste. Wir bedauern dies
((())())
wie viele ()?
()
((()) )
1. Wir entfernen und fügen zu Beginn eine 1 hinzu
(1,(()))
Das hat eine Liste
(())
Anzahl
()
( )
entfernen Sie und addieren Sie Zählung
(1)
dann setzen wir dies wieder in seine Liste
(1,(1))
dann setzen wir dies wieder in seine Liste
(3,(1,(1)))
erledigt
Das ist Code-Golf , also ist kürzer besser
((((())())())(())()) = [1, [1, [1, [1]], [1]]
sollte sein ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.