Pour ce défi, vous allez créer une fonction (votre fonction peut être un programme complet) qui prend une liste en entrée et renvoie une permutation de cette liste. Votre fonction doit respecter les exigences suivantes.
Elle doit être déterministe.
Composer votre fonction avec elle-même un nombre variable de fois devrait être capable d'obtenir une liste de n'importe laquelle de ses permutations.
Il s'agit d'une question de code-golf, donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Règles supplémentaires
Vous pouvez prendre tout type de liste, (
[Integer]
,[String]
,[[Integer]]
) aussi longtemps qu'il- Peut être non vide
- Peut contenir des objets distincts avec au moins 16 valeurs possibles. (Vous ne pouvez pas utiliser un Haskell
[()]
et prétendre que votre fonction estid
) - Peut contenir des objets en double (pas d'ensembles)
Vous pouvez écrire un programme ou une fonction, mais vous devez respecter les E / S standard.
code-golf
permutations
Ad Hoc Garf Hunter
la source
la source
S_n
n'est cyclique que pourn<3
next_permutation
fonction.Réponses:
CJam (11 octets)
Démo en ligne montrant le cycle complet d'une liste de quatre éléments avec un élément en double.
Dissection
la source
Mathematica + Combinatorica (package intégré) 34 octets
19 octets pour charger le package et 15 pour la fonction.
Usage:
Sans le intégré, 61 octets
Combinatorica est censé être entièrement intégré à Mathematica, mais je pense que la fonction NextPermutation a été négligée.
la source
Python 3 , 90 octets
Essayez-le en ligne!
la source
C ++, 42 octets
Cette opération exacte est intégrée dans C ++.
la source
#include
?JavaScript (ES6),
145139137134108 octets25 octets sauvés grâce à @Neil!
Prend la saisie sous forme de tableau de caractères alphabétiques. Renvoie la permutation suivante sous forme d'un autre tableau.
Comment?
Il s'agit d'une génération en ordre lexicographique qui traite les 4 étapes suivantes à chaque itération:
Trouver le plus grand index X tel que a [X] <a [X + 1]
Trouver le plus grand indice Y supérieur à X tel que a [Y]> a [X]
Échangez la valeur d' un [X] avec celle d' un [Y]
Trier la séquence de [X + 1] jusqu'à et y compris l'élément final, par ordre lexicographique croissant
Exemple:
Démo
Afficher l'extrait de code
la source
v<a[i+1]&&(t=v,x=i)
économisez un octet, et vous pourriez être en mesure de faire plus d'économies en utilisantsplice
au lieu de deuxslice
s.map
s, pour 112 octets:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
allait marcher sinon j'aurais essayé ...Gelée , 6 octets
Parcourt les permutations dans l'ordre lexicographique décroissant.
Essayez-le en ligne!
Comment ça fonctionne
la source
C, 161 octets
Algorithme O (n) réel.
Exemple d'utilisation:
la source
Python 2 , 154 octets
Essayez-le en ligne!
la source
exec
j'ai donné toutes sortes d'erreurs dans une fonctionGelée , 10 octets
Essayez-le en ligne!
Trier> toutes les permutations> trouver une entrée> ajouter 1> indexer dans "toutes les permutations"
la source
Œ¿‘œ?Ṣ
). Je n'avais pas envie de voler depuis, eh bien, même algo.Q
truc. Vous pouvez toujours jouer au golfṢŒ!Qµi³‘ị
.05AB1E , 7 octets
Essayez-le en ligne!
la source
PHP , 117 octets
Prend entrée / sortie comme liste de chaînes de lettres inférieures
Essayez-le en ligne!
la source