Escreva um programa que receba (via stdin ou linha de comando) uma string com a forma recursiva
PREFIX[SUFFIXES]
Onde
PREFIX
pode ser qualquer sequência de letras minúsculas (az), incluindo a sequência vazia, eSUFFIXES
pode ser qualquer sequência de seqüências de caracteres com a forma recursivaPREFIX[SUFFIXES]
concatenada em conjunto, incluindo a sequência vazia.
Gere uma lista de cadeias de letras minúsculas a partir da entrada, avaliando recursivamente a lista de cadeias de caracteres em cada um dos sufixos e anexando-as ao prefixo. Saída para stdout as strings nesta lista em qualquer ordem, uma por linha (mais uma nova linha à direita opcional).
Exemplo
Se a entrada for
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
em seguida, o prefixo é
cat
e os sufixos e sãos[up[][]]
,[]
,ch[e[r[]s[]]]
, ea[maran[]comb[]pult[[]ing[]]]
. Cada sufixo possui seu próprio prefixo e sufixos.A saída seria essas 9 palavras em qualquer ordem
catsup cats cat catcher catches catamaran catacomb catapult catapulting
porque a entrada codifica esta árvore
e cada uma das 9 palavras de saída pode ser formada atravessando a árvore da raiz para a folha.
Notas
Lembre-se de que o prefixo pode ser a string vazia, então algo como
[donut[][]cruller[]]
é uma entrada válida cuja saída seria (em qualquer ordem)
donut cruller
onde a linha vazia é para a sequência vazia que o segundo sufixo corresponde.
A sequência de sufixos também pode estar vazia, portanto, o caso de entrada trivial
[]
tem uma única linha vazia como saída:
- Você pode assumir que a entrada produzirá apenas palavras de saída exclusivas.
- por exemplo,
hat[s[]ter[]s[]]
seria uma entrada inválida porquehats
é codificada duas vezes. - Da mesma forma,
[[][]]
é inválido porque a cadeia vazia é codificada duas vezes.
- por exemplo,
- Você não pode presumir que a entrada seja a mais curta ou compactada possível.
- por exemplo, o
'e'
nó no exemplo principal acima pode ser combinado com o'ch'
nó, mas isso não significa que a entrada seja inválida. - Da mesma forma,
[[[[[]]]]]
é válido, apesar de codificar apenas a sequência vazia de uma maneira subótima.
- por exemplo, o
- Em vez de um programa, você pode escrever uma função que pega a string de entrada como argumento e imprime a saída normalmente ou a retorna como uma string ou lista.
O código mais curto em bytes vence.