Apesar de ter 17 perguntas marcadas com anagramas , ainda não temos essa pergunta, então aqui está.
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 é uma cópia exata da sequência original. Um anagrama não precisa ser ou conter palavras reais.
Entrada
Você pode aceitar a sequência, que pode ter qualquer comprimento> 0, por qualquer método de entrada padrão. Pode conter caracteres ASCII.
Resultado
Você pode emitir todos os anagramas 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
As brechas padrão não são permitidas
Pontuação
Isso é código-golfe , menos bytes ganhos.
fonte
Respostas:
05AB1E , 3 bytes
Uma função que deixa a pilha com uma lista dos anagramas no topo (e como seu único item). Como um programa completo, imprime uma representação dessa lista.
Experimente online!
Quão?
fonte
Ruby , 45 bytes
Experimente online!
Apesar de ter um built-in, a palavra "permutação" é realmente longa :(
fonte
|[]
parece desnecessário?|[]
é mais curto que.uniq
.MATL , 7 bytes
Experimente online!
Explicação
fonte
pyth ,
84Teste online .
fonte
Japonês , 6 bytes
Experimente online!
Explicação
fonte
Haskell,
4840 bytesExperimente online!
Economizou 8 bytes graças à
tail
dica de Leo .fonte
tail
vez dedelete x
, pois a string original sempre será a primeira na lista de permutações. Isso permitirá que você mude para uma solução sem pontos e, em seguida, para uma função sem nome, muitos bytes a serem salvos!CJam , 8 bytes
Experimente online!
Explicação
fonte
Mathematica, 47 bytes
fonte
StringJoin/@Rest@Permutations@Characters@#&
is 43 bytes.Jelly, 4 bytes
A monadic link taking a list of characters and returning a list of lists of characters - all distinct anagrams that are not equal to the input.
Try it online! (the footer forms a program that joins the list by newlines and prints to avoid the otherwise smashed representation).
How?
fonte
Y
if functions were allowed... I see you just reversed my edit to the question though :/Python 3,
857663 bytesAs a function, and returning strings as list of characters (thanks to @pizzapants184 for telling me it is allowed):
As a function:
85 bytes as a full program:
Could be reduced a bit if outputting strings as ('a', 'b', 'c') is allowed (I am not sure it is).
fonte
Java 8,
245239237 bytes-6 bytes thanks to @OlivierGrégoire.
Typical verbose Java.. I see a lot of <10 byte answers, and here I am with 200+ bytes.. XD
Explanation:
Try it here.
fonte
l.forEach(System.out::println);
instead of your printing loop. Also, I don't likeSet
being defined at the class level without its enclosing class, a lambda defined no one knows where and a method. This just too much for me. I can understand the imports being separated from the rest, but there is nothing self-contained there, it looks more like a collection of snippets than anything else. I'm sorry, but for the first time in PCG, I give -1 :(forEach
. As for the class-levelSet
, what is the alternative? Post the entire class including main-method? Post the entire class excluding the main-method, but including the class itself, interface and function name?public static void main
, just say "the entry method is...". The thing is that your answer as it currently is breaks all the "self-contained" rules. I'm not against binding the rules, but breaking? Yeah, I mind :(Perl 6,
3938 bytesTry it
Try it
Expanded
fonte
C++, 142 bytes
ungolfed
fonte
K (oK), 13 bytes
Solution:
Try it online!
Explanation:
Evaluation is performed right-to-left.
fonte
JavaScript (ES6), 101 bytes
Adopted from a past answer of mine.
Show code snippet
fonte
Perl 5, 89 + 2 (
-F
) = 91 bytesTry it online!
fonte