Tarefa
Seu objetivo, se você optar por aceitá-lo, é escrever um programa que, dada uma string de entrada (ou matriz de caracteres), produza todas as permutações possíveis das letras nessa string. Eu sou meticuloso com minha saída, portanto deve ser classificado em ordem alfabética, sem duplicatas.
Exemplo:
Entrada: buzz
Saída:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
Regras
- Isso é código-golfe, então o código mais curto vence.
- Os espaços à direita em cada / qualquer linha estão ok
- Uma única nova linha após a última linha é permitida (mas não mais)
code-golf
string
permutations
Brian Gradin
fonte
fonte
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
ap
) :-)Respostas:
Gelatina , 5 bytes
Experimente online!
Explicação
fonte
05AB1E ,
43 bytesAtualizado, desde que uma atualização
œ
quebrou a versão antiga,que também salvou um byte, conforme sugerido pelo Magic Octopus Urn .
Experimente online!
Explicação
fonte
œê»
é bom para não legado.œ
agora retorna uma lista de strings nas duas.MATL , 4 bytes
Experimente online!
Explicação
fonte
Python 3.5, 79 bytes
Uma função que recebe entrada como uma lista de caracteres e saídas por impressão.
Recursivamente faz todas as permutações distintas, retirando cada caractere possível em ordem alfabética dos caracteres distintos restantes e anexando-o à saída em andamento
w
. Em seguida, recursamos com esse caractere removido. Quando a entrada é esvaziada, imprimimosw
.fonte
CJam , 5 bytes
Obrigado a @EriktheOutgolfer por uma correção (em
q
vez der
)Experimente online!
Explicação
fonte
Pitão - 5 bytes
Experimente online aqui .
fonte
S
realmente necessário?Haskell, 46 bytes
2 bytes salvos graças a nimi
fonte
f=
.J, 19 bytes
Caso de teste
Explicação
Este é um trem de 4:
Basicamente:
fonte
[:~.i.@!@#A./:~
que você deve economizar alguns bytesJavaScript (Firefox 30+),
129124 bytesNada mal para uma linguagem sem permutação incorporada ...
fonte
Python 3.5, 81 bytes:
Realmente ... 81 bytes quando a próxima resposta mais longa for 48 bytes ... suspiro . Bem, vou tentar esse golfe o máximo que puder, mas as dicas de golfe ainda são muito apreciadas.
Além disso, aqui está a solução mais curta que eu poderia encontrar no Python 2 com 86 bytes :
Aparentemente, em Python 2,
[*...]
retorna aeSyntax Error
, desde quepermutations
retornaitertools.permutations object at 0x...
, a próxima maneira mais curta (que eu conheço) de extrair as permutações exclusivas é usar{''.join(i)for i in permutations(f)}
wheref
é a string de entrada.Por fim, observe que essas são duas funções lambda e, portanto, devem ser chamadas no formato
print(<Function Name>(<Input String>))
.fonte
Mathematica,
3423 bytesA entrada deve ser uma lista de caracteres.
Explicação
Encontre todas as permutações da entrada, classificadas e sem duplicatas.
Imprima-os um por um.
fonte
Braquilog , 9 bytes
Experimente online!
Explicação
fonte
Perl 6 ,
4944 bytesString como entrada
Lista de caracteres como entrada
Expandido
fonte
#perl6
canal freenode.net .».say
vez de.map: *.put
».say
tem permissão para fazê-los em qualquer ordem, e ao mesmo tempo foi propositadamente feito fora de ordem.Braquilog (v2), 5 bytes
Experimente online!
Encontrar
ᵘ
niquep
ermutations de entrada, so
ta-los,ᵐ
apẉ
riteln (escrita com nova linha) sobre essa matriz.fonte
Python 3,
7785 bytesAgora classifica!
fonte
from itertools import*
o contrárioimport itertools as i
. Você seria capaz de salvar um byte substituindoi.permutations
porpermutations
.{*...}
vez deset(...)
economiza mais dois bytes.PowerShell v3 +, 171 bytes
O PowerShell v3 apresentou o
-Unique
sinalizador noSort-Object
cmdlet, por isso é alguns bytes menor que a versão v2 abaixo, pois não precisamosSelect
primeiro.versão v2, 178 bytes:
O PowerShell não possui permutações internas; portanto, emprestei meu código de Prime Factors Buddies e o ajustei levemente para uso aqui.
São essencialmente três porções, as quais expandirei abaixo.
param([char[]]$x)$a,$b=$x;$a=,$a
Recebe entrada$x
, lança comochar
matriz, retira a primeira letra$a
e o restante para$b
e depois reformula$a
como uma matriz com o operador de vírgula.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Faz um loop pelas letras restantes ($b
), cada iteração pega a próxima letra e armazena$z
e deixa a restante$b
, concatenando a matriz no$a
resultado do envio$a
através de seu próprio loop - cada item de$a
(armazenado temporariamente$c
) é repetido próprio.length
e, em seguida,$z
é inserido em todas as posições, incluindo anexos e anexos com$z$c
e$c$z
. Por exemplo, para$c = '12'
e$z = '3'
, isso resultará na'132','312','123'
concatenação de volta ao$a
.A parte final
$a|?{$_.length-eq$x.count}|select -u|sort
pega cada elemento de$a
e usa aWhere-Object
cláusula para filtrar apenas aqueles que têm o mesmo comprimento que a sequência de entrada, depoisselect
apenas os-u
itens específicos e finalmentesort
os alfabéticos. As seqüências resultantes são todas deixadas no pipeline e a saída via implícitaWrite-Output
acontece na conclusão do programa.fonte
|select -u|sort
para|sort -u
. Certamente 2.0 não tem isso.JavaScript (ES6), 119 bytes
Onde
\n
representa o caractere literal de nova linha. Porta da resposta do @ ETHproduction para usar strings em vez de matrizes. Inverter a saída ou mover a nova linha à direita para o início economiza 3 bytes.fonte
R, 113 bytes
Lê a entrada de stdin. o
permute
pacote é assumida para ser instalado, a fim de chamar aallPerms
função.Vou adicionar uma explicação quando eu chegar em casa do trabalho.
fonte
Java
302300 bytesUngolfed & código de teste:
Experimente aqui.
Entrada: teste
Saída:
fonte
Raquete 82 bytes
Ungolfed:
Teste:
Ouput:
fonte
Groovy, 69 bytes
fonte
Ruby, 51 bytes
fonte
puts s.chars.permutation().map(&:join).uniq
43 Bytes
sem definição prévia.Na realidade , 8 bytes
Sugestões de golfe são bem-vindas! Experimente online!
Ungolfing
fonte
Pip , 8 bytes
7 bytes de código, +1 para
-n
sinalizador.Leva uma string como argumento da linha de comando. Experimente online!
O scanner de Pip divide as letras maiúsculas em pedaços de duas letras. Portanto, esse código é
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
,a
sendo o argumento da linha de comando. O-n
sinalizador garante que a lista de resultados seja separada por nova linha. É tudo o que há para isso.fonte
K (oK) , 14 bytes
Solução:
Experimente online!
Explicação:
Use a função de permutação integrada,,
prm
para gerar permutações de comprimento da entrada, aplique essas permutações à entrada, classifique em ordem alfabética e, em seguida, obtenha valores distintos.fonte
Perl 5
-MList::Util=uniq -F
, 68 bytesExperimente online!
fonte
Japt v2.0a0
-R
, 5 bytesTente
fonte
û
é o método center pas; Eu acho que você quis dizern
;)sort
a barra de pesquisa no seu intérprete e clicar no primeiro que encontrei. Masá
parece já dar cada permutação em ordem alfabéticaü
. Eu vou consertar amanhã. As permutações de "buzz" são classificadas porque a palavra em si é - tente com "zzub", por exemplo.n
(é mais fácil digitar)C ++ (gcc) ,
132128 bytesExperimente online!
fonte
Amêijoa , 9 bytes
Explicação
fonte