Esta questão é fortemente baseada nessa questão , mas deve apresentar várias dificuldades adicionais.
Sua tarefa
Você deve escrever um programa ou função que, ao receber uma string, imprima todos os anagramas possíveis. Para os fins desta pergunta, um anagrama é uma sequência que contém o mesmo caractere que a sequência original, mas não é a sequência original. Um subanagrama é um anagrama de uma substring de uma string inserida. Anagramas e subanagramas não precisam ser ou conter palavras reais.
Entrada
Você pode aceitar uma string, que pode ter qualquer tamanho> 0, por qualquer método de entrada padrão. Pode conter caracteres ASCII.
Resultado
Você pode emitir todos os anagramas e subanagramas possíveis da string inserida de qualquer maneira padrão. Você não deve produzir a mesma sequência duas vezes ou produzir uma sequência igual à entrada.
Outras regras
Brechas padrão não são permitidas
Pontuação
Isso é código-golfe , menos bytes ganhos.
fonte
Respostas:
05AB1E , 7 bytes
Uma função que aceita uma string de entrada e deixa uma lista de strings na pilha. Como um programa completo, uma representação da lista é impressa.
Experimente online!
Quão?
fonte
Braquilog (2), 7 bytes
Experimente online!
Explicação
fonte
(v2)
.Geléia , 9 bytes
Um link monádico que aceita uma lista e retorna uma lista de todos os subanagramas distintos, exceto a própria entrada.
Experimente online! (o rodapé imprime a lista resultante unindo-se a novas linhas.)
Quão?
fonte
Pyth, 12
Teste online .
fonte
Japonês , 10 bytes
Experimente online!
Eu tenho que usar
à
,á
eâ
tudo em uma resposta, em ordem também. Que coincidência...Explicação
fonte
Mathematica, 60 bytes
Permutations
usa um argumento numérico opcional que informa quantos valores de entrada usar para as permutações. Se atribuirmos o comprimento da entrada, ela gerará as permutações para todos os subconjuntos da entrada sem duplicatas. Tudo o que precisamos fazer é remover a entrada.fonte
Java 8,
313312306 bytesVersão modificada da minha resposta aqui , onde
p("",s,l);
foi substituída porfor(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));
-6 bytes graças a @ OlivierGrégoire na minha resposta vinculada.
Explicação desta parte:
Experimente aqui.
fonte
Perl 6 , 75 bytes
Tente
Expandido:
fonte