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.
fonte
(a,(_:t))
pode ser em(a,_:t)
vez dissoJava, 206 bytes
Define uma função que aceita uma string como argumento e retorna uma lista de strings. Para um bônus adicional, ele retorna as strings na mesma ordem que a pergunta.
Exemplo de uso:
Expandido:
Vou adicionar uma explicação amanhã.
fonte
Python, 212 caracteres
Eu esperava ter menos de 200 anos, mas ainda estou muito feliz com isso.
fonte
Javascript ES6, 142 bytes
fonte
Q: 70 bytes
define uma função f que aceita uma string e retorna uma lista de strings (palavras)
Como lambda (função anônima), eliminamos os 2 primeiros caracteres f :, então o comprimento é de 68 bytes
Teste
("ketchup"; "cats"; "cat"; "catcher"; "catchs"; "catamaran"; "catacomb"; "catapult"; "catapulting")
("rosquinha"; ""; "cruller")
, ""
Notas
, "" indica uma lista de cadeias que contém apenas uma cadeia vazia
Símbolos são atômicos. Pressionar / estourar um símbolo na pilha é uma operação simples, não afetada pelo comprimento do símbolo (consulte a explicação)
Explicação
Q é um primo da APL (kx.com)
Pseudo-código:
fonte
Cobra - 181
fonte