Schreiben Sie ein Programm, das (über stdin oder die Befehlszeile) einen String mit der rekursiven Form aufnimmt
PREFIX[SUFFIXES]
wo
PREFIXkann eine beliebige Zeichenfolge aus Kleinbuchstaben (az) sein, einschließlich der leeren Zeichenfolge undSUFFIXESkann 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
catund 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 catapultingweil 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 crullerDabei 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, dahatsdoppelt 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.
