Étant donné un entier positif, génère tous les dérangements de objets.
Détails
- Un dérangement est une permutation sans point fixe. (Cela signifie que dans chaque numéro de dérangement, ne peux pas être dans la ème entrée).
- La sortie doit consister en des dérangements des nombres (ou alternativement ).
- Vous pouvez également toujours imprimer les dérangements de (ou respectivement) mais vous devez le spécifier.
- La sortie doit être déterministe, c'est-à-dire que chaque fois que le programme est appelé avec un certain comme entrée, la sortie doit être la même (ce qui inclut que l'ordre des dérangements doit rester le même), et la sortie complète doit être effectuée dans un temps fini à chaque fois (il ne suffit pas de le faire avec la probabilité 1).
- Vous pouvez supposer que
- Pour certains donnés, vous pouvez soit générer tous les dérangements, soit prendre un autre entier qui sert d'index et imprimer le -ième dérangement (dans l'ordre que vous avez choisi).
Exemples
Notez que l'ordre des dérangements ne doit pas nécessairement être le même que celui indiqué ici:
n=2: (2,1)
n=3: (2,3,1),(3,1,2)
n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1)
OEIS A000166 compte le nombre de dérangements.
Réponses:
Gelée , 6 octets
Un lien monadique acceptant un entier positif qui donne une liste de listes d'entiers.
Essayez-le en ligne!
Comment?
la source
Brachylog , 9 octets
Essayez-le en ligne!
Il s'agit d'un générateur qui génère un dérangement de
[0, …, n-1]
donnén
.Si nous l'enveloppons dans un
ᶠ - findall
métaprédicat, nous obtenons toutes les générations possibles de dérangements par le générateur.Explication
la source
JavaScript (V8) , 85 octets
Une fonction récursive imprimant tous les dérangements basés sur 0.
Essayez-le en ligne!
Commenté
la source
Ruby , 55 octets
Essayez-le en ligne!
Génère tous les dérangements basés sur 0
la source
05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
Wolfram Language (Mathematica) , 55 octets
Essayez-le en ligne!
la source
Japt , 8 octets
Basé sur 0
Essayez-le (le pied de page incrémente tous les éléments pour une comparaison plus facile avec les cas de test)
la source
Python 2 , 102 octets
Essayez-le en ligne!
Indexation basée sur 0, liste de tuples.
itertools
Solution non basée:Python 2 , 107 octets
Essayez-le en ligne!
Indexation 0, lignes de listes, programme complet.
Remarque: Cette solution, même si elle n'importe pas la
itertools
bibliothèque, n'est pas beaucoup plus longue que l'autre qui l'importe, car la majeure partie du volume ici est en train de construire les permutations. Le contrôle de dérangement est en réalité d'environ 7 octets supplémentaires! La raison en est que le contrôle est effectué à la volée dans le cadre de la construction de chaque permutation. Ce n'est pas vrai pour l'autre solution, où vous devez vérifier si chaque permutation renvoyée par laitertools.permutations
fonction est en fait un dérangement, et, bien sûr, le mappage lui-même prend beaucoup d'octets.la source
MATL , 11 octets
Cela génère tous les dérangements dans l'ordre lexicographique.
Essayez-le en ligne!
Explication avec exemple
Tenez compte des commentaires
3
.la source
Perl 5
-MList::Util=none -n
,10089 octetsEssayez-le en ligne!
la source
Haskell , 58 octets
Essayez-le en ligne!
60 octets
Essayez-le en ligne!
la source
Gaia , 10 octets
Essayez-le en ligne!
la source
J , 26 octets
Essayez-le en ligne!
la source
R ,
8180 octetsEssayez-le en ligne!
list
n
[1..n]
n
1:n%in%x
1:n-x
.R + gtools , 62 octets
Essayez-le en ligne!
Beaucoup plus efficace, renvoie un
matrix
où chaque ligne est un dérangement.la source
Python 3.8 (version préliminaire) , 96 octets
Essayez-le en ligne!
la source
C ++ (gcc) ,
207196 octets-5 octets par plafond -6 octets par Roman Odaisky
Essayez-le en ligne!
la source
std::copy
confient également à l'appelant un espace suffisant pour la sortie.C ++ (gcc) , 133 octets
Je pense que cela s'est suffisamment développé par rapport à l'autre communication pour mériter une réponse distincte. Enfin une utilisation pour la
index[array]
syntaxe inside-out!Essayez-le en ligne!
la source
Haskell, 76 octets
la source
Python 2 , 82 octets
Essayez-le en ligne!
88 octets comme programme:
Essayez-le en ligne!
93 octets en utilisant itertools:
Essayez-le en ligne!
la source
Perl 6 ,
4937 octetsEdit: Après quelques allers-retours avec Phil H, nous l'avons réduit à seulement 37 octets:
Essayez-le en ligne!
En utilisant le
Whatever
au début, nous pouvons éviter les crochets (enregistre 2 caractères). Utilisez ensuite leZ
méta - opérateur avec-
lequel prend chaque élément d'une permutation (par exemple 2,3,1) et soustrait 0,1,2 dans l'ordre. Si l'un d'eux vaut 0 (fausse), la jonction échoue.La solution d'origine était ( Essayez-la en ligne! )
la source
Charbon de bois ,
4428 octetsbarré 44 est toujours régulier 44
Essayez-le en ligne! Le lien est vers la version détaillée du code. Librement basé sur la réponse non-itertools de @ EricTheOutgolfer. Explication:
la source
C (gcc) ,
187180octetsEssayez-le en ligne!
la source
Pyth , 12 octets
Essayez-le en ligne!
Le filtre fonctionne comme ceci: si un élément est à sa place d'origine, (index-élément) sera 0 et le produit entier sera 0, et donc falsey.
la source