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.
fuente
(a,(_:t))
puede ser(a,_:t)
en su lugarJava, 206 bytes
Define una función que acepta una cadena como argumento y devuelve una lista de cadenas. Para obtener una bonificación adicional, devuelve cadenas en el mismo orden que la pregunta.
Ejemplo de uso:
Expandido:
Agregaré una explicación mañana.
fuente
Python, 212 caracteres
Esperaba llegar a menos de 200, pero aún así estoy bastante feliz con esto.
fuente
Javascript ES6, 142 bytes
fuente
Q: 70 bytes
define una función f que acepta una cadena y devuelve una lista de cadenas (palabras)
Como lambda (función anónima) soltamos los primeros 2 caracteres f :, entonces la longitud es 68 Bytes
Prueba
("catsup"; "cats"; "cat"; "catcher"; "catches"; "catamaran"; "catacomb"; "catapult"; "catapulting")
("donut"; ""; "cruller")
, ""
Notas
, "" indica que una lista de cadenas que contiene solo tiene una cadena vacía
Los símbolos son atómicos. Empujar / hacer estallar un símbolo en la pila es una operación simple que no se ve afectada por la longitud del símbolo (ver explicación)
Explicación
Q es primo de APL (kx.com)
Pseudocódigo:
fuente
Cobra - 181
fuente