Escriba una función que tome como entrada un conjunto de enteros (puede ser una lista, matriz o cualquier otro contenedor con números distintos), y genera la lista de todas sus permutaciones.
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 [[]]
Sería bueno ser golpeado en el mismo idioma, ¡pero las implementaciones en otros idiomas son más que bienvenidas!
code-golf
combinatorics
permutations
zxul767
fuente
fuente
Python, 52
La entrada es un conjunto. La salida es una lista de listas.
Esto es más corto que la respuesta que hace todo el trabajo con un incorporado .
fuente
J, 11 caracteres
Uso:
Explicación:
i.@!@#
usa tres verbos para devolver una lista de 0 a (! n) -1 donde n es el número de elementos en la lista dada.[
devuelve la lista en sí. En el ejemplo que se muestra da0 1 2 3 4 5 A. 1 3 5
.A.
devuelve una posible permutación de la segunda lista para cada elemento en la primera lista (tipo de - la explicación adecuada se da aquí ).fuente
Python - 55 caracteres
fuente
Haskell,
4443¡Esencialmente lo mismo que la solución de ugoren, pero Haskell es mejor en la comprensión de listas!
Por supuesto, también puede hacer
30
Enfoque más eficiente, que no requiere una comparación de igualdad:
92
Como consecuencia, este también funciona cuando hay elementos duplicados en la lista.
fuente
p=Data.List.permutations
. Sin embargo, se siente como hacer trampa. Además,Data.List.permutations
no genera las permutaciones en orden lexicográfico.p[]=[[]]
como un caso base, ahorrando dos bytes.en Q (48)
Uso de la muestra:
fuente
Ruby - 23 caracteres
por ejemplo da
f[[1,2,3]]
salida a esto .pero usar se
[].permutation
siente como hacer trampa, así que:Ruby - 59 caracteres
probado con
fuente
f(array) { return array.sort(); }
Python - 58 caracteres
Un poco más corto que el de ugoren, tomando un conjunto como entrada:
fuente
C,
270243239 caracteresLa función P (n, a) devuelve un puntero a la n! permutaciones de a, empaquetadas una tras otra en una matriz gigante.
fuente
<malloc.h> isn't needed (ignore the warnings).
sizeof n` es 4 (la portabilidad es agradable, pero más corta es mejor). Utilice parámetros adicionales como variables (pp(n,a,N,i)
. Ej .).int*p(..)int*a,o;
. El uso de variables globales en lugar de parámetros y valores de retorno a menudo ayuda.K, 30 bytes
No hay construcciones!
fuente
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}
Prueba:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
devuelve esto .fuente
R
Como estamos hablando de permutaciones, permítanme mostrar al menos una solución en R:
fuente
Perl 188
Sin rutinas de biblioteca, sin recursividad
fuente
Scala 30:
Scala 195, quick'n'dirty, sin permutaciones de la biblioteca:
Scala 293, completo, tipo seguro de iterador:
fuente
Python - 50 caracteres
fuente
Pyth, 4 bytes
Sí, Pyth se creó después de publicar este desafío y todo. Esto sigue siendo realmente genial. :RE
Demo en vivo.
Leer de stdin es un byte más corto:
fuente
JavaScript
143136134123fuente
js function p(s,a="",c="",i,z=[]){
lugar dejs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Brachylog , 2 bytes
Pruébalo en línea!
fuente
Python, 53 bytes
fuente
Jalea , 2 bytes
Pruébalo en línea!
¡Yay por las builtins!
fuente
K (oK) , 3 bytes
Solución
Pruébalo en línea!
Explicación:
Es un acceso directo integrado de 3 bytes a la siguiente función integrada de 47 bytes:
... que se puede acortar a 23 bytes si sabemos que estamos obteniendo una lista de entradas como entrada:
fuente
Axioma, 160 bytes
sin golf
Todo esto llama a una función de biblioteca que proporciona permutación en el índice (solo enteros como permutación como permutaciones en [1], permutaciones en [1,2], permutaciones en [1,2,3] etc.). Por lo tanto, es suficiente obtener estos conjuntos de índices y construir las listas; Hay que tener en cuenta que esto parece compilarse bien para cada lista de tipo X
fuente
Japt , 1 byte
Intérprete japonés
Esto se golpeó y no tenía una respuesta de Japt, así que pensé en seguir adelante y agregar una.
á
cuando se aplica a una matriz y sin ningún argumento es el incorporado para "obtener todas las permutaciones". El-R
indicador utilizado en el enlace del intérprete solo modifica cómo se imprime el resultado.fuente
APL (NARS), 39 caracteres, 78 bytes
prueba:
fuente
05AB1E -
21 bytesœ
La entrada debe ser una matriz / lista.
Explicación:
Salvó un byte gracias a Erik the Outgolfer
fuente