Escreva uma função que tenha como entrada um conjunto de números inteiros (pode ser uma lista, matriz ou qualquer outro contêiner com números distintos) e produza a lista de todas as suas permutações.
Python (95 caracteres) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Seria bom ser derrotado no mesmo idioma, mas implementações em outros idiomas são mais que bem-vindas!
code-golf
combinatorics
permutations
zxul767
fonte
fonte
Python, 52
Entrada é um conjunto. Saída é uma lista de listas.
Isso é mais curto que a resposta que faz todo o trabalho com um builtin .
fonte
J, 11 caracteres
Uso:
Explicação:
i.@!@#
usa três verbos para retornar uma lista de 0 a (! n) -1, em que n é o número de itens na lista fornecida.[
retorna a própria lista. No exemplo mostrado que dá0 1 2 3 4 5 A. 1 3 5
.A.
retorna uma permutação possível da segunda lista para cada item da primeira lista (tipo de - a explicação apropriada é dada aqui ).fonte
Python - 55 caracteres
fonte
Haskell,
4443Essencialmente o mesmo que a solução da ugoren, mas Haskell é melhor na compreensão de listas!
Claro, também pode fazer
30
Abordagem mais eficiente, que não requer uma comparação de igualdade:
92
Como conseqüência, este também funciona quando há elementos duplicados na lista.
fonte
p=Data.List.permutations
. Parece trapaça, no entanto. Além disso,Data.List.permutations
não gera as permutações em ordem lexicográfica.p[]=[[]]
como um caso base, salvando dois bytes.em Q (48)
Uso da amostra:
fonte
Ruby - 23 caracteres
por exemplo,
f[[1,2,3]]
gera isso .mas usar
[].permutation
parece trapaça, então:Ruby - 59 caracteres
testado com
fonte
f(array) { return array.sort(); }
Python - 58 caracteres
Um pouco menor que o de ugoren, tomando um conjunto como entrada:
fonte
C,
270243239 caracteresA função P (n, a) retorna um ponteiro para n! permutações de a, embaladas uma após a outra em uma matriz gigante.
fonte
<malloc.h> isn't needed (ignore the warnings).
sizeof n` é 4 (portabilidade é boa, mas menor é melhor). Use parâmetros extras como variáveis (por exemplop(n,a,N,i)
).int*p(..)int*a,o;
. O uso de variáveis globais em vez de parâmetros e valores de retorno geralmente ajuda.K, 30 bytes
Sem builtins!
fonte
JS -
154146 caracteresfunction f(x){var a=[],m;(m=x.length)>1?f(x.slice(1)).map(function(y){for(l=m;l--;a.push(y.slice(0,l).concat(x[0],y.slice(l))));}):a=[x];return a}
Teste:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
retorna isso .fonte
R
Como estamos falando de permutações, deixe-me mostrar pelo menos uma solução em R:
fonte
Perl 188
Sem rotinas de biblioteca, sem recursão
fonte
Scala 30:
Scala 195, quick'n'dirty, sem permutações da biblioteca:
Scala 293, adulto, tipo iterador seguro:
fonte
Python - 50 caracteres
fonte
Pitão, 4 bytes
Sim, Pyth foi criado depois que esse desafio foi lançado e tudo. Isso ainda é muito legal. : D
Demonstração ao vivo.
Ler a partir de stdin é um byte mais curto:
fonte
Javascript
143136134123fonte
js function p(s,a="",c="",i,z=[]){
em vez dejs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Braquilog , 2 bytes
Experimente online!
fonte
Python, 53 bytes
fonte
Geléia , 2 bytes
Experimente online!
Yay para builtins!
fonte
K (oK) , 3 bytes
Solução
Experimente online!
Explicação:
É um byte 3 embutido atalho para a seguinte embutido 47 função de bytes:
... que pode ser reduzido para 23 bytes se soubermos que estamos recebendo uma lista de entradas como entrada:
fonte
Axioma, 160 bytes
destroçado
Tudo isso chama uma função de biblioteca que fornece permutação no índice (apenas números inteiros como permutação como permutações em [1], permutações em [1,2], permutações em [1,2,3] etc.). de índices e construir as listas; É preciso notar que isso parece ser compilado para todas as listas do tipo X
fonte
Japt , 1 byte
Intérprete Japt
Isso foi prejudicado e não tinha uma resposta em japonês, então imaginei que iria em frente e adicionaria uma.
á
quando aplicado a uma matriz e sem argumentos é o construtor para "obter todas as permutações". O-R
sinalizador usado no link do intérprete modifica apenas como o resultado é impresso.fonte
APL (NARS), 39 caracteres, 78 bytes
teste:
fonte
05AB1E -
21 bytesœ
A entrada deve ser uma matriz / lista.
Explicação:
Guardou um byte graças a Erik the Outgolfer
fonte