Escreva um programa que receba (via stdin ou linha de comando) uma string com a forma recursiva
PREFIX[SUFFIXES]
Onde
PREFIXpode ser qualquer sequência de letras minúsculas (az), incluindo a sequência vazia, eSUFFIXESpode 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 é
cate 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 catapultingporque 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 crulleronde 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.
