Écrivez une fonction qui prend en entrée un ensemble d'entiers (peut être une liste, un tableau ou tout autre conteneur avec des nombres distincts), et génère la liste de toutes ses permutations.
Python (95 caractères) :
p=lambda s:s and sum(map(lambda e:map(lambda p:[e]+p,p(filter(lambda x:x!=e,s))),s),[]) or [[]]
Ce serait bien d'être battu dans la même langue, mais les implémentations dans d'autres langues sont plus que bienvenues!
code-golf
combinatorics
permutations
zxul767
la source
la source
Python, 52
L'entrée est un ensemble. La sortie est une liste de listes.
C'est plus court que la réponse qui fait tout le travail avec une fonction intégrée .
la source
J, 11 caractères
Usage:
Explication:
i.@!@#
utilise trois verbes pour renvoyer une liste de 0 à (! n) -1 où n est le nombre d'éléments dans la liste donnée.[
renvoie la liste elle-même. Dans l'exemple illustré qui donne0 1 2 3 4 5 A. 1 3 5
.A.
renvoie une permutation possible de la deuxième liste pour chaque élément de la première liste (sorte de - l'explication appropriée est donnée ici ).la source
Python - 55 caractères
la source
Haskell,
4443Essentiellement la même que la solution d'Ugoren, mais Haskell est meilleur dans la compréhension des listes!
Bien sûr, cela peut aussi faire
30
Une approche plus efficace, qui ne nécessite pas de comparaison d'égalité:
92
Par conséquent, celui-ci fonctionne également lorsqu'il y a des éléments en double dans la liste.
la source
p=Data.List.permutations
. Cela ressemble à de la triche, cependant. De plus,Data.List.permutations
ne produit pas les permutations dans l'ordre lexicographique.p[]=[[]]
comme cas de base à la place, en économisant deux octets.en Q (48)
Exemple d'utilisation:
la source
Rubis - 23 caractères
par exemple,
f[[1,2,3]]
émet ceci .mais utiliser
[].permutation
, c'est comme tricher, donc:Rubis - 59 caractères
testé avec
la source
f(array) { return array.sort(); }
Python - 58 caractères
Légèrement plus court que celui d'Ugoren, en prenant un ensemble en entrée:
la source
C,
270243239 caractèresLa fonction P (n, a) renvoie un pointeur sur le n! permutations d'un, emballés les uns après les autres dans un tableau géant.
la source
<malloc.h> isn't needed (ignore the warnings).
sizeof n` est 4 (la portabilité est agréable, mais plus courte est plus agréable). Utilisez des paramètres supplémentaires comme variables (par exemplep(n,a,N,i)
).int*p(..)int*a,o;
. L'utilisation de variables globales au lieu de paramètres et de valeurs de retour est souvent utile.K, 30 octets
Pas de builtins!
la source
JS -
154146 caractèresfunction 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}
Test:
f([1,2,3,4,5]).map(function(a){return a.join('')}).join('\n')
renvoie ceci .la source
R
Puisque nous parlons de permutations, permettez-moi de montrer au moins une solution dans R:
la source
Perl 188
Pas de routines de bibliothèque, pas de récursivité
la source
Scala 30:
Scala 195, quick'n'dirty, sans permutations de la bibliothèque:
Scala 293, itérateur sûr de type adulte:
la source
Python - 50 caractères
la source
Pyth, 4 octets
Oui, Pyth a été créé après la publication de ce défi et tout. C'est encore vraiment cool. :RÉ
Démo en direct.
La lecture depuis stdin est un octet plus court:
la source
Javascript
143136134123la source
js function p(s,a="",c="",i,z=[]){
au lieu dejs function p(s,a,c,i,z){if(!z)a=c="",z=[]
Brachylog , 2 octets
Essayez-le en ligne!
la source
Python, 53 octets
la source
Gelée , 2 octets
Essayez-le en ligne!
Ouais pour les intégrés!
la source
K (oK) , 3 octets
Solution
Essayez-le en ligne!
Explication:
Il s'agit d'un raccourci intégré de 3 octets vers la fonction intégrée de 47 octets suivante:
... qui peut être raccourci à 23 octets si nous savons que nous obtenons une liste d'entiers en entrée:
la source
Axiome, 160 octets
non golfé
Tout cela appelle une fonction de bibliothèque qui donne une permutation sur l'index (uniquement des entiers comme permutation comme permutations sur [1], permutations sur [1,2], permutations sur [1,2,3] etc.). des indices et construire les listes; Il faut noter que cela semble être bien compilé pour chaque liste de type X
la source
Japt , 1 octet
Interprète Japt
Cela a été heurté et n'a pas eu de réponse Japt, alors j'ai pensé que j'irais de l'avant et j'en ajouterais une.
á
lorsqu'il est appliqué à un tableau et sans aucun argument, c'est la fonction intégrée pour "obtenir toutes les permutations". L'-R
indicateur utilisé dans le lien interprète modifie uniquement la façon dont le résultat est imprimé.la source
APL (NARS), 39 caractères, 78 octets
tester:
la source
05AB1E -
21 octetsœ
L'entrée doit être un tableau / liste.
Explication:
Un octet enregistré grâce à Erik l'Outgolfer
la source