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
quelle
for... in
, ich erinnere mich, warum Sie es nie verwenden: Geige((((())())())(())()) = [1, [1, [1, [1]], [1]]
sollte sein((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Antworten:
Pyth , 13 Bytes
Testsuite .
Wie es funktioniert
quelle
]
.CommonLisp, 49 Bytes
Eingaben als Listenliste übernehmen.
Probieren Sie es online!
quelle
Brachylog , 21 Bytes
Probieren Sie es online!
quelle
Mathematica, 42 Bytes
Vermeidet eine explizite Rekursion durch Verwendung von
//@
(MapAll
), das eine Funktion über jeden Knoten in einem Baum abbildet. Dies bedeutet auch, dass die Funktionen von den Blättern aufwärts ausgeführt werden. Es wird aber auch angewendet, in{}
was sich dabei verwandelt{0}
. Deshalb zählen und entfernen wir{0}
stattdessen{}
.quelle
Netzhaut , 42 Bytes
Probieren Sie es online!
quelle
Clojure, 59 Bytes
Nicht viel anders als die CommonLisp- Antwort. Es ist
count
undremove
scheint ein etwas schöneres Konstrukt zu akzeptieren, hier musste ich Sets verwenden.quelle
Eigentlich 12 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als durch Kommas getrennte Liste mit eckigen Klammern und expliziten äußeren Klammern.
Erläuterung:
quelle
Python 2 ,
694645 BytesProbieren Sie es online!
quelle
f=
Ihrem bytecount etwas hinzufügen , da Sie die Funktion f verwenden und eine andere Benennung Ihre LösungGelee , 10 Bytes
Probieren Sie es online!
Übernimmt Eingaben als Liste von Listen von Listen ...
Natürlich wird der Algorithmus verwendet, den die anderen Antworten verwenden. ;)
quelle
Haskell , 102 Bytes
Probieren Sie es online!
Da Haskell streng typisiert ist, gibt es keine willkürlich verschachtelten Listen. Als Heilmittel
data L=I Int|T[L]deriving Show
deklariert man baumartig verschachtelte Listen mit entweder Ints oder leeren Listen als Blätter.Eingegeben wird , wie im zweiten Beispiel Format, mit einem zusätzlichen Konstruktor
T
vor jeder Öffnung Brace:T[T[T[]],T[],T[T[]]]
. Gleiches gilt für die Ausgabe, wobei jeder Zahl ein Konstruktor vorangestellt istI
. Funktionf
führt die Trauer aus .Ausgaben für die Testfälle:
quelle
Javascript (ES6), 77 Byte
Golf gespielt:
Ungolfed:
Demo
Code-Snippet anzeigen
quelle