Diberikan array bilangan bulat positif dan dua indeks valid berbeda, kembalikan array dengan dua elemen yang sesuai dengan dua indeks yang ditukar.
Anda dapat memilih untuk menggunakan pengindeksan 0 atau pengindeksan 1, tetapi testcases di bawah ini akan diindeks 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]
Ini adalah kode-golf . Jawaban terpendek dalam byte menang. Celah standar berlaku.
code-golf
array-manipulation
Biarawati Bocor
sumber
sumber
m
dann
diambil sebagai array?Jawaban:
C
/ C ++,535039 byteCobalah online
Disimpan 11 byte berkat @Dennis
sumber
Pengoperasian Bahasa skrip Flashpoint ,
9895 byteMemodifikasi array secara langsung.
Penjelasan:
Telepon dengan:
Keluaran:
sumber
JavaScript ES6,
3632 byteLihat, Bu, tidak ada variabel sementara!
Cobalah
Masukkan daftar elemen yang dipisahkan koma untuk
a
dan 2 bilangan bulat untukm
&n
.sumber
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Itu hanya akan menampilkan 2 elemen yang ditukar tanpa sisa array (misalnya,[5,8,9],0,2
->[9,5]
).a
di akhir untuk memberi kita array yang lengkap dan dimodifikasi. Atau apakah saya benar-benar kehilangan apa yang ingin Anda katakan?Python 3 ,
4132 byte-9 byte terima kasih kepada @notjagan
Cobalah online!
Mengubah argumennya, yang merupakan format output yang valid .
sumber
Jelly , 7 byte
Cobalah online!
Bagaimana itu bekerja
sumber
y
y
, tetapi tidak berpikir untuk menggunakannya di sini. Itu jawaban yang cukup pintar.Jelly
kode Jelly itu valid?Japt ,
1716 byteCobalah online!
Disimpan satu byte berkat produk ETH
sumber
MATL ,
76 byteIndeks berbasis 1.
Cobalah online!
Penjelasan
Pertimbangkan input
[11 13 15 3]
,[2 3]
.sumber
C # (.NET Core) ,
48 4331 byteCobalah online!
Tukar angka dalam array asli, tidak ada variabel sementara yang digunakan. Meskipun demikian saya tidak dapat menerima pujian atas jawaban ini karena sudah menjadi ide Neil .
sumber
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
tampaknya bekerja.Gangguan Umum , 42 byte
-2 byte berkat @coredump .
Cobalah online!
Cukup lurus ke depan, karena ada makro Common Lisp untuk swap:
rotatef
.sumber
Javascript ES6,
3634 byteDemo
Tampilkan cuplikan kode
sumber
CJam , 4 byte
Cobalah online!
sumber
Java 8 , 48 byte
Memasukkan:
sumber
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 byte )Collections::swap
adalah 17 byte ... setidaknya asumsi ini berlaku untuk tantangan ini ...05AB1E , 10 byte
Cobalah online!
sumber
Oktaf , 28 byte
Cobalah online!
Cukup puas dengan yang satu ini sebenarnya :)
Mengambil input pada formulir
f([1,2,3,4],[1,2])
:, 1-diindeks.Penjelasan:
sumber
Jellyfish, 7 bytes
Takes a list and a pair of indices. Try it online!
Explanation
Jellyfish happens to have a "modify items at indices" function,
Z
, which does exactly what we need. The twoi
s grab the inputs from STDIN.Z
takes as arguments the second input, the reversal functionR
, and the list. ThenZ
performs the modification, andp
prints the result.sumber
R, 38 bytes
Feels rather long, but I can't get it much shorter. Sadly it requires the explicit returning through
x
, requiring{}
around the function body.pryr::f()
doesn't recognise the need forx
as function argument so doesn't work :/.sumber
function(x,i)replace(x,i,rev(i))
would work, even with pryr syntax.replace(x,i,x[rev(i)])
, kalau tidak Anda akan menempatkan indeks bukan nilai-nilai mereka.Shenzhen I / O, 735 Bytes
23 ¥, 810 Kekuatan, 48 Baris Kode
PENOLAKAN: Array diakhiri 0 dalam hal ini. Array adalah rasa sakit di pantat untuk bekerja dengan di Shenzhen I / O sebaliknya.
Saya sebenarnya membuat level uap untuk game ini. Anda bisa memainkannya di sini.
EDIT: Aaand saya baru sadar saya mengatakan bahwa array di diperintahkan. Heck.
sumber
Swift,
11165 byte (0-diindeks)Swift is already notorious for being one of the worst code-golf languages, but here is a function
that makes use of ternary expressions:Check it out! - Usage:
t(l:[1,2,3],m:0,n:1)
.sumber
k (kona), 13 bytes
Pretty basic, but it works. Ex:
sumber
Perl 5, 32 bytes
-3 bytes thanks to @Dom Hastings!
30 bytes of code +
-pa
flags.Try it online!
Quite straight forward, using array slices.
sumber
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 bytes
sumber
a[[{##2}]]==a[[{#3,#2}]]
should bea[[{##2}]]=a[[{#3,#2}]]
(usingSet
, notEquals
)C, 42 bytes
Modify the array in place with a temp value.
C,
6058 bytesA little more interesting, not using any temp value...
C, 49 bytes
Using XOR
sumber
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;}
is broken: SIGSEGV.Pyth,
178 bytesSaved 9 bytes thanks to Leaky Num.
Test it online!
This is 0-indexed, and the indices are provided as a tuple:
(n, m)
.Explanations
sumber
@LQ.rUQE
Mathematica, 20 bytes
Pure function taking two arguments in the following 1-indexed (and possibly abusive) format: the second test case
[5,8,9]; 0 2; [9,8,5]
would be called as(spaces are extraneous and just for visible parsing).
Permute
is the builtin function that applies a permutation to a list, andCycles[{{a,b}}]
represents the permutation that exchanges thea
th andb
th elements of a list and ignores the rest.sumber
~
do?~
is Mathematica's infix notation for a binary function:x~f~y
means the same thing asf[x,y]
.x86 Machine Code, 10 bytes
This is a function written in 32-bit x86 machine code that swaps the values at the specified indices in a given array. The array is modified in-place, and the function does not return a value.
A custom calling convention is used, requiring the function's parameters to be passed in registers:
EBX
register.ECX
register.(Diasumsikan sebagai indeks yang valid.)
EDX
register.(Diasumsikan sebagai indeks yang valid.)
Ini menjaga ukurannya turun dan mematuhi semua persyaratan formal, tetapi berarti bahwa fungsi tersebut tidak dapat dengan mudah dipanggil dari bahasa lain seperti C. Anda harus memanggilnya dari program bahasa assembly lainnya. (Anda dapat menulis ulang untuk menggunakan register input apa pun , tanpa mempengaruhi jumlah byte; tidak ada yang ajaib tentang yang saya pilih.)
Tidak Disatukan:
sumber
R, 34 bytes
sumber
Java 8 + InverseY, 27 bytes
Just calls the swap function... this is a method reference of the type
Consumer3<List, Integer, Integer>
.Try it online! (header and footer for boilerplate & copy of
Consumer3
interface)sumber
JavaScript (ES2015),
665749 bytesA different (alas, longer) approach than previous JavaScript answers
Source
sumber
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))
49 bytesawk, 31 bytes
Try it online!
Takes input in the format
and outputs as
(1-indexed).
Explanation
The entire program is a missing pattern with an action followed by a pattern with a missing action.
Since a missing pattern runs on each line, the code inside the braces runs for both input lines. The
c=$a;$a=$b;$b=c;
part swaps the two values at indicesa
andb
(through the temporary variablec
). This only has an effect on the second line, since on the first linea
andb
are not yet defined. Thea=$1;b=$2
part definesa
to be the first field andb
to be the second field, which sets the appropriate values for the first part to run on the second line.Since a missing action is equivalent to
{print}
, the pattern prints every line it matches. This pattern in particular isNR>1
: that is, print whenever the line number is greater than 1, which happens to be line 2. This runs after the swapping of values has taken place, thus completing the task.sumber
q/kdb+, 17 bytes
Solution:
Example:
Explanation:
A q version of the k answer by Simon. Apply the assign
:
function to x at indices reverse-y with value of x indexed at y. Broken down you can see more clearly:sumber