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!


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!


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.


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())


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

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!



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.


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



6

Python 2 , 33 32 byte

-1 byte terima kasih kepada @xnor

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

Cobalah online!


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.


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

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!


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


Gunakan rseqsebagai ganti reverse.
MattPutnam


3

PowerShell , 26 byte

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

Cobalah online!

Mengambil input sebagai argumen baris perintah.


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;}

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


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

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

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

2

Neim , 2 byte

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

𝕓𝔻

Cobalah online!


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

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])


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

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);

Jawaban bagus! :)
Noah Cristino
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.