Tổng mảng ngược


34

Chương trình của bạn nên lấy một mảng làm đầu vào.

Mảng:

  1. Sẽ luôn là 1 chiều
  2. Sẽ chỉ chứa số nguyên
  3. Có thể để trống

Chương trình sẽ đảo ngược mảng, và sau đó thêm các phần tử vào bản gốc chẳng hạn:

Đầu vào: [1, 2, 3]

Nguyên: [1, 2, 3]

Đảo ngược: [3, 2, 1]

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

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

Đầu ra: [4, 4, 4]


Các trường hợp thử nghiệm:

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

Đây là , mã ngắn nhất (tính bằng byte) sẽ thắng!


J 3 byte. Chương trình là t. t =: + |.
Richard Donovan

@RichardDonovan Trả lời tốt đẹp! Bạn có thể gửi câu trả lời thay vì nhận xét được không :)
Noah Cristino

Câu trả lời:


13

Haskell , 20 byte

Lưu 5 byte bằng cách thay đổi thành một điểm miễn phí theo đề xuất của nimi

zipWith(+)=<<reverse

Hãy thử trực tuyến!


4
đi không điểm : zipWith(+)=<<reverse.
nimi

@nimi Wow Tôi không nghĩ sẽ làm điều đó nhưng điều đó khá thông minh.
Phù thủy lúa mì

Tôi đặt mảng ở đâu? Tôi đã thử tranh luận và nhập liệu trên TIO
Noah Cristino

@NoahCristino Tôi đã sửa TIO. Đây là một hàm không có điểm nên bạn chỉ cần đặt đầu vào sau hàm tuy nhiên Haskell yêu cầu mainphải biên dịch.
Phù thủy lúa mì

3
@maple_shaft: chúng tôi sử dụng =<<từ đơn vị hàm được định nghĩa là : (=<<) f g x = f (g x) x. Ở đây, được viết bằng infix: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi

11

Thạch , 2 byte

+U

Hãy thử trực tuyến!

hoặc là

+Ṛ

Hãy thử trực tuyến! (cảm ơn @Mr. Xcoder cho chương trình thứ hai)

giải thích, mặc dù nó khá tự giải thích

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

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

Đối với mảng trống [], kết quả này không có gì. Đúng rồi. Đại diện của Jelly trong danh sách trống chỉ đơn giản là không có gì. Lưu ý rằng đại diện của Jelly trong danh sách với một phần tử chỉ là chính phần tử đó. Nối ŒṘvào mã để xem biểu diễn bên trong Python của đầu ra.


Tôi tìm thấy 2 vấn đề. 1) Khi được thử nghiệm, [9]nó xuất ra 18 thay vì [18]và 2) khi được thử nghiệm, []nó không tạo ra bất cứ thứ gì.

@NoahCristino Đây không phải là một chương trình đầy đủ, và đã có lời giải thích cho câu trả lời đó.
Erik các Outgolfer

Vì vậy, tôi đoán điều này là tốt, đó là cách Jelly tạo ra nó
Noah Cristino

@NoahCristino Vâng. Tôi đã thêm một phần vào cuối câu trả lời của mình để bạn có thể đặt nguyên tử đó vào cuối mã để xem Python sẽ in nó như thế nào.
HyperNeutrino

+Ṛlàm việc quá
Ông Xcoder

11

JavaScript (ES6), 27 byte

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


Ồ, anh bạn, tôi đã ở gần đó, nhưng tôi không nghĩ sẽ sử dụng toán tử lây lan để tạo bản sao.
Rick Hitchcock

Bạn có thể thêm nhúng thử nó cho javascript không?




7

Japt , 7 byte

mÈ+Ug~Y

Hãy thử trực tuyến! với -Qcờ để định dạng mảng đầu ra.

Giải trình

Ngụ ý: U= mảng đầu vào

Ánh xạ đầu vào theo chức năng sau ...

+Ug

Giá trị, cộng với giá trị trong mảng đầu vào tại chỉ mục ...

~Y

-(index+1), được các phần tử từ cuối mảng.


1
Làm tốt lắm! Tôi thích nhiều thứ đầu vào!

1
Tôi thực sự thích trình thông dịch Japt nhiều đầu vào. Công việc tốt!
Oliver

Đó là thực sự mát :-) Tôi muốn thêm tính năng để người phiên dịch "chính thức", nhưng với những thiết kế hiện tại nó sorta unextendable ...
ETHproductions



6

Python 2 , 33 32 byte

-1 byte nhờ @xnor

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

Hãy thử trực tuyến!


Đã vượt qua tất cả các bài kiểm tra của tôi công việc tốt :)
Noah Cristino

Thật là một phương pháp khác thường. l*1tiết kiệm một byte.
xnor

Tôi đang gặp khó khăn trong việc hiểu mệnh l*1, bất kỳ công phu nào
dhssa

@dhssa l*1tạo một bản sao của danh sách l. Nếu chúng tôi không tạo một bản sao, pop()sẽ xóa các thành phần khỏi danh sách trước khi chúng được truy cập trong vòng lặp for.
trứng

Cảm ơn đã giải thích, tôi đã nhận nó ngay bây giờ. mẹo tốt để biết mã hóa.
dhssa


5

C # (.NET Core) , 61 60 byte

-1 byte nhờ TheLethalCoder

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

Hãy thử trực tuyến!

Số lượng byte cũng bao gồm:

using System.Linq;

Để giải thích - Hàm Zip trong LINQ có hai bộ sưu tập và thực hiện hàm đã cho cho tất cả các phần tử tương ứng, nghĩa là. cả hai yếu tố đầu tiên với nhau, cả hai yếu tố thứ hai, vv


1
Câu trả lời tốt. Cảm ơn các bình luận về đầu vào.

1
Xin chào và chào mừng đến với PPCG! Bạn không cần dấu chấm phẩy trong số byte. Tôi tin rằng bạn có thể trả lại bộ sưu tập trực tiếp từ Zipcuộc gọi để không cần ToArray(). Công việc tốt!
TheLethalCoder

@TheLethalCoder Cảm ơn, và tôi đã thêm ToArray () vì thử thách là về mảng, vì vậy tôi muốn lambda tự chứa là mảng -> mảng.
Grzegorz Puławski


4

APL (Dyalog) , 3 byte

⌽+⊢

Hãy thử trực tuyến!

Giải trình

          The argument reversed
+           Plus
          The argument

1
ninja Tôi cần chuyển sang bàn phím APL ... xD
Uriel

@Uriel Tôi luôn luôn trên bàn phím của APL của tôi: D
Kritixi Lithos

Yêu sự đơn giản. Nó xuất ra ⌽+⊢mà không có đầu vào
Noah Cristino

@NoahCristino Một đầu vào trống được chỉ định với , vectơ trống. Không có gì phải bàn cãi, nó tự in ra tàu
Kritixi Lithos


4

R , 17 16 byte

-1 byte nhờ djhurio

rev(l<-scan())+l

Đọc từ stdin; trả về vectơ;numeric(0)là vectơ số có độ dài bằng không cho danh sách trống.

Hãy thử trực tuyến!


Đối với một "mảng" trống, nó trả vềnumeric(0)
Noah Cristino

1
@NoahCristino một vectơ trống được biểu diễn như numeric(0)trong R.
Leaky Nun

Đó là tốt. @LeakyNun

1
rev(l<-scan())+l, 16 byte?
djhurio

Đối với bản ghi, một thay thế chức năng R + pryr chỉ dài hơn một byte:pryr::f(rev(x)+x)
JayCe



3

PowerShell , 26 byte

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

Hãy thử trực tuyến!

Lấy đầu vào làm đối số dòng lệnh.


Bạn có thể thêm một TIO? và một liên kết dưới tên như thế này: codegolf.stackexchange.com/a/135427/61877
Noah Cristino

@NoahCristino: Thích cái này? Không được sử dụng thứ đó cho đến nay, vì vậy không biết tôi có thể làm gì sai. Nhân tiện, nếu bạn mong đợi mọi người sử dụng một dịch vụ nhất định trong câu trả lời của họ, thì vui lòng nêu rõ trong phần mô tả nhiệm vụ.
Joey

Đó là tốt. Không bắt buộc, nó chỉ làm cho câu trả lời có chất lượng cao hơn và dễ kiểm tra hơn cho người xem trong tương lai.

3

C, 49 byte

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

Không nên a,n,ba,b,nhay cái gì?
Erik the Outgolfer 24/07/17

@EriktheOutgolfer Không, bkhông phải là một tham số cho chức năng, chỉ là một định nghĩa bổ sung được nhồi trong đó vì lý do chơi gôn. aphải là một con trỏ tới số nguyên và nphải có bao nhiêu số nguyên trong mảng.
orlp

Bạn có thể vui lòng thêm một liên kết TIO?

3

PowerShell , 40 32 byte

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

Hãy thử trực tuyến!

Đưa đầu vào dưới dạng đối số dòng lệnh riêng lẻ, được phép là một trong các định dạng danh sách gốc cho PowerShell. Sau đó lặp qua từng phần tử (nghĩa là một cách lặp ngắn hơn qua các chỉ số), thêm phần tử đếm từ phía sau ( -1được lập chỉ mục) vào phần tử hiện tại (0 được lập chỉ mục, do đó giảm dần -1). Những cái còn lại trên đường ống và đầu ra là ẩn.

Đã lưu 8 byte nhờ @briantist


nó không tạo ra một mảng.

1
Nói chung, đầu vào / đầu ra @NoahCristino PowerShell là lạ. Nó được xuất ra như một mảng, nó chỉ không có gì chụp nói mảng, và vì vậy khi tiềm ẩn Write-Outputxảy ra, nó đặt mọi thứ trên stdout một mục trên mỗi dòng. Ví dụ, bạn có thể thấy ở đây rằng, khi bị bắt, đối tượng thực sự là một arraykiểu.
admBorkBork

Đủ tốt rồi :) ít nhất nó đã thử
Noah Cristino

Tôi đang sử dụng điện thoại di động và không thể kiểm tra dễ dàng như vậy, nhưng không phải là ngắn hơn 1 byte để xóa paramvà sau đó thay thế 1..$nbằng 1..($n=$args)?
sáng lập

@briantist Không hoàn toàn, nhưng bạn đã cho tôi một cách nghĩ khác về nó, tiết kiệm một loạt byte. Cảm ơn!
admBorkBork

3

Java 8, 61 57 56 53 byte

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

-1 byte và đã sửa lỗi nhờ @Nevay .
-3 byte nhờ @ OliverGrégoire .

(Đó là một cảng (và golfed bởi 4 8 byte) của @jkelm 's C # câu trả lời , nhưng bây giờ đó là một giải pháp ngắn khác nhau nhờ @ OliverGrégoire .)

Giải trình:

Hãy thử nó ở đây.

Phương thức sửa đổi mảng đầu vào để lưu byte, do đó không cần kiểu trả về.

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
Bạn có thể tiết kiệm 1 byte bằng cách sử dụng a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay

1
Bên cạnh đó, mã không thành công cho các mảng có độ dài lẻ 1,2,3(trả về 4,2,4thay vì 4,4,4), vòng lặp phải chạy miễn là 2*i<lkhông i<l/2.
Nevay

@Nevay Cảm ơn. Tôi biết rằng nó có thể chơi golf l-i-1, nhưng không thể đến với nó ..
Kevin Cruijssen

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

1
@ OlivierGrégoire Cảm ơn. Và của bạn lrcó ý nghĩa cho việc thực hiện của bạn, vì vậy tôi cũng đã sử dụng chúng (và thêm một lời giải thích).
Kevin Cruijssen



2

bất kỳ , 3 byte

"U+

Phiên bản trên TryItOnline! là một phiên bản lỗi thời của anyfix, trong đó có một vài lỗi nghiêm trọng như không thể thêm danh sách vì lỗi chính tả trong mã nguồn. Sử dụng mã trên GitHub thay thế.

"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 byte

Đây là một chức năng lấy đầu vào trên đỉnh của ngăn xếp và đầu ra trên đỉnh của ngăn xếp.

𝕓𝔻

Hãy thử trực tuyến!


Có được phép sửa đổi ngăn xếp đầu vào thông qua mã Neim thực tế thay vì các phương thức nhập thông thường không?
LiefdeWen

@LiefdeWen Có, điều đó được cho phép trong mặc định cho bài đăng meta I / O.
Okx

2

Röda , 22 byte

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

Hãy thử trực tuyến!

Đây là một hàm ẩn danh nhận một mảng và trả về một luồng các giá trị, mà liên kết TIO xuất ra được phân tách trên các dòng mới.

Giải trình

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

Vượt qua bài kiểm tra của tôi! Câu trả lời chính xác.

2

JavaScript (ES6), 34 33 byte

Đã lưu một byte nhờ @ETHproductions.

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


Tôi thích cách bạn đưa vào các trường hợp thử nghiệm, +2
Noah Cristino

Tôi nghĩ bạn có thể lưu một byte bằng cách thay đổi -i-1thành +~i.
Sản phẩm ETH

@ETHproductions, vâng, cảm ơn!
Rick Hitchcock


2

PHP, 59 byte

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

lấy đầu vào từ các đối số dòng lệnh; đầu ra trống cho đầu vào trống

Đưa ra một cảnh báo trong PHP> 7.0. Phiên bản này không (60 byte):

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

Câu trả lời tốt đẹp! :)
Noah Cristino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.