Écrivez une fonction qui prend un ensemble d'entiers et imprime chaque permutation de l'ensemble, et l'échange effectué entre chaque étape
Contribution
un ensemble d'entiers, par exemple (0, 1, 2)
Production
la liste des permutations et swaps au format (set) (swap) (set) ...
Cas de test
Input:
(3, 1, 5)
Output:
(3, 1, 5)
(3, 1)
(1, 3, 5)
(3, 5)
(1, 5, 3)
(1, 3)
(3, 5, 1)
(3, 5)
(5, 3, 1)
(3, 1)
(5, 1, 3)
Règles
- Vous pouvez formater l'ensemble de nombres comme vous le souhaitez.
- Vous pouvez effectuer les swaps dans n'importe quel ordre
- Vous pouvez répéter les permutations et les échanges afin d'en obtenir un nouveau
- Votre code n'a pas besoin d'effectuer les échanges, la sortie doit simplement montrer quel échange a été effectué entre votre dernière sortie et votre sortie actuelle
- Votre code ne doit fonctionner que pour les ensembles de 2 éléments ou plus
- L'ensemble qui vous est fourni n'aura aucun élément répétitif (par exemple (0, 1, 1, 2) n'est pas valide)
C'est le code-golf, donc le code le plus court gagne!
code-golf
math
permutations
Billyoyo
la source
la source
(3, 1, 4)
ou autre - le lire la première fois, j'étais très confus parce que le premier échange a0,1
permuté les éléments0,1
mais aussi les indices0,1
, mais ensuite le suivant l'échange n'a pas suivi ce schéma. Je vous indiquerai également le bac à sable où vous pouvez publier des défis et obtenir des commentaires avant de les publier sur le site principal.Réponses:
Mathematica, 102 octets
Exemples
// Colonne pour un résultat plus clair
la source
Java,
449426 octetsApproche par force brute. Il continue à effectuer des échanges aléatoires jusqu'à ce que toutes les permutations possibles aient eu lieu. Il utilise un ensemble de la représentation sous forme de chaîne du tableau afin de vérifier combien d'états différents ont été générés. Pour n entiers différents, il y a n! = 1 * 2 * 3 * .. * n permutations distinctes.
Mise à jour
Non golfé:
Usage:
Comme vous pouvez le voir, il y a beaucoup plus de swaps que le minimum nécessaire. Mais cela semble fonctionner :-D
En prime, cela fonctionne aussi avec les chaînes, c'est-à-dire
la source
Set s=new HashSet();
. Votre code dans la méthoden
peut être un retour simple:static int n(int x){return x==1?1:x*n(x-1);}
. Et vous pouvez remplacerString z
dans votre méthodeo
avec un lieu générique:static<T>void o(T z){System.out.println(z);s.add(z);}
. Combiné, il atteindrait 426 octets .JavaScript (ES6), 186 octets
Remarque: je ne suis pas sûr de la flexibilité du format de sortie, peut-être que je pourrais le faire pour 171 octets:
Fonctionne en exécutant l' algorithme Steinhaus – Johnson – Trotter sur le tableau aléatoire d'index et en effectuant une conversion vers le tableau d'entrée. Non golfé:
la source
Rubis, 86 octets
la source
Haskell - 135 octets
production:
J'utilise la
permutations
fonction standard , qui n'est pas basée sur les swaps, donc je prends les permutations des permutations et j'en trouve une qui se trouve être une chaîne de swaps.la source