Jumlah Array Terbalik

34

Program Anda harus mengambil array sebagai input.

Array:

  1. Akan selalu 1 dimensi
  2. Hanya akan berisi bilangan bulat
  3. Bisa kosong

Program harus membalikkan array, dan kemudian menambahkan elemen ke aslinya misalnya:

Memasukkan: [1, 2, 3]

Asli: [1, 2, 3]

Terbalik: [3, 2, 1]

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

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

Keluaran: [4, 4, 4]


Kasus uji:

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

Ini adalah , kode terpendek (dalam byte) menang!

Noah Cristino
sumber
J 3 byte. Program adalah t. t =: + |.
Richard Donovan
@RichardDonovan Jawaban Bagus! Bisakah Anda mengirim sebagai jawaban, bukan komentar, mohon :)
Noah Cristino

Jawaban:

13

Haskell , 20 byte

5 byte simpan dengan mengubah ke titik bebas seperti yang disarankan oleh nimi

zipWith(+)=<<reverse

Cobalah online!

Wisaya Gandum
sumber
4
pergi pointfree: zipWith(+)=<<reverse.
nimi
@nimi Wow saya tidak berpikir untuk melakukan itu tetapi itu cukup pintar.
Wheat Wizard
Di mana saya meletakkan array? Saya mencoba argumen, dan memberi masukan pada TIO
Noah Cristino
@NoahCristino Saya memperbaiki TIO. Ini adalah fungsi point-free sehingga Anda hanya memasukkan input setelah fungsi namun Haskell membutuhkan mainuntuk mengkompilasi.
Wheat Wizard
3
@maple_shaft: kita menggunakan =<<dari fungsi monad yang didefinisikan sebagai: (=<<) f g x = f (g x) x. Di sini, ditulis dalam infiks: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi
11

Jelly , 2 byte

+U

Cobalah online!

atau

+Ṛ

Cobalah online! (terima kasih @Mr. Xcoder untuk program kedua)

Penjelasan, meskipun cukup jelas

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

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

Untuk array kosong [], ini tidak menghasilkan apa-apa. Itu betul. Representasi Jelly dari daftar kosong sama sekali bukan apa-apa. Perhatikan bahwa representasi Jelly dari daftar dengan elemen tunggal hanyalah elemen itu sendiri. Tambahkan ŒṘkode untuk melihat representasi internal Python dari output.

HyperNeutrino
sumber
Saya menemukan 2 masalah. 1) Ketika diuji di [9]atasnya menghasilkan 18 bukannya [18], dan 2) ketika diuji []tidak menghasilkan apa-apa.
Noah Cristino
@NoahCristino Ini bukan program lengkap, dan sudah ada penjelasan untuk itu dalam jawabannya.
Erik the Outgolfer,
Jadi saya kira ini baik-baik saja, hanya bagaimana Jelly mengeluarkannya
Noah Cristino
@NoahCristino Ya. Saya menambahkan bagian ke akhir jawaban saya sehingga Anda dapat meletakkan atom itu di akhir kode untuk melihat bagaimana Python akan mencetaknya.
HyperNeutrino
+Ṛbekerja juga.
Tn. Xcoder
11

JavaScript (ES6), 27 byte

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

Neil
sumber
Oh, teman, aku hampir sampai, tapi aku tidak berpikir untuk menggunakan operator penyebaran untuk melakukan kloning.
Rick Hitchcock
Bisakah Anda menambahkan tertanam mencobanya untuk javascript?
Noah Cristino
9

05AB1E , 2 byte

Â+

Cobalah online!

Erik the Outgolfer
sumber
Lulus semua tes saya!
Noah Cristino
R+juga berfungsi untuk 2 byte.
Riley
9

Python 2, 32 byte

lambda l:map(sum,zip(l,l[::-1]))

Solusi alternatif tanpa zip(35 byte):

lambda l:map(int.__add__,l,l[::-1])

Cobalah online!

kubah
sumber
7

Python 2 , 40 byte

lambda l:[i+j for i,j in zip(l,l[::-1])]

Cobalah online!

Yang lain, jawaban Python yang lebih pendek menggantikan pemahaman daftar map. Seandainya saya berpikir untuk melakukannya lebih cepat. ; -;

benar-benar manusiawi
sumber
1
Lewati semua tes saya!
Noah Cristino
7

Japt , 7 byte

mÈ+Ug~Y

Cobalah online! dengan -Qbendera untuk memformat larik keluaran.

Penjelasan

Tersirat: U= array input

Petakan input dengan fungsi berikut ...

+Ug

Nilai, ditambah nilai dalam array input di indeks ...

~Y

-(index+1), yang mendapat elemen dari akhir array.

Justin Mariner
sumber
1
Kerja bagus! Saya suka banyak input!
Noah Cristino
1
Saya sangat suka interpreter Japt multi-input. Pekerjaan yang baik!
Oliver
Itu benar-benar keren :-) Saya akan menambahkan fitur itu ke juru bahasa "resmi", tetapi dengan desain saat ini agak tidak bisa diperpanjang ...
ETHproductions
7

Ruby , 25 byte

->a{[*a].map{|i|i+a.pop}}

Cobalah online!

Ventero
sumber
6

Python 2 , 33 32 byte

-1 byte terima kasih kepada @xnor

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

Cobalah online!

ovs
sumber
Melewati semua tes saya dengan baik :)
Noah Cristino
Sungguh metode yang tidak biasa. l*1menghemat satu byte.
xnor
Saya mengalami kesulitan memahami par l*1, elaborasi apa pun
dhssa
@ dhssa l*1membuat salinan daftar l. Jika kita tidak akan membuat salinan, pop()akan menghapus elemen dari daftar sebelum diakses di loop for.
Ovs
Terima kasih atas penjelasannya, saya mengerti sekarang. Trik yang bagus untuk diketahui dalam pengkodean.
dhssa
5

C # (.NET Core) , 61 60 byte

-1 byte terima kasih kepada TheLethalCoder

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

Cobalah online!

Hitungan byte juga mencakup:

using System.Linq;

Untuk penjelasan - fungsi Zip di LINQ mengambil dua koleksi dan mengeksekusi fungsi yang diberikan untuk semua elemen yang sesuai, yaitu. kedua elemen pertama bersama-sama, kedua elemen kedua dll.

Grzegorz Puławski
sumber
1
Jawaban yang bagus. Terima kasih atas komentarnya tentang input.
Noah Cristino
1
Halo dan selamat datang di PPCG! Anda tidak memerlukan trailing semi colon dalam jumlah byte. Saya yakin Anda dapat mengembalikan koleksi langsung dari Zippanggilan ke sehingga tidak perlu ToArray(). Pekerjaan yang baik!
TheLethalCoder
@TheLethalCoder Terima kasih, dan saya menambahkan ToArray () karena tantangannya adalah tentang array, jadi saya ingin lambda mandiri menjadi array -> array.
Grzegorz Puławski
4

CJam , 7 byte

{_W%.+}

Cobalah online!

Erik the Outgolfer
sumber
Ini keluaran ""untuk [], itu aneh. Bukan salahmu hanya bahasa.
Noah Cristino
@NoahCristino Itulah representasi CJam tentang [].
Erik the Outgolfer
Yup, sulit untuk memiliki output standar untuk tantangan saya karena banyak bahasa menampilkan array berbeda terutama [], dan [4], jadi tidak masalah.
Noah Cristino
4

APL (Dyalog) , 3 byte

⌽+⊢

Cobalah online!

Penjelasan

          The argument reversed
+           Plus
          The argument
Kritixi Lithos
sumber
1
ninja. Saya perlu pindah ke keyboard APL ... xD
Uriel
@Uriel Saya selalu di keyboard APL saya: D
Kritixi Lithos
Suka kesederhanaan. Outputnya ⌽+⊢tanpa input
Noah Cristino
@NoahCristino Input kosong ditentukan dengan , vektor kosong. Tanpa argumen, ia mencetak kereta dengan sendirinya
Kritixi Lithos
4

R , 17 16 byte

-1 byte berkat djhurio

rev(l<-scan())+l

Baca dari stdin; mengembalikan vektor; numeric(0)adalah vektor numerik panjang nol untuk daftar kosong.

Cobalah online!

Giuseppe
sumber
Untuk sebuah "array" kosong, ia kembalinumeric(0)
Noah Cristino
1
@NoahCristino vektor kosong diwakili numeric(0)dalam R.
Leaky Nun
Tidak apa-apa. @LeakyNun
Noah Cristino
1
rev(l<-scan())+l, 16 byte?
djhurio
Sebagai catatan, alternatif fungsional R + pryr hanya satu byte lagi:pryr::f(rev(x)+x)
JayCe
4

Clojure, 20 17 byte

3 byte disimpan berkat @MattPutnam

#(map +(rseq %)%)

Tampaknya cukup kompetitif dengan bahasa non-golf.

Lihat online

cliffroot
sumber
Gunakan rseqsebagai ganti reverse.
MattPutnam
3

Pyth, 3 byte

+V_

Coba di sini.

Erik the Outgolfer
sumber
Yay lulus semua tes saya!
Noah Cristino
Setara:sV_
Tn. Xcoder
@ Mr.Xcoder nevermind
Erik the Outgolfer
3

PowerShell , 26 byte

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

Cobalah online!

Mengambil input sebagai argumen baris perintah.

Joey
sumber
Bisakah Anda menambahkan TIO? dan tautan dengan nama seperti ini: codegolf.stackexchange.com/a/135427/61877
Noah Cristino
@NoahCristino: Suka ini? Belum menggunakan hal itu sejauh ini, jadi tidak tahu apa yang mungkin saya lakukan salah. Ngomong-ngomong, jika Anda mengharapkan orang menggunakan layanan tertentu dalam jawaban mereka, maka sebutkan dalam deskripsi tugas.
Joey
Tidak apa-apa. Tidak diperlukan, itu hanya membuat jawaban lebih berkualitas tinggi, dan lebih mudah untuk diuji untuk pemirsa di masa depan.
Noah Cristino
3

C, 49 byte

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}
orlp
sumber
Bukankah a,n,bseharusnya begitu a,b,n?
Erik the Outgolfer,
@EriktheOutgolfer Tidak, bbukan parameter untuk fungsi, hanya definisi tambahan yang dimasukkan ke sana untuk alasan bermain golf. aharus menjadi pointer ke integer, dan nharus berapa banyak integer yang ada dalam array.
orlp
Bisakah Anda menambahkan tautan TIO?
Noah Cristino
3

PowerShell , 40 32 byte

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

Cobalah online!

Mengambil input sebagai argumen baris perintah individual, yang diizinkan sebagai salah satu format daftar asli untuk PowerShell. Kemudian loop melalui masing-masing elemen (yaitu, cara yang lebih pendek dari pengulangan melalui indeks), menambahkan elemen yang menghitung dari belakang ( -1diindeks) ke elemen saat ini ( 0diindeks, maka penurunan -1). Mereka dibiarkan di jalur pipa dan hasilnya implisit.

Disimpan 8 byte berkat @briantist

AdmBorkBork
sumber
itu tidak menampilkan array.
Noah Cristino
1
@NoahCristino PowerShell input / output, secara umum, aneh. Hal ini keluaran sebagai array, hanya saja tidak ada yang menangkap kata array, dan jadi ketika implisit Write-Outputterjadi, menempatkan sesuatu pada stdout satu item per baris. Misalnya, Anda dapat melihat di sini bahwa, ketika ditangkap, objek tersebut memang merupakan arraytipe.
AdmBorkBork
Cukup bagus :) minimal sudah mencoba
Noah Cristino
Aku di mobile dan tidak dapat menguji begitu mudah, tapi bukan 1 byte pendek untuk menghapus paramdan kemudian mengganti 1..$ndengan 1..($n=$args)?
briantist
@ Briantist Tidak cukup, tetapi Anda memberi saya cara berpikir yang berbeda tentang hal itu, menghemat banyak byte. Terima kasih!
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 dan diperbaiki bug berkat @Nevay .
-3 byte terima kasih kepada @ OliverGrégoire .

(Itu adalah pelabuhan (dan golfed oleh 4 8 byte) dari @jkelm 's C # jawaban , tapi sekarang itu solusi yang lebih pendek yang berbeda berkat @ OliverGrégoire .)

Penjelasan:

Coba di sini.

Metode memodifikasi input-array untuk menyimpan byte, jadi tidak perlu untuk tipe-kembali.

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
Kevin Cruijssen
sumber
1
Anda dapat menyimpan 1 byte dengan menggunakan a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay
1
Selain itu kode gagal untuk array dengan panjang ganjil 1,2,3( 4,2,4bukan ganti 4,4,4), loop harus berjalan selama 2*i<l, tidak i<l/2.
Nevay
@Tidak, Terima kasih. Saya tahu itu mungkin untuk bermain golf l-i-1, hanya tidak bisa memunculkannya ..
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 Terima kasih. Dan Anda ldan rmasuk akal untuk implementasi Anda, jadi saya telah menggunakan itu juga (dan menambahkan penjelasan).
Kevin Cruijssen
2

Ohm , 3 byte

DR+

Cobalah online!

benar-benar manusiawi
sumber
Ini menghasilkan mengapung, tapi saya tidak pernah mengatakan itu tidak bisa, jadi tidak apa-apa, dan untuk []itu tidak menghasilkan apa-apa tapi itu hanya bahasa.
Noah Cristino
2

Sebenarnya , 4 byte

;R♀+

Cobalah online!

Erik the Outgolfer
sumber
Sempurna, pekerjaan bagus.
Noah Cristino
Erik, menyelesaikan masalah saya dalam 7 bahasa seperti xD
Noah Cristino
@NoahCristino Ya saya mencoba untuk menyimpannya di bawah 15 ...;)
Erik the Outgolfer
Saya harus mulai menambahkan -1 untuk setiap kiriman xD
Noah Cristino
2

perbaikan apa pun , 3 byte

"U+

Versi di TryItOnline! adalah versi usang dari perbaikan apa pun, yang berisi beberapa kesalahan fatal seperti tidak dapat menambahkan daftar karena kesalahan ketik dalam kode sumber. Gunakan kode pada GitHub sebagai gantinya.

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

Neim , 2 byte

Ini adalah fungsi yang mengambil input di atas tumpukan dan output di atas tumpukan.

𝕓𝔻

Cobalah online!

Okx
sumber
Apakah diizinkan untuk memodifikasi tumpukan input melalui kode Neim yang sebenarnya, bukan metode input normal?
LiefdeWen
@ LiefdeWen Ya, itu diizinkan secara default untuk meta post I / O.
Okx
2

Röda , 22 byte

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

Cobalah online!

Ini adalah fungsi anonim yang mengambil larik dan mengembalikan aliran nilai, yang dihasilkan oleh tautan TIO di atas baris baru.

Penjelasan

reverse(_)          The array reversed
<>                  interleaved with
_1                  the array itself
                    Push each element to the stream
[_+_]               Pull two values and push their sum
Kritixi Lithos
sumber
Lulus tes saya! Jawaban yang bagus
Noah Cristino
2

JavaScript (ES6), 34 33 byte

Menyimpan satu byte berkat @ETHproductions.

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

Rick Hitchcock
sumber
Saya suka bagaimana Anda dimasukkan ke dalam test case, +2
Noah Cristino
Saya pikir Anda dapat menyimpan byte dengan mengubah -i-1ke +~i.
ETHproductions
@ ETHproductions, ya, terima kasih!
Rick Hitchcock
2

MATL , 3 byte

tP+

Cobalah online!

Sangat mudah. tduplikat input. Pmembalik (membalikkan) itu, dan +menambahkan elemen array dua bijaksana.

DJMcMayhem
sumber
2

PHP, 59 byte

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

mengambil input dari argumen baris perintah; output kosong untuk input kosong

Menghasilkan peringatan di PHP> 7.0. Versi ini tidak (60 byte):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);
Titus
sumber
Jawaban bagus! :)
Noah Cristino