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.