Reverse Array Sum


34

โปรแกรมของคุณควรใช้อาร์เรย์เป็นอินพุต

อาร์เรย์:

  1. จะเป็น 1 มิติเสมอ
  2. จะมีจำนวนเต็มเท่านั้น
  3. สามารถว่างเปล่า

โปรแกรมควรย้อนกลับอาร์เรย์แล้วเพิ่มองค์ประกอบเข้ากับต้นฉบับเช่น:

การป้อนข้อมูล: [1, 2, 3]

เดิม: [1, 2, 3]

ย้อนกลับ [3, 2, 1]

[1, 2, 3]
 +  +  +
[3, 2, 1]

[1+3, 2+2, 3+1]

เอาท์พุท: [4, 4, 4]


กรณีทดสอบ:

#In             #Out
[8, 92],        [100, 100]
[1, 2, 3],      [4, 4, 4]
[5, 24, 85, 6], [11, 109, 109, 11]
[],             []
[999],          [1998]

นี่คือซึ่งเป็นรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ!


J 3 ไบต์ โปรแกรมคือ t = + |
Richard Donovan

@RichardDonovan คำตอบที่ดี! คุณสามารถส่งเป็นคำ
ตอบแทน

คำตอบ:


13

Haskell , 20 ไบต์

5 ไบต์บันทึกโดยการเปลี่ยนเป็นจุดฟรีตามที่แนะนำโดย nimi

zipWith(+)=<<reverse

ลองออนไลน์!


4
ไป zipWith(+)=<<reversepointfree:
nimi

@nimi ว้าวฉันไม่คิดว่าจะทำอย่างนั้น
ข้าวสาลี Wizard

ฉันจะใส่อาร์เรย์ได้ที่ไหน ฉันพยายามโต้แย้งและป้อนข้อมูลใน TIO
Noah Cristino

@NoahCristino ฉันแก้ไข TIO นี่เป็นฟังก์ชั่นที่ไม่มีจุดดังนั้นคุณเพียงแค่ใส่อินพุตหลังจากฟังก์ชั่นอย่างไรก็ตาม Haskell ต้องการmainคอมไพล์
ข้าวสาลี Wizard

3
@maple_shaft: เราใช้=<<จาก monad (=<<) f g x = f (g x) xฟังก์ชั่นที่มีการกำหนดเป็น: นี่เขียนในมัด: ->(zipWith(+) =<< reverse) x zipWith(+) (reverse x) x
nimi

11

เยลลี่ 2 ไบต์

+U

ลองออนไลน์!

หรือ

+Ṛ

ลองออนไลน์! (ขอบคุณ @Mr. Xcoder สำหรับโปรแกรมที่สอง)

คำอธิบายแม้ว่ามันจะอธิบายได้ด้วยตนเอง

+U  Main link
+   Add, vectorizing, 
 U                    the input, reversed

+Ṛ  Main link
+   Add, vectorizing,
 Ṛ                    the input, reversed, without vectorizing (same thing for depth-1 lists)

สำหรับอาร์เรย์ที่ว่างเปล่าจะ[]ไม่มีผลใด ๆ ถูกต้อง. การเป็นตัวแทนของรายการที่ว่างของเจลลี่นั้นเป็นอะไรที่ไร้ค่า โปรดทราบว่าการเป็นตัวแทนของรายการที่มีองค์ประกอบเดียวของเยลลี่เป็นเพียงองค์ประกอบของตัวเอง ผนวกŒṘกับรหัสเพื่อดูการแสดงผลภายในของ Python


ฉันพบปัญหา 2 ข้อ 1) เมื่อทดสอบกับ[9]มันเอาต์พุต 18 แทนที่จะเป็น[18]และ 2) เมื่อทดสอบกับ[]มันจะไม่ส่งออกอะไร
โนอาห์คริสติโน

@NahahCristino มันไม่ได้เป็นโปรแกรมเต็มรูปแบบและมีคำอธิบายสำหรับคำตอบนั้นแล้ว
Erik the Outgolfer

ดังนั้นฉันเดาว่านี่เป็นเรื่องปกติมันเป็นเพียงแค่วิธีที่เยลลี่ส่งออกมัน
โนอาห์คริสติโน

@NoahCristino ใช่ ฉันเพิ่มส่วนท้ายคำตอบของฉันเพื่อให้คุณสามารถใส่อะตอมที่ท้ายรหัสเพื่อดูว่า Python จะพิมพ์มันอย่างไร
HyperNeutrino

+Ṛทำงานเกินไป
Mr. Xcoder

11

JavaScript (ES6), 27 ไบต์

a=>[...a].map(e=>e+a.pop())


โอ้มนุษย์ฉันเกือบจะอยู่ที่นั่น แต่ฉันไม่คิดว่าจะใช้ตัวดำเนินการแพร่กระจายทำโคลน
Rick Hitchcock

คุณสามารถเพิ่มการลองแบบฝังตัวสำหรับจาวาสคริปต์ได้หรือไม่?
Noah Cristino




7

Japtap , 7 ไบต์

mÈ+Ug~Y

ลองออนไลน์! ด้วย-Qแฟล็กเพื่อจัดรูปแบบอาร์เรย์เอาต์พุต

คำอธิบาย

โดยนัย: U= อาร์เรย์อินพุต

แม็พอินพุตโดยฟังก์ชันต่อไปนี้ ...

+Ug

ค่าบวกค่าในอาร์เรย์อินพุตที่ดัชนี ...

~Y

-(index+1)ซึ่งได้รับองค์ประกอบจากจุดสิ้นสุดของอาร์เรย์


1
เยี่ยมมาก! ฉันชอบสิ่งที่ใส่หลาย!
โนอาห์คริสติโน

1
ฉันชอบล่าม Japt หลายอินพุต งานที่ดี!
Oliver

มันเจ๋งจริงๆ :-) ฉันจะเพิ่มฟีเจอร์นั้นให้กับล่าม "เป็นทางการ" แต่ด้วยการออกแบบในปัจจุบันมันไม่สามารถ
จำแนกได้



6

Python 2 , 33 32 ไบต์

-1 ไบต์ขอบคุณ @xnor

lambda l:[i+l.pop()for i in l*1]

ลองออนไลน์!


ผ่านการทดสอบทั้งหมดของฉันเป็นงานที่ดี :)
โนอาห์คริสติโน

ช่างเป็นวิธีที่ผิดปกติ l*1บันทึกเป็นไบต์
xnor

ฉันมีปัญหาในการทำความเข้าใจที่ตราไว้หุ้นl*1รายละเอียดใด ๆ
dhssa

@dhssa ทำสำเนาของรายการl*1 lหากเราจะไม่ทำสำเนาpop()จะลบองค์ประกอบออกจากรายการก่อนที่จะเข้าถึงได้ใน for for loop
ovs

ขอบคุณสำหรับคำอธิบายตอนนี้ฉันเข้าใจแล้ว เคล็ดลับที่ดีที่จะรู้สำหรับการเข้ารหัส
dhssa


5

C # (.NET Core) , 61 60 ไบต์

-1 ไบต์ขอบคุณTheLethalCoder

a=>a.Reverse().Zip(a,(x,y)=>x+y).ToArray()

ลองออนไลน์!

จำนวนไบต์ยังรวมถึง:

using System.Linq;

สำหรับคำอธิบาย - ฟังก์ชั่น Zip ใน LINQ ใช้สองคอลเลกชันและดำเนินการฟังก์ชั่นที่กำหนดสำหรับองค์ประกอบที่เกี่ยวข้องทั้งหมดเช่น ทั้งองค์ประกอบแรกเข้าด้วยกันทั้งสององค์ประกอบ ฯลฯ


1
คำตอบที่ดี. ขอบคุณสำหรับความคิดเห็นเกี่ยวกับการป้อนข้อมูล
โนอาห์คริสติโน

1
สวัสดีและยินดีต้อนรับสู่ PPCG! คุณไม่ต้องการเครื่องหมายเซมิโคลอนต่อท้ายในจำนวนไบต์ ผมเชื่อว่าคุณสามารถกลับคอลเลกชันตรงจากการเรียกร้องให้จึงต้องไม่มีZip ToArray()งานที่ดี!
TheLethalCoder

@TheLethalCoder ขอบคุณและฉันได้เพิ่ม ToArray () เนื่องจากความท้าทายเกี่ยวกับอาร์เรย์ดังนั้นฉันจึงต้องการให้แลมบ์ดาในตัวเป็นอาร์เรย์ -> อาเรย์
Grzegorz Puławski

4

CJam , 7 ไบต์

{_W%.+}

ลองออนไลน์!


มันออก""สำหรับ[]ที่แปลก ไม่ใช่ความผิดของคุณเพียงแค่ภาษา
โนอาห์คริสติโน

@NoahCristino []นั่นคือการเป็นตัวแทนของ
Erik the Outgolfer

ใช่มันยากที่จะมีเอาต์พุตมาตรฐานสำหรับความท้าทายของฉันเนื่องจากหลายภาษาแสดงอาร์เรย์ที่แตกต่างกันโดยเฉพาะอย่างยิ่ง[]และ[4]ดังนั้นจึงไม่เป็นไร
โนอาห์คริสติโน

4

APL (Dyalog) 3 ไบต์

⌽+⊢

ลองออนไลน์!

คำอธิบาย

          The argument reversed
+           Plus
          The argument

1
ninja'd ฉันต้องการที่จะย้ายไปยังแป้นพิมพ์ APL ... xD
ยูเรียล

@Uriel ฉันมักจะอยู่บนแป้นพิมพ์ APL ของฉัน: D
Kritixi Lithos

รักความเรียบง่าย มัน⌽+⊢ไม่มีสัญญาณเข้า
โนอาห์คริสติโน

@NoahCristino มีการระบุอินพุตว่างด้วยเวกเตอร์เปล่า ไม่มีข้อโต้แย้งมันพิมพ์รถไฟด้วยตัวเอง
Kritixi Lithos


4

R , 17 16 ไบต์

-1 ไบต์ขอบคุณ djhurio

rev(l<-scan())+l

อ่านจาก stdin; ส่งคืนเวกเตอร์ numeric(0)เป็นเวกเตอร์ตัวเลขที่มีความยาวเป็นศูนย์สำหรับรายการว่าง

ลองออนไลน์!


สำหรับ "array" ที่ว่างเปล่าจะส่งคืนnumeric(0)
Noah Cristino

1
@NoahCristino เวกเตอร์ที่ว่างเปล่าแสดงnumeric(0)อยู่ใน R.
Leaky Nun

ไม่เป็นไร. @LeakyNun
Noah Cristino

1
rev(l<-scan())+l16 ไบต์?
djhurio

สำหรับบันทึกการR + pryr ทางเลือกที่ทำงานได้เป็นเพียงหนึ่งไบต์อีกต่อไป:pryr::f(rev(x)+x)
Jayce



3

PowerShellขนาด 26 ไบต์

($a=$args)|%{+$a[--$i]+$_}

ลองออนไลน์!

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดรับคำสั่ง


คุณสามารถเพิ่ม TIO ได้หรือไม่? และลิงก์ภายใต้ชื่อดังนี้: codegolf.stackexchange.com/a/135427/61877
Noah Cristino

@NoahCristino: เช่นนี้? ยังไม่ได้ใช้สิ่งนั้นจนถึงดังนั้นจึงไม่มีความคิดว่าฉันอาจทำผิด โดยวิธีการถ้าคุณคาดหวังให้คนใช้บริการบางอย่างในคำตอบของพวกเขาแล้วโปรดระบุในคำอธิบายงาน
Joey

ไม่เป็นไร. ไม่จำเป็นต้องใช้เพียงแค่ทำให้คำตอบมีคุณภาพสูงขึ้นและง่ายต่อการทดสอบสำหรับผู้ชมในอนาคต
โนอาห์คริสติโน

3

C, 49 ไบต์

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}

ไม่ควรa,n,bเป็นa,b,nหรืออะไรนะ?
Erik the Outgolfer

@EriktheOutgolfer ไม่bไม่ใช่พารามิเตอร์สำหรับฟังก์ชั่น แต่เป็นคำจำกัดความเพิ่มเติมที่ถูกใส่เข้าไปในเหตุผลของการเล่นกอล์ฟ aต้องเป็นตัวชี้ไปยังจำนวนเต็มและnต้องเป็นจำนวนเต็มในอาร์เรย์
orlp

คุณช่วยเพิ่มลิงค์ TIO ได้ไหม
โนอาห์คริสติโน

3

PowerShell , 40 32 ไบต์

($n=$args)|%{$n[-++$i]+$n[$i-1]}

ลองออนไลน์!

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่งแต่ละรายการซึ่งได้รับอนุญาตเป็นหนึ่งในรูปแบบรายการดั้งเดิมสำหรับ PowerShell จากนั้นวนซ้ำแต่ละองค์ประกอบ (เช่นวิธีที่สั้นกว่าของการวนลูปผ่านดัชนี) เพิ่มองค์ประกอบนับจากด้านหลัง ( -1จัดทำดัชนี) ไปยังองค์ประกอบปัจจุบัน ( 0จัดทำดัชนีดังนั้นการลดลง-1) สิ่งเหล่านี้จะถูกทิ้งไว้บนไพพ์ไลน์

บันทึกแล้ว 8 ไบต์ขอบคุณ @briantist


มันไม่ได้ส่งออกอาร์เรย์
โนอาห์คริสติโน

1
@NahahCristino PowerShell อินพุต / เอาท์พุตคือโดยทั่วไปแปลก มันกำลังแสดงผลออกมาเป็นอาเรย์มันไม่มีอะไรที่จะบอกอาเรย์ได้ดังนั้นเมื่อมีนัยทางอ้อมWrite-Outputเกิดขึ้นมันจะทำให้สิ่งต่าง ๆ อยู่ในรายการเดียวต่อบรรทัด ตัวอย่างเช่นคุณสามารถดูที่นี่ว่าเมื่อจับแล้ววัตถุนั้นเป็นarrayประเภทแน่นอน
AdmBorkBork

ดีพอแล้ว :) อย่างน้อยก็ลอง
โนอาห์คริสติโน

ฉันใช้งานผ่านมือถือและไม่สามารถทดสอบได้ง่ายนัก แต่มันสั้นกว่า 1 ไบต์ไหมที่จะลบparamแล้วแทนที่1..$nด้วย1..($n=$args)?
ต้มตุ๋น

@ Briantist ไม่มาก แต่คุณให้วิธีคิดแบบต่าง ๆ กับฉันโดยประหยัดไบต์จำนวนมาก ขอบคุณ!
AdmBorkBork

3

Java 8, 61 57 56 53 ไบต์

a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}

-1 ไบต์และขอขอบคุณข้อผิดพลาดการแก้ไขเพื่อ@Nevay
-3 ไบต์ขอบคุณที่@ OliverGrégoire

(เป็นพอร์ตของ (และเล่นกอล์ฟขนาด4 bytes) ของคำตอบ C #ของ@jkelmแต่ตอนนี้มันเป็นคำตอบที่สั้นกว่าที่ต่างไปจาก@ OliverGrégoire )

คำอธิบาย:

ลองที่นี่

วิธีการปรับเปลี่ยนอินพุทอาเรย์เพื่อบันทึกไบต์จึงไม่จำเป็นต้องมีผลตอบแทนประเภท

a->{                    // Method with integer-array parameter and no return-type
  for(int l=0,          //  Left-integer (starting at 0)
          r=a.length;   //  Right-integer (starting at the length of the input-array)
      l<r;              //  Loop as long as left is smaller than right
    a[l]=               //   Change the number at the current left index to:
         a[--r]+=a[l++] //    The number at the right index + itself
                        //    (The += adds the number at the left index also to the right index)
                        //    (And the --/++ increases/decreases the indexes by 1,
                        //     until we've reached the middle of the array)
  );                    //  End of loop
}                       // End of method

1
คุณสามารถบันทึก 1 a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}ไบต์โดยใช้
Nevay

1
นอกจากนั้นรหัสล้มเหลวสำหรับอาร์เรย์มีความยาวคี่1,2,3(ผลตอบแทน4,2,4แทน4,4,4) วงที่มีการเรียกตราบใดที่ไม่ได้2*i<l i<l/2
Nevay

@Nevay ขอบคุณ ฉันรู้ว่ามันควรจะเป็นไปได้ที่จะเล่นกอล์ฟl-i-1ก็ไม่สามารถเกิดขึ้นกับมัน ..
Kevin Cruijssen

2
53 a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}ไบต์:
Olivier Grégoire

1
@ OlivierGrégoireขอบคุณ และของคุณlและrเหมาะสมสำหรับการใช้งานของคุณดังนั้นฉันจึงใช้สิ่งเหล่านั้นเช่นกัน (และเพิ่มคำอธิบาย)
Kevin Cruijssen


2

สมบูรณ์แบบงานที่ยอดเยี่ยม
โนอาห์คริสติโน

เอริคแก้ปัญหาของฉันใน 7 ภาษา xD
โนอาห์คริสติโน

@NoahCristino ใช่ฉันพยายามเก็บมันไว้ไม่ถึง 15 ... ;)
Erik the Outgolfer

ฉันจะต้องเริ่มเพิ่ม -1 สำหรับการส่งทุกครั้ง xD
Noah Cristino

2

anyfix , 3 ไบต์

"U+

รุ่นของ TryItOnline! เป็นเวอร์ชันที่ล้าสมัยของ anyfix ซึ่งมีข้อผิดพลาดร้ายแรงบางประการเช่นไม่สามารถเพิ่มรายการได้เนื่องจากการพิมพ์ผิดในซอร์สโค้ด ใช้รหัสบน GitHub แทน

"U+  Program
"    Duplicate top of stack
 U   Reverse top of stack if it is a list (which it should be...)
  +  Add, vectorizing for lists

2

Neim , 2 ไบต์

นี่คือฟังก์ชันที่รับอินพุตที่ด้านบนของสแต็กและเอาท์พุทที่ด้านบนของสแต็ก

𝕓𝔻

ลองออนไลน์!


อนุญาตให้แก้ไขอินพุตสแต็กด้วยรหัส Neim จริงแทนที่จะเป็นวิธีป้อนข้อมูลปกติได้หรือไม่
LiefdeWen

@LiefdeWen ใช่แล้วนั่นเป็นค่าเริ่มต้นสำหรับโพสต์เมตาของ I / O
Okx

2

Röda , 22 ไบต์

{reverse(_)<>_1|[_+_]}

ลองออนไลน์!

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

คำอธิบาย

reverse(_)          The array reversed
<>                  interleaved with
_1                  the array itself
                    Push each element to the stream
[_+_]               Pull two values and push their sum

ผ่านการทดสอบของฉัน! คำตอบที่ดี
โนอาห์คริสติโน

2

JavaScript (ES6), 34 33 ไบต์

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

a=>a.map((e,i)=>e+a[a.length+~i])


ฉันชอบวิธีที่คุณใส่ในกรณีทดสอบ +2
โนอาห์คริสติโน

ฉันคิดว่าคุณสามารถบันทึกไบต์โดยการเปลี่ยนไป-i-1 +~i
ETHproductions

@ ETHproductions ใช่ขอบคุณ!
Rick Hitchcock


2

PHP, 59 ไบต์

for(;a&$c=$argv[++$i];)$a[]=$c+$argv[$argc-$i];print_r($a);

รับอินพุตจากอาร์กิวเมนต์บรรทัดรับคำสั่ง เอาต์พุตว่างสำหรับอินพุตว่าง

ให้คำเตือนใน PHP> 7.0 รุ่นนี้ไม่ (60 ไบต์):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);

คำตอบที่ดี! :)
โนอาห์คริสติโน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.