Wenn Sie ein Array mit positiven Ganzzahlen und zwei unterschiedlichen gültigen Indizes angeben, geben Sie das Array mit den beiden Elementen zurück, die den beiden getauschten Indizes entsprechen.
Sie können zwischen 0-Indizierung und 1-Indizierung wählen, die folgenden Testfälle werden jedoch mit 0-Indizierung behandelt.
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]
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .
code-golf
array-manipulation
Undichte Nonne
quelle
quelle
m
undn
kann als Array genommen werden?Antworten:
C
/ C ++,535039 BytesProbieren Sie es online aus
11 Bytes dank @Dennis gespeichert
quelle
Operation Flashpoint- Skriptsprache,
98 bis95 ByteÄndert das Array direkt.
Erläuterung:
Rufen Sie an mit:
Ausgabe:
quelle
JavaScript ES6,
3632 BytesSchau, Ma, keine temporäre Variable!
Versuch es
Geben Sie eine durch Kommas getrennte Liste von Elementen für
a
und 2 Ganzzahlen fürm
& einn
.quelle
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Das würde nur die 2 getauschten Elemente ohne den Rest des Arrays ausgeben (zB[5,8,9],0,2
->[9,5]
).a
am Ende, um uns das komplette, modifizierte Array zu geben. Oder fehle ich völlig, was Sie sagen wollen?Python 3 ,
4132 Bytes-9 Bytes dank @notjagan
Probieren Sie es online!
Ändert das Argument, das ein gültiges Ausgabeformat ist .
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
y
y
, dachte aber nicht daran, es hier zu verwenden. Das ist eine ziemlich clevere Antwort.Jelly
gültiger Jelly-Code?Japt ,
1716 BytesProbieren Sie es online!
Dank ETHproductions ein Byte gespart
quelle
MATL ,
76 BytesIndizes sind 1-basiert.
Probieren Sie es online!
Erläuterung
Betrachten Sie Eingänge
[11 13 15 3]
,[2 3]
.quelle
C # (.NET Core) ,
48 4331 BytesProbieren Sie es online!
Tauscht die Zahlen im ursprünglichen Array aus, ohne dass temporäre Variablen verwendet werden. Trotzdem kann ich diese Antwort nicht würdigen, da es Neils Idee war .
quelle
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
scheint aber zu funktionieren.Common Lisp , 42 Bytes
-2 Bytes dank @coredump .
Probieren Sie es online!
Ganz gerade nach vorne, da es eine Common Lisp Makro swap:
rotatef
.quelle
Javascript ES6,
3634 BytesDemo
Code-Snippet anzeigen
quelle
CJam , 4 Bytes
Probieren Sie es online!
quelle
Java 8 , 48 Bytes
Eingang:
quelle
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 Byte )Collections::swap
ist 17 Bytes ... zumindest unter der Annahme, dass dies für diese Herausforderung gilt ...05AB1E , 10 Bytes
Probieren Sie es online!
quelle
Oktave , 28 Bytes
Probieren Sie es online!
Sehr zufrieden damit :)
Übernimmt Eingaben in das Formular
f([1,2,3,4],[1,2])
:, 1-indiziert.Erläuterung:
quelle
Qualle , 7 Bytes
Nimmt eine Liste und ein Paar Indizes auf. Probieren Sie es online!
Erläuterung
Qualle hat zufällig die Funktion "Elemente an Indizes ändern"
Z
, die genau das tut, was wir brauchen. Die beiden nehmeni
die Eingänge von STDIN auf.Z
Nimmt als Argumente die zweite Eingabe, die UmkehrfunktionR
und die Liste. DannZ
führt die Modifikation undp
druckt das Ergebnis aus .quelle
R, 38 Bytes
Fühlt sich ziemlich lang an, aber ich kann es nicht viel kürzer machen. Leider erfordert es das explizite Zurückkehren durch das
x
Erfordernis{}
um den Funktionskörper herum.pryr::f()
erkennt die Notwendigkeit vonx
als Funktionsargument nicht und funktioniert nicht: /.quelle
function(x,i)replace(x,i,rev(i))
würde auch mit Pryr-Syntax funktionieren.replace(x,i,x[rev(i)])
, sonst platzieren Sie die Indizes anstelle ihrer Werte.Shenzhen I / O, 735 Bytes
23 ¥, 810 Leistung, 48 Codezeilen
HAFTUNGSAUSSCHLUSS: Arrays sind in diesem Fall 0-terminiert. Arrays sind ein Problem, mit dem man sonst nur in Shenzhen I / O arbeiten kann.
Ich habe tatsächlich eine Dampfstufe für dieses Spiel gemacht. Du kannst es hier spielen.
EDIT: Und mir ist gerade aufgefallen, dass ich gesagt habe, dass das Array bestellt wurde. Teufel.
quelle
Swift,
11165 Bytes (0-indiziert)Swift ist bereits dafür berüchtigt, eine der schlechtesten Code-Golf-Sprachen zu sein, aber hier ist eine Funktion
, die ternäre Ausdrücke verwendet:Hör zu! - Verbrauch:
t(l:[1,2,3],m:0,n:1)
.quelle
k ( kona ), 13 Bytes
Ziemlich einfach, aber es funktioniert. Ex:
quelle
Perl 5 , 32 Bytes
-3 Bytes dank @Dom Hastings !
30 Byte Code +
-pa
Flags.Probieren Sie es online!
Ganz einfach, mit Array-Slices.
quelle
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 Bytes
quelle
a[[{##2}]]==a[[{#3,#2}]]
sollte seina[[{##2}]]=a[[{#3,#2}]]
(mitSet
, nichtEquals
)C, 42 Bytes
Ändern Sie das Array mit einem temporären Wert.
C,
6058 BytesEin bisschen interessanter, ohne einen temporären Wert zu verwenden ...
C 49 Bytes
Verwendung von XOR
quelle
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;}
ist kaputt: SIGSEGV.Pyth ,
178 Bytes9 Bytes dank Leaky Num eingespart.
Online testen!
Dies ist 0-indiziert, und die Indizes werden als Tupel vorgesehen:
(n, m)
.Erklärungen
quelle
@LQ.rUQE
Mathematica, 20 Bytes
Reine Funktion, die zwei Argumente im folgenden 1-indizierten (und möglicherweise missbräuchlichen) Format verwendet: Der zweite Testfall
[5,8,9]; 0 2; [9,8,5]
würde als aufgerufen(Leerzeichen sind irrelevant und nur zum sichtbaren Parsen).
Permute
ist die eingebaute Funktion, die eine Permutation auf eine Liste anwendet undCycles[{{a,b}}]
die Permutation darstellt, die dasa
th- undb
th-Element einer Liste austauscht und den Rest ignoriert.quelle
~
?~
ist die Infixnotation von Mathematica für eine binäre Funktion:x~f~y
bedeutet dasselbe wief[x,y]
.x86-Maschinencode, 10 Byte
Dies ist eine Funktion, die in 32-Bit-x86-Maschinencode geschrieben ist und die Werte an den angegebenen Indizes in einem bestimmten Array austauscht. Das Array wird direkt geändert und die Funktion gibt keinen Wert zurück.
Es wird eine benutzerdefinierte Aufrufkonvention verwendet, bei der die Parameter der Funktion in Registern übergeben werden müssen :
EBX
Register übergeben.ECX
Register übergeben.(Wird als gültiger Index angenommen.)
EDX
Register übergeben.(Wird als gültiger Index angenommen.)
Dies hält die Größe niedrig und erfüllt alle formalen Anforderungen, bedeutet jedoch, dass die Funktion nicht einfach aus anderen Sprachen wie C aufgerufen werden kann. Sie müssten sie aus einem anderen Assembler-Programm aufrufen. (Sie können es jedoch umschreiben, um alle Eingaberegister zu verwenden , ohne die Anzahl der Bytes zu beeinflussen. An den ausgewählten Registern ist nichts Magisches.)
Ungolfed:
quelle
R, 34 Bytes
quelle
Java 8 + InverseY , 27 Byte
Ruft einfach die Swap-Funktion auf ... dies ist eine Methodenreferenz des Typs
Consumer3<List, Integer, Integer>
.Probieren Sie es online! (Kopf- und Fußzeile für Boilerplate &
Consumer3
Interface- Kopie )quelle
JavaScript (ES2015),
665749 ByteEin anderer (leider längerer) Ansatz als frühere JavaScript-Antworten
Quelle
quelle
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))
49 Bytesawk, 31 bytes
Probieren Sie es online!
Übernimmt Eingaben im Format
und Ausgänge als
(1-indiziert).
Erläuterung
Das gesamte Programm ist ein fehlendes Muster mit einer Aktion, gefolgt von einem Muster mit einer fehlenden Aktion.
Da in jeder Zeile ein fehlendes Muster ausgeführt wird, wird der Code in den geschweiften Klammern für beide Eingabezeilen ausgeführt. Der
c=$a;$a=$b;$b=c;
Teil tauscht die beiden Werte bei Indizesa
undb
(über die temporäre Variablec
) aus. Dies wirkt sich nur auf die zweite Zeile aus, da in der ersten Zeilea
undb
noch nicht definiert. Dasa=$1;b=$2
Teil wirda
als erstes Feld undb
als zweites Feld definiert, wodurch die entsprechenden Werte für das erste Teil festgelegt werden, das in der zweiten Zeile ausgeführt werden soll.Da eine fehlende Aktion der entspricht
{print}
, druckt das Muster jede Zeile, mit der es übereinstimmt. Dieses Muster lautet insbesondereNR>1
: Das heißt, es wird gedruckt, wenn die Zeilennummer größer als 1 ist, was zufällig Zeile 2 ist. Dies wird ausgeführt, nachdem das Austauschen von Werten stattgefunden hat, wodurch die Aufgabe abgeschlossen wird.quelle
q / kdb + 17 Bytes
Lösung:
Beispiel:
Erläuterung:
Eine q-Version der k-Antwort von Simon. Wenden Sie die Zuweisungsfunktion
:
auf x bei Indizes mit dem umgekehrten Wert y an, wobei x bei y indiziert ist. Aufgeschlüsselt sehen Sie deutlicher:quelle