Étant donné un tableau d'entiers positifs et deux indices valides distincts, renvoyez le tableau avec les deux éléments correspondant aux deux indices échangés.
Vous pouvez choisir d'utiliser l'indexation 0 ou l'indexation 1, mais les cas de test ci-dessous seront indexés 0.
array m n output
[1,2,3,4] 0 1 [2,1,3,4]
[5,8,9] 0 2 [9,8,5]
[11,13,15,3] 1 2 [11,15,13,3]
[11,13,15,3] 2 1 [11,15,13,3]
[11,15,15,3] 2 1 [11,15,15,3]
C'est du code-golf . La réponse la plus courte en octets gagne. Des échappatoires standard s'appliquent.
code-golf
array-manipulation
Leaky Nun
la source
la source
m
et peutn
être considéré comme un tableau?Réponses:
C
/ C ++,535039 octetsEssayez-le en ligne
Sauvegardé 11 octets grâce à @Dennis
la source
Langage de script Operation Flashpoint ,
9895 octetsModifie le tableau directement.
Explication:
Appeler avec:
Sortie:
la source
JavaScript ES6,
3632 octetsRegardez, Ma, pas de variable temporaire!
Essayez-le
Entrez une liste d'éléments séparés par des virgules pour
a
et 2 entiers pourm
&n
.la source
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Cela ne produirait que les 2 éléments échangés sans le reste du tableau (par exemple,[5,8,9],0,2
->[9,5]
).a
de la fin pour nous donner le tableau complet et modifié. Ou est-ce que je manque complètement ce que vous essayez de dire?Python 3 ,
4132 octets-9 octets grâce à @notjagan
Essayez-le en ligne!
Modifie son argument, qui est un format de sortie valide .
la source
Gelée , 7 octets
Essayez-le en ligne!
Comment ça marche
la source
y
y
, mais je n'ai pas pensé à l'utiliser ici. Voilà une réponse assez intelligente.Jelly
code Jelly est-il valide?Japt ,
1716 octetsEssayez-le en ligne!
Un octet enregistré grâce à ETHproductions
la source
MATL ,
76 octetsLes indices sont basés sur 1.
Essayez-le en ligne!
Explication
Tenez compte des entrées
[11 13 15 3]
,[2 3]
.la source
C # (.NET Core) ,
48 4331 octetsEssayez-le en ligne!
Échange les nombres dans le tableau d'origine, aucune variable temporaire utilisée. Néanmoins, je ne peux pas m'attribuer le mérite de cette réponse car c'est l'idée de Neil .
la source
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
semble fonctionner cependant.Lisp commun , 42 octets
-2 octets grâce à @coredump .
Essayez-le en ligne!
Assez simple, car il y a une macro Common Lisp à échanger:
rotatef
.la source
Javascript ES6,
3634 octetsDémo
Afficher l'extrait de code
la source
CJam , 4 octets
Essayez-le en ligne!
la source
Java 8 , 48 octets
Contribution:
la source
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 octets )Collections::swap
est de 17 octets ... au moins en supposant que cela vaut pour ce défi ...05AB1E , 10 octets
Essayez-le en ligne!
la source
Octave , 28 octets
Essayez-le en ligne!
Assez satisfait de celui-ci en fait :)
Prend entrée sur le formulaire:,
f([1,2,3,4],[1,2])
1-indexé.Explication:
la source
Méduse , 7 octets
Prend une liste et une paire d'indices. Essayez-le en ligne!
Explication
Les méduses ont une fonction "modifier les éléments aux indices"
Z
, qui fait exactement ce dont nous avons besoin. Les deuxi
s saisissent les entrées de STDIN.Z
prend comme arguments la deuxième entrée, la fonction d'inversionR
et la liste.Z
Effectue ensuite la modification etp
imprime le résultat.la source
R, 38 octets
Cela me semble assez long, mais je ne peux pas le raccourcir beaucoup plus. Malheureusement, cela nécessite le retour explicite
x
, exigeant{}
autour du corps de la fonction.pryr::f()
ne reconnaît pas le besoin d'x
argument as function, donc ne fonctionne pas: /.la source
function(x,i)replace(x,i,rev(i))
cela fonctionnerait, même avec la syntaxe pryr.replace(x,i,x[rev(i)])
, sinon vous placerez les indices au lieu de leurs valeurs.E / S Shenzhen, 735 octets
23 ¥, puissance 810, 48 lignes de code
AVERTISSEMENT: les tableaux sont terminés par 0 dans ce cas. Les tableaux sont une douleur dans le cul pour travailler avec Shenzhen I / O autrement.
J'ai fait un niveau de vapeur pour ce jeu. Vous pouvez y jouer ici.
EDIT: Aaand je viens de réaliser que j'ai dit que le tableau était commandé. Zut.
la source
Swift,
11165 octets (indexé 0)Swift est déjà connu pour être l'un des pires langages de golf de code, mais voici une fonction
qui utilise des expressions ternaires:Vérifiez-le! - Utilisation:
t(l:[1,2,3],m:0,n:1)
.la source
k ( kona ), 13 octets
Assez basique, mais ça marche. Ex:
la source
Perl 5 , 32 octets
-3 octets grâce à @Dom Hastings !
30 octets de code +
-pa
drapeaux.Essayez-le en ligne!
Assez simple, en utilisant des tranches de tableau.
la source
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 octets
la source
a[[{##2}]]==a[[{#3,#2}]]
devrait êtrea[[{##2}]]=a[[{#3,#2}]]
(en utilisantSet
, pasEquals
)C, 42 octets
Modifiez le tableau en place avec une valeur temporaire.
C,
6058 octetsUn peu plus intéressant, n'utilisant aucune valeur temporaire ...
C, 49 octets
Utilisation de XOR
la source
f(x,i,j,t)int*x;{t=x[i];x[i]=x[j];x[j]=t;}
.^
?#define X(x,y,z)x[y]^=x[z],x[z]^=x[y],x[y]^=x[z]
f(r,m,n){int*a=r;r=a[m];a[m]=a[n];a[n]=r;}
est cassé: SIGSEGV.Pyth ,
178 octets9 octets enregistrés grâce à Leaky Num.
Testez-le en ligne!
Ceci est 0 indexées, et les indices sont fournis en tant que tuple:
(n, m)
.Explications
la source
@LQ.rUQE
Mathematica, 20 octets
Fonction pure prenant deux arguments dans le format 1-indexé (et éventuellement abusif) suivant: le deuxième cas de test
[5,8,9]; 0 2; [9,8,5]
serait appelé comme(les espaces sont superflus et juste pour une analyse visible).
Permute
est la fonction intégrée qui applique une permutation à une liste etCycles[{{a,b}}]
représente la permutation qui échange lesa
th etb
th éléments d'une liste et ignore le reste.la source
~
faire?~
est la notation infixe de Mathematica pour une fonction binaire:x~f~y
signifie la même chose quef[x,y]
.Code machine x86, 10 octets
Il s'agit d'une fonction écrite en code machine x86 32 bits qui permute les valeurs aux indices spécifiés dans un tableau donné. Le tableau est modifié sur place et la fonction ne renvoie pas de valeur.
Une convention d'appel personnalisée est utilisée, exigeant que les paramètres de la fonction soient passés dans les registres :
EBX
registre.ECX
registre.(Supposé être un index valide.)
EDX
registre.(Supposé être un index valide.)
Cela réduit la taille et répond à toutes les exigences formelles, mais signifie que la fonction ne peut pas être facilement appelée à partir d'autres langages comme C. Vous devez l'appeler à partir d'un autre programme en langage assembleur. (Vous pouvez réécrire pour utiliser tout registre d'entrée, sans affecter le nombre d'octets; il n'y a rien de magique dans ceux que j'ai choisis.)
Non golfé:
la source
R, 34 octets
la source
Java 8 + InverseY , 27 octets
Appelle simplement la fonction swap ... c'est une référence de méthode du type
Consumer3<List, Integer, Integer>
.Essayez-le en ligne! (en-tête et pied de page pour passe-partout et copie de l'
Consumer3
interface)la source
JavaScript (ES2015),
665749 octetsUne approche différente (hélas, plus longue) que les réponses JavaScript précédentes
La source
la source
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))
49 octetsawk, 31 octets
Essayez-le en ligne!
Prend entrée au format
et sorties comme
(1 index).
Explication
L'ensemble du programme est un motif manquant avec une action suivi d'un motif avec une action manquante.
Puisqu'un modèle manquant s'exécute sur chaque ligne, le code à l'intérieur des accolades s'exécute pour les deux lignes d'entrée. La
c=$a;$a=$b;$b=c;
partie échange les deux valeurs aux indicesa
etb
(via la variable temporairec
). Cela n'a d'effet que sur la deuxième ligne, car sur la première lignea
etb
n'est pas encore défini. Laa=$1;b=$2
partie définita
être le premier champ etb
le deuxième champ, ce qui définit les valeurs appropriées pour que la première partie s'exécute sur la deuxième ligne.Puisqu'une action manquante est équivalente à
{print}
, le motif imprime chaque ligne à laquelle il correspond. Ce modèle en particulier est le suivantNR>1
: c'est-à-dire imprimer chaque fois que le numéro de ligne est supérieur à 1, ce qui se trouve être la ligne 2. Cela s'exécute après que l'échange de valeurs a eu lieu, terminant ainsi la tâche.la source
q / kdb +, 17 octets
Solution:
Exemple:
Explication:
Une version q de la réponse k de Simon. Appliquez la
:
fonction d' affectation à x aux indices inverses-y avec la valeur de x indexée à y. En panne, vous pouvez voir plus clairement:la source