Écrire un programme qui prend (via stdin ou ligne de commande) une chaîne au format récursif
PREFIX[SUFFIXES]
où
PREFIX
peut être n'importe quelle chaîne de lettres minuscules (az), y compris la chaîne vide, etSUFFIXES
peut être n'importe quelle séquence de chaînes avec la forme récursivePREFIX[SUFFIXES]
concaténée ensemble, y compris la séquence vide.
Générez une liste de chaînes en lettres minuscules à partir de l'entrée en évaluant récursivement la liste des chaînes dans chacun des suffixes et en les ajoutant au préfixe. Sortie pour stdout les chaînes de cette liste dans n'importe quel ordre, une par ligne (plus une nouvelle ligne de fin facultative).
Exemple
Si l'entrée est
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
le préfixe est
cat
et et les suffixes sonts[up[][]]
,[]
,ch[e[r[]s[]]]
eta[maran[]comb[]pult[[]ing[]]]
. Chaque suffixe a son propre préfixe et suffixes à son tour.La sortie serait ces 9 mots dans n'importe quel ordre
catsup cats cat catcher catches catamaran catacomb catapult catapulting
parce que l'entrée code cet arbre
et chacun des 9 mots de sortie peut être formé en parcourant l'arbre de la racine à la feuille.
Remarques
N'oubliez pas que le préfixe peut être la chaîne vide, donc quelque chose comme
[donut[][]cruller[]]
est une entrée valide dont la sortie serait (dans n'importe quel ordre)
donut cruller
où la ligne vide correspond à la chaîne vide à laquelle correspond le deuxième suffixe.
La séquence de suffixes peut également être vide, donc le cas d'entrée trivial
[]
a une seule ligne vide en sortie:
- Vous pouvez supposer que l'entrée ne produira que des mots de sortie uniques.
- par exemple, ce
hat[s[]ter[]s[]]
serait une entrée non valide car ellehats
est codée deux fois. - De même,
[[][]]
n'est pas valide car la chaîne vide est codée deux fois.
- par exemple, ce
- Vous ne pouvez pas supposer que l'entrée est aussi courte ou compressée que possible.
- Par exemple, le
'e'
nœud dans l'exemple principal ci-dessus pourrait être combiné avec le'ch'
nœud, mais cela ne signifie pas que l'entrée n'est pas valide. - De même,
[[[[[]]]]]
est valide, malgré l'encodage uniquement de la chaîne vide d'une manière sous-optimale.
- Par exemple, le
- Au lieu d'un programme, vous pouvez écrire une fonction qui prend la chaîne d'entrée comme argument et imprime la sortie normalement ou la renvoie sous forme de chaîne ou de liste.
Le code le plus court en octets gagne.