Schreiben Sie ein Programm, das (über stdin oder die Befehlszeile) einen String mit der rekursiven Form aufnimmt
PREFIX[SUFFIXES]
wo
PREFIX
kann eine beliebige Zeichenfolge aus Kleinbuchstaben (az) sein, einschließlich der leeren Zeichenfolge undSUFFIXES
kann eine beliebige Folge von Zeichenfolgen sein, bei denen die rekursive FormPREFIX[SUFFIXES]
zusammengefügt ist, einschließlich der leeren Folge.
Erstellen Sie aus der Eingabe eine Liste von Zeichenfolgen mit Kleinbuchstaben, indem Sie die Liste der Zeichenfolgen in den einzelnen Suffixen rekursiv auswerten und an das Präfix anhängen. Ausgabe der Zeichenfolgen in dieser Liste in beliebiger Reihenfolge, eine pro Zeile (zuzüglich einer optionalen nachgestellten neuen Zeile).
Beispiel
Wenn der Eingang ist
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
dann wird das Präfix ist
cat
und und die Suffixe sinds[up[][]]
,[]
,ch[e[r[]s[]]]
, unda[maran[]comb[]pult[[]ing[]]]
. Jedes Suffix hat sein eigenes Präfix und Suffixe.Die Ausgabe würde diese 9 Wörter in beliebiger Reihenfolge sein
catsup cats cat catcher catches catamaran catacomb catapult catapulting
weil die Eingabe diesen Baum codiert
und jedes der 9 Ausgangswörter kann durch Überqueren des Baums von der Wurzel zum Blatt gebildet werden.
Anmerkungen
Denken Sie daran, dass das Präfix die leere Zeichenfolge sein kann, also so etwas wie
[donut[][]cruller[]]
ist eine gültige Eingabe, deren Ausgabe (in beliebiger Reihenfolge) wäre
donut cruller
Dabei steht die leere Zeile für die leere Zeichenfolge, mit der das zweite Suffix übereinstimmt.
Die Suffix-Sequenz kann auch leer sein, also der einfache Eingabefall
[]
hat eine einzelne leere Zeile als Ausgabe:
- Sie können davon ausgehen, dass die Eingabe nur eindeutige Ausgabewörter erzeugt.
- zB
hat[s[]ter[]s[]]
wäre eine ungültige Eingabe, dahats
doppelt codiert. - Ebenso
[[][]]
ist ungültig, da die leere Zeichenfolge zweimal codiert wird.
- zB
- Sie können nicht davon ausgehen, dass die Eingabe so kurz oder komprimiert wie möglich ist.
- Beispiel: Der
'e'
Knoten im obigen Hauptbeispiel könnte mit dem'ch'
Knoten kombiniert werden. Dies bedeutet jedoch nicht, dass die Eingabe ungültig ist. - Ebenso
[[[[[]]]]]
ist gültig, obwohl nur die leere Zeichenfolge in einer suboptimalen Weise codiert wird.
- Beispiel: Der
- Anstelle eines Programms können Sie eine Funktion schreiben, die die Eingabezeichenfolge als Argument verwendet und die Ausgabe normal ausgibt oder als Zeichenfolge oder Liste zurückgibt.
Der kürzeste Code in Bytes gewinnt.
quelle
(a,(_:t))
kann(a,_:t)
stattdessen seinJava, 206 Bytes
Definiert eine Funktion, die eine Zeichenfolge als Argument akzeptiert und eine Liste von Zeichenfolgen zurückgibt. Für einen zusätzlichen Bonus werden die Zeichenfolgen in derselben Reihenfolge wie in der Frage zurückgegeben.
Beispielverwendung:
Erweitert:
Ich werde morgen eine Erklärung hinzufügen.
quelle
Python, 212 Zeichen
Ich hatte gehofft, unter 200 zu werden, aber trotzdem bin ich ziemlich zufrieden damit.
quelle
Javascript ES6, 142 Bytes
quelle
F: 70 Bytes
definiert eine Funktion f, die eine Zeichenfolge akzeptiert und eine Liste von Zeichenfolgen (Wörtern) zurückgibt
Als Lambda (anonyme Funktion) löschen wir die ersten 2 Zeichen f :, die Länge beträgt also 68 Bytes
Prüfung
("catsup"; "cats"; "cat"; "catcher"; "catches"; "catamaran"; "catacomb"; "catapult"; "catapulting")
("donut"; ""; "cruller")
""
Anmerkungen
"" gibt eine Liste von Zeichenfolgen an, die nur eine leere Zeichenfolge enthält
Symbole sind atomar. Das Drücken / Aufsetzen eines Symbols auf dem Stapel ist eine einfache Operation, die nicht von der Länge des Symbols abhängt (siehe Erläuterung).
Erläuterung
Q ist ein Cousin von APL (kx.com)
Pseudocode:
quelle
Cobra - 181
quelle