สลับดัชนีทั้งสองที่ระบุ


31

ให้อาร์เรย์ของจำนวนเต็มบวกและดัชนีที่ถูกต้องสองค่าที่ถูกต้องคืนอาร์เรย์ด้วยองค์ประกอบสองตัวที่สอดคล้องกับดัชนีทั้งสองที่สลับกัน

คุณอาจเลือกที่จะใช้การจัดทำดัชนี 0 หรือการจัดทำดัชนี 1 แต่ตัวอย่างด้านล่างจะได้รับการจัดทำดัชนี 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]

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์ ช่องโหว่มาตรฐานใช้


ที่เกี่ยวข้อง , ที่เกี่ยวข้อง
Leun Nun

1
อืมนี่อาจเป็นงานที่ภาษากอล์ฟหลายภาษาต้องใช้เวลา แต่ภาษาที่ใช้งานได้ส่วนใหญ่จะหาง่าย (รายการที่มีองค์ประกอบที่ไม่แน่นอนไม่ได้เป็นสิ่งปกติสำหรับการเล่นกอล์ฟภาษา) หากเป็นเช่นนั้นมันจะน่าสนใจทีเดียว (ภาษากอล์ฟอาจจะยังคงชนะเพราะพวกเขามีความพยายามมากขึ้นพวกเขาสามารถออกไปพร้อมกับอัลกอริทึมที่ซับซ้อนมากขึ้น)

7
แปลกใจที่นี่อาจไม่ใช่การล่อลวง แต่ความท้าทายนี้สร้างสรรค์จริงๆเนื่องจากเป็นความท้าทายที่แท้จริงสำหรับภาษากอล์ฟหลาย ๆ
Erik the Outgolfer

@LeakyNun ฉันมี downvotes (และลบการลงคะแนน) เช่นนั้นในอดีตไม่ต้องกังวลมากเกินไปเกี่ยวกับเรื่องนี้ ...
Erik the Outgolfer

สามารถmและnนำมาเป็นอาร์เรย์?
Okx

คำตอบ:



10

ภาษาสคริปต์การทำงานของ Flashpointขนาด98 95 ไบต์

f={t=_this;a=t select 0;b=+a;m=t select 1;n=t select 2;a set[m,b select n];a set[n,b select m]}

ปรับเปลี่ยนอาร์เรย์โดยตรง

คำอธิบาย:

t=_this;                   // Give a shorter name for the array of arguments.

a=t select 0;              // Let 'a' be a pointer to the array that we modify.
                           // (The language doesn't have a concept of pointers really,
                           // yet its array variables are pointers to the actual array.)

b=+a;                      // Make a copy of the original array and save a pointer to it
                           // in the variable 'b'. This saves a few bytes later.

m=t select 1;              // Read the index arguments from the input array and save them
n=t select 2;              // to their respective variables.

a set[m,b select n];       // Do the swapping by reading the values from the copy and
a set[n,b select m]        // writing them to the original array. The last semicolon can
                           // be omitted because there are no more statements following 
                           // the last statement.

โทรด้วย:

array = [1,2,3,4];
str = format["%1", array];
[array, 0, 1] call f;
hint format["%1\n%2", str, array];

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


7

JavaScript ES6, 36 32 ไบต์

ดูสิไม่มีตัวแปรชั่วคราว!

(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]

ลองมัน

ป้อนรายการที่คั่นด้วยเครื่องหมายจุลภาคขององค์ประกอบสำหรับa2 จำนวนเต็มสำหรับ&mn

f=
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
oninput=_=>o.innerText=(f(b=i.value.split`,`,+j.value,+k.value),b);o.innerText=(f(b=(i.value="5,8,9").split`,`,j.value=0,k.value=2),b)
*{font-family:sans-serif}input{margin:0 5px 0 0;width:100px;}#j,#k{width:50px;}
<label for=i>a: </label><input id=i><label for=j>m: </label><input id=j type=number><label for=k>n: </label><input id=k type=number><pre id=o>


2
คำแนะนำเหล่านั้นแก้ไขอาเรย์ซึ่งหมายความว่าคุณได้รับอนุญาตให้ไม่ส่งคืนอาเรย์ซึ่งจะช่วยให้คุณประหยัดได้ไม่กี่ไบต์
Neil

@ Neil: คุณกำลังบอกว่าจะใช้เพียงแค่(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]? ที่จะส่งออกเพียง 2 องค์ประกอบสลับโดยไม่เหลือของอาร์เรย์ (เช่น[5,8,9],0,2-> [9,5])
Shaggy

@ Neil: ถูกต้องซึ่งเป็นเหตุผลว่าทำไมเราต้องการaที่ส่วนท้ายเพื่อให้อาร์เรย์ที่สมบูรณ์และได้รับการแก้ไข หรือฉันขาดสิ่งที่คุณพยายามจะพูดอย่างสมบูรณ์?
Shaggy

@Neil: อืม ... โอเคฉันคิดว่าฉันเห็นสิ่งที่คุณได้รับในตอนนี้ (ขออภัยที่พยายามทำหลายสิ่งหลายอย่างในเวลาเดียวกันในวันนี้) ขอบคุณสำหรับทิป. มีฉันทามติเกี่ยวกับเรื่องนั้นและถ้าเป็นเช่นนั้นคุณจะมีลิงค์ที่มีประโยชน์ก่อนที่ฉันจะไปค้นหาด้วยตัวเองหรือไม่?
Shaggy


5

Python 3 , 41 32 ไบต์

-9 ไบต์ขอบคุณ @notjagan

def f(a,m,n):a[m],a[n]=a[n],a[m]

ลองออนไลน์!

ปรับเปลี่ยนอาร์กิวเมนต์ซึ่งเป็นรูปแบบการออกที่ถูกต้อง


3
มันตลกดีที่มันไม่ได้เล่นกอล์ฟมากนักเมื่อเทียบกับรหัสงูหลาม
Łukasz Rogalski

5

เยลลี่ขนาด 7 ไบต์

Ṛ,ḷyJ}ị

ลองออนไลน์!

มันทำงานอย่างไร

Ṛ,ḷyJ}ị  Main link. Left argument: [i, j]. Right argument: A (array)

Ṛ        Reverse; yield [j, i].
  ḷ      Left; yield [i, j].
 ,       Pair; yield [[j, i], [i, j]].
    J}   Indices right; yield all indices of A.
   y     Transliterate; replace j with i and i with j.
      ị  Index into A.

TFW เสื้อคลุมเกือบตราบเท่าที่โปรแกรม ...
รั่วนูน

ฉันไม่เคยรู้เรื่องการดำรงอยู่ของy
Leun Nun

ฉันรู้yแต่ไม่คิดว่าจะใช้ที่นี่ นั่นเป็นคำตอบที่ฉลาดทีเดียว

นี่ทำให้ฉันคิดว่า ... เป็นJellyรหัส Jelly ที่ถูกต้อง?
M.Herzkamp

@ M.Herzkamp มันเป็น ฉันสงสัยว่ามันมีประโยชน์มาก
Dennis

4

Japtap , 17 16 ไบต์

hV(A=UgV UgW¹hWA

ลองออนไลน์!

บันทึกเป็นไบต์ด้วย ETHproductions


2
ดี อย่าคิดว่าคุณต้องใช้เครื่องหมายจุลภาค
ETHproductions

@ETHproductions ขอบคุณคุณพูดถูก
Tom

การเลือกใช้ 16 ไบต์แต่ฉันก็ยังเชื่อว่ามีวิธีแก้ปัญหาที่สั้นกว่า
Shaggy


4

MATL , 7 6 ไบต์

yyP)w(

ดัชนีอิง 1

ลองออนไลน์!

คำอธิบาย

พิจารณาอินพุต[11 13 15 3], [2 3].

yy   % Take two inputs implicitly. Duplicate them
     % STACK: [11 13 15 3], [2 3], [11 13 15 3], [2 3]
P    % Flip
     % STACK: [11 13 15 3], [2 3], [11 13 15 3], [3 2]
)    % Reference indexing (pick indexed entries)
     % STACK: [11 13 15 3], [2 3], [15 13]
w    % Swap
     % STACK: [11 13 15 3], [15 13], [2 3]
(    % Assignment indexing (write values into indexed entries). Implicitly display
     % STACK: [11 15 13 3]

4

C # (. NET Core) , 48 43 31 ไบต์

(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])

ลองออนไลน์!

สลับตัวเลขในอาร์เรย์เดิมโดยไม่ใช้ตัวแปรชั่วคราว อย่างไรก็ตามฉันไม่สามารถใช้บัตรเครดิตสำหรับคำตอบนี้ตามที่ได้รับความคิดของนีล


@LeakyNun ดูเหมือนจะไม่ทำงานเนื่องจากปล่อย [m] ที่มีค่าเป็น 0 ลองด้วยตัวคุณเอง!
Charlie

(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])ดูเหมือนว่าจะทำงาน
Neil

(คำตอบเหล่านี้ทั้งหมดนั้นใช้ได้ใน ES6 JavaScript ไม่ใช่?)
Neil

4

Common Lisp , 42 ไบต์

-2 ไบต์ขอบคุณที่@coredump

(lambda(a i j)(rotatef(elt a i)(elt a j)))

ลองออนไลน์!

ค่อนข้างตรงไปตรงมาเนื่องจากมีแมโคร Common rotatefเสียงกระเพื่อมเพื่อแลกเปลี่ยน:


คุณสามารถใช้ ELT แทน AREF
coredump

1
@coredump ใช่ไหมขอบคุณ!
Dada

3

Javascript ES6, 36 34 ไบต์

(a,m,n)=>(x=a[m],a[m]=a[n],a[n]=x)
  • -2 ไบต์เนื่องจากฟังก์ชันกำลังเปลี่ยนอาร์เรย์ ไม่จำเป็นต้องส่งคืนอาร์เรย์ ขอบคุณ @Neil

การสาธิต


1
คำแนะนำเหล่านั้นแก้ไขอาเรย์ซึ่งหมายความว่าคุณได้รับอนุญาตให้ไม่ส่งคืนอาเรย์ซึ่งจะช่วยให้คุณประหยัดได้ไม่กี่ไบต์
Neil


2

Java 8 , 48 ไบต์

(a,b,c)->{int t=a[b];a[b]=a[c];a[c]=t;return a;}

การป้อนข้อมูล:

int[] a
int b
int c

คุณจะทำ lambdas โดยมีอาร์กิวเมนต์สามตัวใน Java ได้อย่างไร
Leun Nun

1
คำแนะนำเหล่านั้นแก้ไขอาเรย์ซึ่งหมายความว่าคุณได้รับอนุญาตให้ไม่ส่งคืนอาเรย์ซึ่งจะช่วยให้คุณประหยัดได้ไม่กี่ไบต์
Neil

1
@LeakyNun ฉันไม่ใช่Okxแต่นี่คือตัวอย่างลองตอนนี้ด้วยคำตอบปัจจุบันของOkxและอินเทอร์เฟซที่กำหนดเอง
Kevin Cruijssen

1
และด้วยคำตอบ C # ของCarlos Alejoที่น่าทึ่ง (ด้วยความช่วยเหลือของ @ Neil)คุณสามารถทำให้สั้นลงได้โดยกำจัดตัวแปรชั่วคราว: (a,b,c)->a[b]+=a[c]-(a[c]=a[b])( 31 bytes )
Kevin Cruijssen

1
อาการไอ Collections::swapมีขนาด 17 ไบต์ ... อย่างน้อยก็สมมติว่านี่เป็นความท้าทายนี้ ...
Socratic Phoenix


2

อ็อกเทฟ 28 ไบต์

@(a,n){a(n)=a(flip(n)),a}{2}

ลองออนไลน์!

ค่อนข้างพอใจกับอันนี้จริง ๆ :)

รับอินพุตในแบบฟอร์ม: f([1,2,3,4],[1,2]), 1-indexed

คำอธิบาย:

@(a,n)                         % Anonymous function that takes two 1-dimensional
                               % arrays as input
      {               , }      % Create a cell with two elements
       a(n)=a(flip(n))         % One element are the two number at indices given by
                               % the second input array. This will be a 1x2 array
      {a(n)=a(flip(n)),a}      % Place those two in a cell together with the entire array a
                               % a is now updated, thanks to Octave's inline assignment
      {a(n)=a(flip(n)),a}{2}   % Return the second element

2

แมงกะพรุนขนาด 7 ไบต์

p
ZRi
i

รับรายการและดัชนี ลองออนไลน์!

คำอธิบาย

แมงกะพรุนนั้นมีฟังก์ชั่น "แก้ไขรายการที่ดัชนี" Zซึ่งทำสิ่งที่เราต้องการอย่างแท้จริง ทั้งสองiคว้าอินพุตจาก STDIN Zใช้เป็นอาร์กิวเมนต์สำหรับอินพุตที่สองฟังก์ชันการกลับรายการRและรายการ จากนั้นZทำการแก้ไขและpพิมพ์ผลลัพธ์


2

R, 38 ไบต์

function(x,a,b){x[c(a,b)]=x[c(b,a)];x}

รู้สึกค่อนข้างนาน แต่ฉันไม่สามารถทำให้สั้นลงได้มากนัก น่าเศร้าที่มันต้องการการส่งคืนอย่างชัดเจนผ่านการxต้องการ{}รอบ ๆ ตัวฟังก์ชัน pryr::f()ไม่รับรู้ถึงความต้องการxฟังก์ชั่นอาร์กิวเมนต์ดังนั้นจึงไม่ทำงาน: /


ฉันคิดว่าfunction(x,i)replace(x,i,rev(i))จะใช้ได้แม้จะมีไวยากรณ์ของ pryr
Giuseppe

@Giuseppe อ่าฉันกำลังมองหาฟังก์ชั่นที่สะดวกในการทำ swap แต่กำลังค้นหาด้วยคำที่ผิด รู้สึกอิสระที่จะโพสต์ว่าเป็นคำตอบของตัวเอง
JAD

@Giuseppe ฉันคิดว่าคุณต้องทำreplace(x,i,x[rev(i)])มิฉะนั้นคุณจะใส่ดัชนีแทนค่าของพวกเขา
JAD

2

เซินเจิ้น I / O, 735 ไบต์

23 ¥, 810 Power, 48 Lines of Code

[traces] 
......................
......................
......................
......................
......................
......................
.14.14.14.............
.94.14.14.............
.A........1C..........
.3554..95556..........
.9554.16..............
.A....................
.2....................
......................

[chip] 
[type] UC6
[x] 4
[y] 2
[code] 
  slx x0
  mov x1 acc
  mov x1 dat
  mov acc x3
  mov dat x3
  mov acc x3
  mov dat x3

[chip] 
[type] UC6
[x] 8
[y] 5
[code] 
  slx x2
  mov x2 x1
  mov x0 dat
  mov x2 x1
  mov x0 acc
  mov x2 x1
  mov dat 

[chip] 
[type] UC4X
[x] 2
[y] 6
[code] 
  slx x0
  mov 0 x3
j:  mov x0 acc
  mov acc x2
  teq acc 0
- jmp j
  mov -999 x1

[chip] 
[type] RAM
[x] 5
[y] 6

SIO

การปฏิเสธความรับผิด: อาร์เรย์จะสิ้นสุดใน 0 นี้ อาร์เรย์เป็นความเจ็บปวดในลาที่จะทำงานร่วมกับในเซินเจิ้น I / O เป็นอย่างอื่น

จริง ๆ แล้วฉันทำระดับไอน้ำสำหรับเกมนี้ คุณสามารถเล่นได้ที่นี่

แก้ไข: Aaand ฉันเพิ่งรู้ว่าฉันบอกว่าแถวลำดับนั้นถูกสั่ง แฮก.


ยินดีต้อนรับสู่เว็บไซต์นี่เจ๋งจริงๆ! คุณคิดว่าคุณอาจจะลบช่องว่างบางส่วนในไฟล์และยังมีเสิ่นเจิ้น IO ยอมรับไฟล์ได้หรือไม่ ฉันไม่รู้ว่าคุณยุ่งกับมันมากแค่ไหน แต่คุณควรลองดูว่ารูปแบบนั้นยืดหยุ่นอย่างไร
ข้าวสาลีตัวช่วยสร้าง

ฉันไม่ได้เล่นด้วย! ในทางกลับกันฉันกำลัง axing ส่วนหัวของตัวต่อซึ่งมีชื่อตัวต่อและชื่อทางแก้ไขดังนั้นฉันจึงไม่ควรทำ
junkmail

1

Swift, 111 65 ไบต์ (จัดทำดัชนี 0)

Swift เป็นที่รู้จักกันดีว่าเป็นหนึ่งในภาษารหัสกอล์ฟที่เลวร้ายที่สุด แต่นี่คือฟังก์ชั่นที่ใช้ประโยชน์จากการแสดงคำศัพท์ประกอบไปด้วย :

func t(l:[Int],m:Int,n:Int){var r=l;r[m]=l[n];r[n]=l[m];print(r)}

ลองดูสิ! - การใช้งาน: t(l:[1,2,3],m:0,n:1)


การใช้พารามิเตอร์เริ่มต้นสำหรับ r จะช่วยให้คุณประหยัดไบต์และคุณยังสามารถกลายพันธุ์ผ่านอาร์เรย์ (AFAIK swift อาร์เรย์จะผ่านค่า)
Downgoat

พารามิเตอร์เริ่มต้นใน Swift? ฉันจะทำสิ่งนั้นได้อย่างไร
Mr. Xcoder

และพารามิเตอร์เป็นค่าคงที่ใน Swift @Downgoat
Mr. Xcoder


1

Perl 5 , 32 ไบต์

-3 ไบต์ขอบคุณ@Dom Hastings !

30 ไบต์ของรหัสเมือง + -paธง

@F[pop@p,@p]=@F[@p=<>];$_="@F"

ลองออนไลน์!

ค่อนข้างตรงไปตรงมาโดยใช้ชิ้นส่วนของอาร์เรย์


เฮ้เดี๋ยวก่อน tinkered นี้เล็กน้อยและจัดการเพื่อบันทึก 3 ไบต์ @F[pop@p,@p]=@F[@p=<>];$_="@F".
Dom Hastings

@ DomHastings อืมดีเช่นเคย! ขอบคุณ :)
Dada


1

C, 42 ไบต์

ปรับเปลี่ยนอาร์เรย์ที่มีค่า temp

f(r,m,n){int*a=r;r=a[m];a[m]=a[n];a[n]=r;}

C, 60 58 ไบต์

น่าสนใจกว่านี้เล็กน้อยไม่ได้ใช้ค่าอุณหภูมิใด ๆ ...

f(a,m,n)int*a;{a[m]+=a[n];a[n]-=a[m];a[n]*=-1;a[m]-=a[n];}

C, 49 ไบต์

ใช้แฮคเกอร์

f(a,m,n)int*a;{a[m]^=a[n];a[n]^=a[m];a[m]^=a[n];}

f(x,i,j,t)int*x;{t=x[i];x[i]=x[j];x[j]=t;}หึผมเป็นเพียงเกี่ยวกับการโพสต์
Dennis

@Dennis คุณช่วยฉันสองไบต์ในโซลูชันอื่นขอบคุณ!
cleblanc

โซลูชันที่สองจะสั้นกว่า (และปลอดภัยกว่า) ด้วย^หรือไม่
Dennis

-1 สำหรับรุ่น XOR โดยใช้การกำหนดแทนฟังก์ชั่น#define X(x,y,z)x[y]^=x[z],x[z]^=x[y],x[y]^=x[z]
Giacomo Garabello

f(r,m,n){int*a=r;r=a[m];a[m]=a[n];a[n]=r;}เสีย: SIGSEGV
Bodo Thiesen

1

Pyth , 17 8 ไบต์

บันทึกแล้ว 9 ไบต์ขอบคุณ Leaky Num

@LQ.rUQE

ทดสอบออนไลน์!

นี้เป็น 0 การจัดทำดัชนีและดัชนีจะให้เป็น tuple (n, m)นี้:

คำอธิบาย

@LQ.rUQE

     UQ     # Generate [0, 1, 2, ..., len(input)]
       E    # Get the indices as the tuple (1, 2)
   .r       # Translate each element of UQ to its cyclic successor in E
            # Now the indices are permuted (e.g. [0, 2, 1, ..., len(input)]
@LQ         # For each index, get it's value. Implicit print

8 bytes:@LQ.rUQE
Leun Nun

@LeakyNun มันแตกต่างกันมากฉันคิดว่าคุณสามารถโพสต์ด้วยตัวคุณเอง!
Jim

ฉันเป็น OP ฉันไม่โพสต์ความท้าทายของฉันเอง
Leun Nun

1

Mathematica ขนาด 20 ไบต์

#~Permute~Cycles@#2&

ฟังก์ชันบริสุทธิ์รับสองอาร์กิวเมนต์ในรูปแบบ 1-indexed (และอาจเป็นอันตราย) ต่อไปนี้: กรณีทดสอบที่สอง[5,8,9]; 0 2; [9,8,5]จะถูกเรียกว่า

#~Permute~Cycles@#2& [ {5,8,9} , {{1,3}} ]

(ช่องว่างภายนอกและเพียงเพื่อการแยกวิเคราะห์ที่มองเห็นได้) Permuteเป็นฟังก์ชันบิวอินที่ใช้การเปลี่ยนแปลงกับรายการและCycles[{{a,b}}]แสดงถึงการเปลี่ยนแปลงที่แลกเปลี่ยนองค์ประกอบที่หนึ่งaและbสามของรายการและละเว้นส่วนที่เหลือ


สิ่งที่ต้อง~ทำ
Cyoce

~เป็นสัญกรณ์มัด Mathematica สำหรับฟังก์ชั่นไบนารี: หมายถึงสิ่งเดียวกันเช่นx~f~y f[x,y]
เกร็กมาร์ติน

1

x86 รหัสเครื่อง 10 ไบต์

8B 04 8B 87 04 93 89 04 8B C3

นี่คือฟังก์ชั่นที่เขียนด้วยรหัสเครื่อง x86 แบบ 32 บิตที่แลกเปลี่ยนค่าที่ดัชนีที่ระบุในอาร์เรย์ที่กำหนด อาร์เรย์ได้รับการแก้ไขแบบแทนที่และฟังก์ชันจะไม่ส่งคืนค่า

ใช้หลักการประชุมการโทรที่กำหนดเองทำให้พารามิเตอร์ของฟังก์ชันถูกส่งผ่านในการลงทะเบียน :

  • ที่อยู่ของอาร์เรย์ (ตัวชี้ไปยังองค์ประกอบแรก) จะถูกส่งผ่านไปยังEBXรีจิสเตอร์
  • ดัชนี zero-based ขององค์ประกอบ A จะถูกส่งผ่านในการECXลงทะเบียน
    (สมมติว่าเป็นดัชนีที่ถูกต้อง)
  • ดัชนี zero-based ขององค์ประกอบ B ถูกส่งผ่านในการEDXลงทะเบียน
    (สมมติว่าเป็นดัชนีที่ถูกต้อง)

สิ่งนี้ทำให้ขนาดเล็กลงและสอดคล้องกับข้อกำหนดที่เป็นทางการทั้งหมด แต่หมายความว่าฟังก์ชันไม่สามารถเรียกได้อย่างง่ายดายจากภาษาอื่นเช่น C คุณต้องเรียกใช้จากโปรแกรมภาษาแอสเซมบลีอื่น (คุณสามารถเขียนใหม่เพื่อใช้การลงทะเบียนอินพุตใด ๆ ได้โดยไม่กระทบกับจำนวนไบต์ แต่ไม่มีอะไรน่าอัศจรรย์เกี่ยวกับสิ่งที่ฉันเลือก)

Ungolfed:

8B 04 8B     mov  eax, DWORD PTR [ebx+ecx*4]   ; get value of element A
87 04 93     xchg eax, DWORD PTR [ebx+edx*4]   ; swap element A and element B
89 04 8B     mov  DWORD PTR [ebx+ecx*4], eax   ; store new value for element A
C3           ret                               ; return, with array modified in-place


1

Java 8 + InverseY , 27 ไบต์

java.util.Collections::swap

เพียงแค่เรียกฟังก์ชั่นการแลก ... Consumer3<List, Integer, Integer>นี่คือการอ้างอิงวิธีการพิมพ์

ลองออนไลน์! (ส่วนหัวและส่วนท้ายสำหรับส่วนสำเร็จรูปและสำเนาConsumer3ส่วนต่อประสาน)


คุณไม่จำเป็นต้องเพิ่ม "+ InverseY" ใช้ได้กับวานิลลาชวา 8
Olivier Grégoire

1

JavaScript (ES2015), 66 57 49 ไบต์

แนวทางที่แตกต่าง (อนิจจายาวกว่า) กว่าคำตอบ JavaScript ก่อนหน้า

(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))

แหล่ง

const swap = (arr, a, b, splice) => {
  splice(a, 1, ...splice(arr[b], 1, arr[a]))
}

1
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))49 bytes
Patrick Roberts

ลืมเกี่ยวกับพวกเขาเริ่มต้น args ขอบคุณ!
sshow

0

awk, 31 ไบต์

{c=$a;$a=$b;$b=c;a=$1;b=$2}NR>1

ลองออนไลน์!

ใช้อินพุตในรูปแบบ

1 2
1 2 3 4

และเอาท์พุทเป็น

2 1 3 4

(1 จัดทำดัชนี)

คำอธิบาย

โปรแกรมทั้งหมดเป็นรูปแบบที่หายไปพร้อมกับการกระทำตามด้วยรูปแบบที่มีการกระทำที่ขาดหายไป

เนื่องจากรูปแบบที่ขาดหายไปทำงานในแต่ละบรรทัดรหัสภายในวงเล็บปีกกาจะทำงานสำหรับทั้งสองบรรทัด c=$a;$a=$b;$b=c;ส่วน swaps สองค่าที่ดัชนีaและb(ผ่านตัวแปรชั่วคราวc) สิ่งนี้มีผลกับบรรทัดที่สองเท่านั้นเนื่องจากในบรรทัดแรกaและbยังไม่ได้กำหนด a=$1;b=$2กำหนดส่วนหนึ่งaที่จะเป็นช่องแรกและbจะเป็นสนามที่สองซึ่งกำหนดค่าที่เหมาะสมสำหรับส่วนแรกที่จะวิ่งในบรรทัดที่สอง

เนื่องจากการกระทำที่ขาดหายไปนั้นเทียบเท่า{print}รูปแบบจะพิมพ์ทุกบรรทัดที่ตรงกัน โดยเฉพาะอย่างยิ่งรูปแบบนี้คือNR>1: คือพิมพ์ทุกครั้งที่หมายเลขบรรทัดมากกว่า 1 ซึ่งเกิดขึ้นเป็นบรรทัดที่ 2 ซึ่งจะทำงานหลังจากมีการแลกเปลี่ยนค่าที่เกิดขึ้นดังนั้นจึงเสร็จสิ้นภารกิจ


0

q / kdb +, 17 ไบต์

วิธีการแก้:

{@[x;(|)y;:;x y]}

ตัวอย่าง:

q){@[x;(|)y;:;x y]}[1 2 3 4;0 1]
2 1 3 4

คำอธิบาย:

รุ่น q ของคำตอบ k โดย Simon ใช้:ฟังก์ชั่นassign กับ x ที่ดัชนีย้อนกลับ y ด้วยค่า x ทำดัชนีที่ y แยกย่อยคุณสามารถดูได้ชัดเจนยิ่งขึ้น:

q)x:1 2 3 4
q)y:0 1
q)x y
1 2
q)(|)y
1 0
q)x(|)y
2 1
q)@[x;(|)y;:;x y]
2 1 3 4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.