Escriba un programa que tome (a través de stdin o línea de comando) una cadena con la forma recursiva
PREFIX[SUFFIXES]
dónde
PREFIX
puede ser cualquier cadena de letras minúsculas (az), incluida la cadena vacía, ySUFFIXES
puede ser cualquier secuencia de cadenas con la forma recursivaPREFIX[SUFFIXES]
concatenada, incluida la secuencia vacía.
Genere una lista de cadenas con letras minúsculas a partir de la entrada evaluando recursivamente la lista de cadenas en cada uno de los sufijos y agregándolas al prefijo. Salida para stdout las cadenas en esta lista en cualquier orden, una por línea (más una nueva línea final opcional).
Ejemplo
Si la entrada es
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
a continuación, el prefijo es
cat
y y los sufijos sons[up[][]]
,[]
,ch[e[r[]s[]]]
, ya[maran[]comb[]pult[[]ing[]]]
. Cada sufijo tiene su propio prefijo y sufijos a su vez.La salida sería estas 9 palabras en cualquier orden
catsup cats cat catcher catches catamaran catacomb catapult catapulting
porque la entrada codifica este árbol
y cada una de las 9 palabras de salida se puede formar atravesando el árbol de raíz a hoja.
Notas
Recuerde que el prefijo puede ser la cadena vacía, así que algo así como
[donut[][]cruller[]]
es una entrada válida cuya salida sería (en cualquier orden)
donut cruller
donde la línea vacía es para la cadena vacía que coincide con el segundo sufijo.
La secuencia de sufijo también puede estar vacía, por lo que el caso de entrada trivial
[]
tiene una sola línea vacía como salida:
- Puede suponer que la entrada solo producirá palabras de salida únicas.
- por ejemplo,
hat[s[]ter[]s[]]
sería una entrada no válida porquehats
se codifica dos veces. - Del mismo modo,
[[][]]
no es válido porque la cadena vacía se codifica dos veces.
- por ejemplo,
- Es posible que no se supone que la entrada sea lo más corta o se comprime como sea posible.
- por ejemplo, el
'e'
nodo en el ejemplo principal anterior podría combinarse con el'ch'
nodo, pero eso no significa que la entrada no sea válida. - Del mismo modo,
[[[[[]]]]]
es válido, a pesar de solo codificar la cadena vacía de una manera subóptima.
- por ejemplo, el
- En lugar de un programa, puede escribir una función que tome la cadena de entrada como argumento e imprima la salida normalmente o la devuelva como una cadena o lista.
El código más corto en bytes gana.