In Elixir haben (verknüpfte) Listen das Format, [head | tail]
bei dem head alles sein kann und tail eine Liste des Restes der Liste ist. []
Die leere Liste ist die einzige Ausnahme.
Listen können auch so geschrieben werden, wie [1, 2, 3]
es äquivalent zu ist[1 | [2 | [3 | []]]]
Ihre Aufgabe ist es, eine Liste wie beschrieben zu konvertieren. Die Eingabe ist immer eine gültige Liste (in Elixir), die nur Zahlen enthält, die dem regulären Ausdruck entsprechen \[(\d+(, ?\d+)*)?\]
. Sie können die Eingabe mit (ein Leerzeichen nach jedem Komma) oder ohne Leerzeichen vornehmen. Die Ausgabe kann mit (jeweils ein Leerzeichen vor und nach |
) oder ohne Leerzeichen erfolgen.
Bei Eingaben mit führenden Nullen können Sie entweder ohne Nullen oder mit ausgeben.
Die Eingabe muss wie die Ausgabe als Zeichenfolge interpretiert werden (wenn eine Funktion geschrieben wird).
Beispiele
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
verwandt , kein Duplikat, da dies zum Teil das Hinzufügen von Modus ]
zum Ende beinhaltet. Außerdem unterscheidet sich die Antwort von Haskell von der hier.
Antworten:
Haskell, 50 Bytes
Probieren Sie es online!
Das
+0
läßt die Know Haskell Typ - Checker , dass wir mit Listen von Zahlen zu tun hat , soread
wird die Eingabezeichenfolge für uns analysiert.quelle
Python 2 , 50 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 50 Byte
Probieren Sie es online!
Rekursive Version, 51 Bytes
Probieren Sie es online!
quelle
Retina ,
39333220 BytesDank H.PWiz, ovs, nur ASCII und Neil 13 Bytes gespart.
Probieren Sie es online!
Erläuterung
Wenn wir keine leere Liste haben, fügen Sie ein nachstehendes Komma hinzu.
Während es Kommas gibt, wickeln Sie die Dinge mit
|[ thing ]
.quelle
\b]
mit,]
. (Ansonsten hatte ich unabhängig die gleiche Lösung entdeckt.)\b
dass aus irgendeinem Grund> _> 20 Bytes @MnemonicPerl 5
-pl
,3128 BytesProbieren Sie es online!
Wie?
quelle
Elixier ,
11185 BytesProbieren Sie es online!
Ich habe Elixir noch nie benutzt. Definiert eine Funktion, die eine Zeichenfolge und einen Verweis auf sich selbst nimmt und eine Zeichenfolge zurückgibt.
quelle
Ceylon , 113 Bytes
Probieren Sie es online!
Hier ist es ausgeschrieben:
Probieren Sie es online!
Wie von ovs in einem (jetzt gelöschten) Kommentar vermerkt: Wenn man die in der Frage angegebenen Optionen "ohne Leerzeichen" für Ein- und Ausgabe auswählt, kann man 3 weitere Bytes speichern (die offensichtlichen mit Leerzeichen).
Wenn wir die Eingabe nicht analysieren müssen, sondern nur eine Sequenz als Eingabe erhalten können, wird sie viel kürzer (69 Byte).
Probieren Sie es online!
quelle
Python 3 , 65 Bytes
Probieren Sie es online!
Wenn die Eingabe stattdessen eine Liste sein könnte, dann:
Python 3 , 53 Bytes
Probieren Sie es online!
quelle
SNOBOL4 (CSNOBOL4) , 114 Bytes
Probieren Sie es online!
quelle
Stax , 19 Bytes
Führen Sie es aus und debuggen Sie es
Mein erster Stax-Beitrag, also wohl nicht optimal.
Entpackt und kommentiert:
Führen Sie diesen aus und debuggen Sie ihn
quelle
Schale , 22 Bytes
Probieren Sie es online!
quelle
Befunge-98 (PyFunge) ,
2221 BytesProbieren Sie es online!
Wenn es keine seltsamen Einschränkungen für die Ausgabe gäbe, könnten wir dies in 18 tun:
Unterhaltsame Tatsache, dies ist technisch gesehen ein Programm, das in Python nichts macht.
quelle
Ruby
-p
, 39 BytesVolles Programm:
Probieren Sie es online!
Ruby ,
4845 BytesRekursive Funktion:
Probieren Sie es online!
quelle
R ,
847169 BytesProbieren Sie es online!
quelle
\K
Lookbehind total vergessenProton , 57 Bytes
Probieren Sie es online!
quelle
Jelly , 19 Bytes
Probieren Sie es online!
Eine nicht rekursive Alternative zu Eriks Lösung .
quelle
Jelly , 18 Bytes
Probieren Sie es online!
quelle
Jelly , 18 Bytes
Ein vollständiges Programm, das das Ergebnis druckt (als monadischer Link akzeptiert es eine Liste von Zeichen, gibt aber eine Liste von Zeichen und ganzen Zahlen zurück).
Probieren Sie es online!
Wie?
quelle
Java 10, 107 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Standard ML , 71 Bytes
Probieren Sie es online! Verwendet das Format ohne Leerzeichen. ZB
it "[10,333,4]"
ergibt"[10|[333|[4]|[]]]]"
.ungolfed
Probieren Sie es online!
quelle
R ,
140136 Bytes4 Bytes nach Giuseppes guter Empfehlung runter.
Probieren Sie es online!
quelle
substr
ist kürzer und die erstepaste0
kann seinpaste
, dies auf 136 Bytes zu bekommen.eval
,parse
undsub
stattunlist
,strsplit
undsubstr
ich auch 136 Bytes nur geschaffen (ich dachte , es kürzer sein könnte , aber es war nicht)R , 108 Bytes
Probieren Sie es online!
Es hat fast ein Jahr gedauert, um eine bessere R-Lösung zu finden als vorher ... hätte wissen müssen,
Reduce
dass dies die Lösung ist ! Ausgaben ohne Leerzeichen, Eingaben können mit oder ohne Leerzeichen erfolgen.quelle
Python 2 , 63 Bytes
Probieren Sie es online!
quelle
sed +
-E
, 46 BytesEin ziemlich einfacher Ansatz. Die zweite Zeile nimmt
[\d+, ...]
und ändert es auf[\d | [...]]
. Die dritte Zeile springt zurück zur ersten Zeile, wenn die Ersetzung erfolgreich war. Die Ersetzung wiederholt sich, bis sie fehlschlägt und das Programm dann beendet wird. Laufen Sie mitsed -E -f filename.sed
und übergeben Sie die Eingabe über stdin.quelle
Rot , 110 Bytes
Probieren Sie es online!
Erklärung der ungolfed version:
Rot ist so gut lesbar, dass ich bezweifle, dass ich die obigen Kommentare hinzufügen musste :)
quelle
Perl 6 , 38 Bytes
Probieren Sie es online!
quelle