Inspiré de Taken from a question at Stack Overflow .
Le défi
Étant donné un entier n>1
, affichez tous les tableaux qui peuvent être obtenus en échangeant exactement deux entrées dans le tableau [1, 2, ..., n]
.
Les tableaux peuvent être produits dans n'importe quel ordre.
Vous pouvez toujours utiliser [0, 1, ..., n-1]
(basé sur 0) au lieu de [1, 2, ..., n]
(basé sur 1).
Règles supplémentaires
L'entrée et la sortie sont flexibles comme d'habitude .
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
Le code le plus court en octets gagne.
Cas de test
L'entrée 2
donne la sortie (supposée basée sur 1)
2 1
L'entrée 3
donne la sortie (notez que les trois tableaux peuvent être dans n'importe quel ordre)
1 3 2
2 1 3
3 2 1
L'entrée 4
donne la sortie
1 2 4 3
1 3 2 4
1 4 3 2
2 1 3 4
3 2 1 4
4 2 3 1
L'entrée 7
donne la sortie
1 2 3 4 5 7 6
1 2 3 4 6 5 7
1 2 3 4 7 6 5
1 2 3 5 4 6 7
1 2 3 6 5 4 7
1 2 3 7 5 6 4
1 2 4 3 5 6 7
1 2 5 4 3 6 7
1 2 6 4 5 3 7
1 2 7 4 5 6 3
1 3 2 4 5 6 7
1 4 3 2 5 6 7
1 5 3 4 2 6 7
1 6 3 4 5 2 7
1 7 3 4 5 6 2
2 1 3 4 5 6 7
3 2 1 4 5 6 7
4 2 3 1 5 6 7
5 2 3 4 1 6 7
6 2 3 4 5 1 7
7 2 3 4 5 6 1
la source
[0 ... n-1]
vs[1 ... n]
! Je me sens toujours un peu ennuyé quand je dois virer sur un1+
index J parce que nul.Réponses:
Gelée ,
118 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
y
? Ça a toujours été un peu un mystère pour moi.[1,2],[4,3]y1,2,3
remplace chaque 1 dans [1, 2, 3] par 4 et chaque 2 par 3 .R , 54 octets
Essayez-le en ligne!
Renvoie une matrice où chaque colonne est une permutation.
combn(n,k)
génère toutes les combinaisons de taille àk
partir de la listen
ou à partir de1:n
sin
est un seul entier. Il prend également éventuellement une fonctionFUN
à appliquer aux combinaisons résultantes. Nous écrivons donc une fonction qui effectue l'échange et renvoie la liste échangée. Les résultats sont ensuite tous accumulés dans unarray
, qui est dans ce cas bidimensionnel et donc une matrice.la source
Python 2 , 71 octets
Essayez-le en ligne!
Utilise cette astuce .
la source
Haskell , 62 octets
Essayez-le en ligne!
Je viens de générer la permutation, étant donné le
x
ety
pour permuter, pour chaquex,y
la source
Python 2 , 72 octets
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 43 octets
Essayez-le en ligne!
Explication:
Subsets[Range@#,{2}]
génère tous les sous-ensembles de{1,2,...,n}
taille 2, puis pour chaque sous-ensemble,/.
échange ces deux éléments dans la liste{1,2,...,n}
.Cette approche est malheureusement similaire à la plupart des autres soumissions, mais en voici une qui est plus spécifique à Mathematica, pour 3 octets supplémentaires:
Essayez-le en ligne!
la source
ReplaceList[Range@#,{a___,b_,c___,d_,e___}:>{a,d,c,b,e}]&
. J'aime sa simplicité (ou la façon dont il encode directement le problème), mais malheureusement, la syntaxe de filtrage est si verbeuse que cela finit par être de 57 octets.Haskell, 62 octets
Essayez-le en ligne!
la source
Haskell , 71 octets
Essayez-le en ligne!
Cela ajoute le numéro actuel à la fin de toutes les permutations de la dernière, puis calcule tous les swaps qui incluent le nouveau numéro.
la source
MATL , 12 octets
Essayez-le en ligne!
la source
:tY@wy=~!s2=Y)
. Même approche que la réponse d'Octave de rahnema1, je penseC, 93 octets
Essayez-le en ligne!
la source
Octave, 38 octets
Essayez-le en ligne!
Génère toutes les permutations de 1: n et en sélectionne celles qui ont deux éléments différents de 1: n.
la source
JavaScript (ES6), 81 octets
Imprime des tableaux indexés 0.
Démo
alert()
est remplacé parconsole.log()
dans cet extrait pour plus de convivialité.Afficher l'extrait de code
la source
Python 2 , 75 octets
Essayez-le en ligne!
la source
Nettoyer ,
9082 octetsCela peut être fait en 80 octets, mais cela se transforme en une traduction directe des réponses Haskell.
Essayez-le en ligne!
la source
05AB1E ,
159 octetsEssayez-le en ligne!
Explication
la source
Coque , 9 octets
Essayez-le en ligne!
Explication
la source
Rubis ,
5553 octetsEssayez-le en ligne!
Solution basée sur 0
L'astuce ici est que la boucle interne «saute» toujours une itération: la première fois, elle n'est pas exécutée du tout, puis une seule fois lors du deuxième passage, et ainsi de suite.
J'étais satisfait de 55 octets jusqu'à ce que je voie que R pouvait être joué à 54, donc j'ai dû le faire à 53.
la source
Python 2 , 90 octets
Essayez-le en ligne!
la source
Pyth, 9 octets
Manifestation
La façon la plus simple d'échanger deux valeurs est d'utiliser
.r
, qui est la fonction de traduction rotative de Pyth..r<list>[A, B]
permutera toutes les occurrences deA
etB
danslist
.Par conséquent, en appliquant la fonction de traduction à
UQ
, la liste de0
àn-1
avec chaque liste de deux éléments de nombres différents dans la liste, nous générerons la sortie souhaitée.Q
est l'entréen
, etU
est la fonction de plage.La façon la plus simple de procéder serait:
.cUQ2
génère les 2 combinaisons d'éléments d'éléments distincts de la plage et.rLUQ
mappe la.r
fonction sur eux et la listeUQ
.Cependant, ce serait 10 octets.
Au lieu de faire
.cUQ2
, les paires ordonnées distinctes, nous pouvons faire toutes les paires avec*=U
. Ceci est implicitement équivalent à*=UQQ
. Il commence par écraserQ
avecUQ
, puis prend le produit cartésien deUQ
etUQ
. Cela donne toutes les paires de nombres dans la plage, pas nécessairement ordonnées ou distinctes..rLQ
swaps utilisant chaque liste. Rappelez-vous queQ
c'est maintenant égal à la liste de0
àn-1
, nonn
.Parce que les paires n'ont pas été commandées, il y a des doublons.
{
supprime les doublons. Parce que les paires n'étaient pas distinctes, la liste inchangée est présente. Cette liste sera toujours la première après la déduplication, car elle{
préserve l'ordre de la première apparition et la liste inchangée est produite par rotation par[0,0]
.t
supprime le premier élément, donnant la liste désirée de swaps.la source
Pyth, 11 octets
Essayez-le en ligne
Pas aussi court que l'approche de isaacg, mais assez différent pour poster.
Explication
la source
Java 8,
109105 octetsJe suis rouillé .. Je n'ai pas joué au code depuis des mois .. J'ai fini par porter la réponse @Steadybox 'C .. Peut probablement être joué au golf encore plus.
Essayez-le ici.
la source
Rubis , 66 octets
Essayez-le en ligne!
la source
Ruby , 80 octets
-12 octets grâce à Unihedron.
Essayez-le en ligne!
J'avais une approche en tête qui se traduisait le mieux en Ruby pour une raison quelconque ... Je ne connais même pas vraiment Ruby ...
la source
1..n
à une variable à un caractère et la réutiliser (instructions séparées avec un retour à la ligne ou des points-virgules), 2. se passer de crochets dans les instructions terminales:i==x ?y:i==y ?x:i
(notez où j'ai les espaces pour séparer le shebang potentiel ) et 3.uniq[1,n]
au lieu deuniq[1..-1]
.