Dado um conjunto de letras, produza todas as strings feitas com essas letras. (Esta é a estrela Kleene do conjunto.) Por exemplo, para {'a','b'}
, as strings são:
'', 'a', 'b', 'aa', 'ab', 'ba', 'bb', 'aaa', 'aab', ...
Entrada: uma coleção não vazia de letras distintas a..z
. Podem ser caracteres ou cadeias de caracteres únicos.
Saída: todas as strings nessas letras, em qualquer ordem, sem repetições. Você pode usar listas de caracteres como seqüências de caracteres.
Esta é uma lista infinita, para que você possa produzi-la por:
- Correndo para sempre escrevendo mais e mais strings. Essas cadeias de caracteres podem ser escritas em qualquer formato simples e separado, o que significa que você pode dizer onde cada cadeia termina, mas as cadeias não são subdivididas em grupos.
- Tomando um número
n
como entrada e emitindo as primeirasn
strings em qualquer formato separado plano - Produzindo cada sequência por vez de um objeto gerador
- Produzindo um objeto infinito
Certifique-se de que seu método acabe produzindo todas as seqüências de caracteres na saída, pois é possível produzir infinitas seqüências de caracteres do conjunto sem nunca chegar a algumas.
Você não pode produzi-lo
- Produzindo a
n
th string dadan
- Fornecer um oráculo de associação que decida se uma determinada sequência pertence ao conjunto
Os internos são permitidos, mas peço aos eleitores que prestem atenção nas respostas que implementam a operação por conta própria das que dependem principalmente de um interno.