Biorąc pod uwagę tablicę dodatnich liczb całkowitych i dwa różne poprawne indeksy, zwróć tablicę z dwoma elementami odpowiadającymi zamianie dwóch indeksów.
Możesz wybrać indeksowanie 0 lub indeksowanie 1, ale poniższe przypadki testowe będą indeksowane jako 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]
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa. Obowiązują standardowe luki .
code-golf
array-manipulation
Leaky Nun
źródło
źródło
m
in
należy podjąć jako tablica?Odpowiedzi:
do
/ C ++,535039 bajtówWypróbuj online
Zaoszczędź 11 bajtów dzięki @Dennis
źródło
Operacyjny język skryptowy Flashpoint ,
9895 bajtówModyfikuje tablicę bezpośrednio.
Wyjaśnienie:
Zadzwoń z:
Wydajność:
źródło
JavaScript ES6,
3632 bajtówSpójrz, Ma, nie ma zmiennej tymczasowej!
Spróbuj
Wpisz listę elementów oddzielonych przecinkami
a
i 2 liczby całkowite dlam
&n
.źródło
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Wywołałoby to tylko 2 zamienione elementy bez reszty tablicy (np.[5,8,9],0,2
->[9,5]
).a
na końcu, aby dać nam kompletną, zmodyfikowaną tablicę. A może kompletnie brakuje mi tego, co próbujesz powiedzieć?Python 3 ,
4132 bajty-9 bajtów dzięki @notjagan
Wypróbuj online!
Zmienia argument, który jest prawidłowym formatem wyjściowym .
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
y
y
, ale nie pomyślałem o użyciu go tutaj. To całkiem sprytna odpowiedź.Jelly
prawidłowy kod Jelly?Japt ,
1716 bajtówWypróbuj online!
Oszczędność bajtu dzięki produktom ETH
źródło
MATL ,
76 bajtówWskaźniki są oparte na 1.
Wypróbuj online!
Wyjaśnienie
Rozważmy wejść
[11 13 15 3]
,[2 3]
.źródło
C # (.NET Core) ,
48 4331 bajtówWypróbuj online!
Zamienia liczby w oryginalnej tablicy, bez zmiennych tymczasowych. Niemniej jednak nie mogę uwierzyć w tę odpowiedź, ponieważ taki był pomysł Neila .
źródło
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
wydaje się jednak działać.Common Lisp , 42 bajty
-2 bajty dzięki @coredump .
Wypróbuj online!
Dość proste, ponieważ istnieje Common Lisp makro do zamiany:
rotatef
.źródło
JavaScript ES6,
3634 bajtówPróbny
Pokaż fragment kodu
źródło
CJam , 4 bajty
Wypróbuj online!
źródło
Java 8 , 48 bajtów
Wkład:
źródło
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 bajtów )Collections::swap
ma 17 bajtów ... przynajmniej zakładając, że tak się stanie w tym wyzwaniu ...05AB1E , 10 bajtów
Wypróbuj online!
źródło
Oktawa , 28 bajtów
Wypróbuj online!
Zadowolony z tego faktycznie :)
Pobiera dane z formularza
f([1,2,3,4],[1,2])
:, 1-indeksowane.Wyjaśnienie:
źródło
Meduza , 7 bajtów
Pobiera listę i parę wskaźników. Wypróbuj online!
Wyjaśnienie
Meduza ma funkcję „modyfikowania przedmiotów według indeksów”
Z
, która robi dokładnie to, czego potrzebujemy. Obai
s pobierają dane wejściowe ze STDIN.Z
przyjmuje za argumenty drugie wejście, funkcję odwracaniaR
i listę. NastępnieZ
wykonuje modyfikację ip
drukuje wynik.źródło
R, 38 bajtów
Wydaje się dość długi, ale nie mogę go skrócić. Niestety wymaga to wyraźnego powrotu
x
, wymagając{}
od ciała funkcji.pryr::f()
nie rozpoznaje potrzebyx
jako argumentu funkcji, więc nie działa: /.źródło
function(x,i)replace(x,i,rev(i))
że zadziałałoby, nawet przy składni pryr.replace(x,i,x[rev(i)])
, inaczej umieścisz indeksy zamiast ich wartości.Shenzhen I / O, 735 bajtów
23 ¥, moc 810, 48 linii kodu
ZASTRZEŻENIE: Tablice są w tym przypadku zakończone na 0. W przeciwnym razie tablice stanowią problem w pracy z we / wy w Shenzhen.
Właściwie zrobiłem poziom pary dla tej gry. Możesz zagrać tutaj.
EDYCJA: Aa i właśnie zdałem sobie sprawę, że powiedziałem, że tablica została zamówiona. Heck.
źródło
Swift,
11165 bajtów (indeksowane 0)Swift jest już znany z tego, że jest jednym z najgorszych języków kod-golfowych, ale oto funkcja,
która korzysta z wyrażeń trójskładnikowych:Sprawdź to! - Zastosowanie:
t(l:[1,2,3],m:0,n:1)
.źródło
k ( kona ), 13 bajtów
Całkiem proste, ale działa. Dawny:
źródło
Perl 5 , 32 bajty
-3 bajty dzięki @Dom Hastings !
30 bajtów kodu +
-pa
flagi.Wypróbuj online!
Całkiem prosto, używając plasterków tablic.
źródło
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 bytes
źródło
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
źródło
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
źródło
@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.źródło
~
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.(Assumed to be a valid index.)
EDX
register.(Assumed to be a valid index.)
This keeps the size down and complies with all formal requirements, but does mean that the function cannot be easily called from other languages like C. You'd need to call it from another assembly-language program. (You could rewrite it to use any input registers, though, without affecting the byte count; there's nothing magical about the ones I chose.)
Ungolfed:
źródło
R, 34 bytes
źródło
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)źródło
JavaScript (ES2015),
665749 bytesA different (alas, longer) approach than previous JavaScript answers
Source
źródło
(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.źródło
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:źródło