Kami akan melipat daftar bilangan bulat. Prosedur untuk melakukannya adalah sebagai berikut, Jika daftar tersebut memiliki panjang genap, buatlah daftar setengah dari panjangnya di mana item ke-n dari daftar baru adalah jumlah dari item ke-n dari daftar lama dan urutan ke-n item terakhir dari daftar lama. Misalnya kalau kita punya daftarnya
[1 2 3 4 5 6 7 8]
Kami akan melipatnya seperti itu
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Jika daftar itu panjangnya aneh , untuk melipatnya pertama-tama kita menghapus item tengah, lipat itu seolah-olah genap dan tambahkan item tengah ke hasilnya.
Misalnya kalau kita punya daftarnya
[1 2 3 4 5 6 7]
Kami akan melipatnya seperti itu
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Tugas
Tulis program atau fungsi yang mengambil daftar bilangan bulat sebagai input dan output yang dilipat daftar.
Ini adalah pertanyaan kode-golf sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte yang lebih baik.
Implementasi sampel
Berikut ini adalah implementasi di Haskell yang mendefinisikan fungsi f
yang melakukan flip.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
sumber
Jawaban:
Python , 46 byte
Cobalah online!
Sama panjang:
Solusi yang jauh lebih pendek bekerja untuk daftar panjang genap (30 byte)
Cobalah online!
Saya masih berusaha menemukan cara singkat untuk memperbaikinya dengan panjang yang aneh.
sumber
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
juga sama panjangnya ...05AB1E , 5 byte
Kode
Menggunakan 05AB1E penyandian . Cobalah online!
Penjelasan
sumber
Emojicode , 203 byte
Ini adalah jawaban Emojicode yang paling menyakitkan bagi saya. Panjang yang tidak perlu: /
Cobalah online!
sumber
Japt ,
211816 byteUji secara online!
Benar-benar mengerikan.Sedikit kurang enak untuk @Oliver . BRB setelah saya menerapkan lebih banyak built-in dan memperbaiki beberapa bug ...sumber
Gaia , 7 byte
Penjelasan
sumber
Mathematica, 88 byte
sumber
Mathematica 57 Bytes
Menyisipkan nol di titik tengah, menambahkan daftar ke kebalikannya dan mengambil panjang yang sesuai.
sumber
Japt , 12 byte
Cobalah online! dengan
-Q
bendera untuk melihat array yang diformat.Solusi alternatif, 14 byte
Cobalah online!
sumber
Jelly , 7 byte
Cobalah online!
-2 Berkat produksi ETH ... dan saya sadari sebelumnya.
sumber
JavaScript (Node.js) , 53 byte
Cobalah online!
Saran lain:
JavaScript (Node.js) , 43 byte
Cobalah online!
sumber
R ,
81706857 byteCobalah online!
fungsi anonim; mengembalikan hasilnya.
sumber
Python 3 , 101 byte
Cobalah online!
sumber
Python 3 , 70 byte
Cobalah online!
sumber
JavaScript,
7571 byteCobalah online
Disimpan 2 byte berkat produk ETH
sumber
JavaScript (ES6), 41 byte
Tampilkan cuplikan kode
sumber
MATL , 9 byte
Cobalah online!
Bagaimana itu bekerja
Diberikan array
[a b c ... x y z]
, biarkan[a z]
disebut subarray "kerak" dan[b c ... y z]
"inti".Kode terdiri dari satu loop yang menghilangkan kerak, menghitung jumlahnya, dan memindahkan inti ke atas tumpukan, siap untuk iterasi berikutnya. Kondisi loop adalah jumlah elemen dalam subarray inti
sumber
WendyScript , 72 byte
Cobalah online!
sumber
C # (.NET Core) ,
118111 byteJumlah byte juga termasuk
Cobalah online!
Sebagai input, harap gunakan angka yang dipisahkan dengan koma (
,
) atau spasi. Penjelasan:sumber
Perl,
4238 karaktersub f {@ a = map {$ + pop} splice @ , 0, @ / 2; @ a, @ }Coba misalnya seperti:
sumber
Pyth,
181713 bytePendekatan awal saya adalah
-1 byte terima kasih kepada Tn. Xcoder
-4 byte terima kasih kepada FryAmTheEggman
sumber
c2<list>
untuk membagi daftar menjadi dua. Perintah lain yang mungkin berguna adalah.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 byteSebagai lambda yang tidak disebutkan namanya, menerima wadah seperti
vector
ataulist
, kembali melalui memodifikasi input:Menggunakan operator 'masuk ke' yang terkenal
<--
dan triple plus+++
Tidak disatukan dan contoh:
sumber
J , 22 byte
Cobalah online!
sumber
APL (Dyalog Unicode) , 21 byte SBCS
-3 byte terima kasih kepada @ Adรกm.
Cobalah online!
Penjelasan:
sumber
+โฟ(โ2รทโจโข)(โโโฎโฝโคโ)โข
(โ2รทโจโข)(โ{+โฟโโบโต}โโฝโ)โข
`Gangguan Umum, 106 byte
Cobalah online!
sumber
JavaScript (Node.js) , 62 byte
Cobalah online!
sumber
-i-1
dengan+~i
untuk menyimpan byte.c!=i
denganc>i
byte.Scala, 91 byte
sumber
Mathematica , 52
sumber
JavaScript (ES6),
4643 byteTampilkan cuplikan kode
Disimpan 3 byte dengan inspirasi dari Asaf .
sumber
c+c
berfungsi untuk byte ketiga.Java 8, 93 byte
Digit ganda! Ini adalah lambda yang mengambil
int[]
dan mengembalikan sebuahint[]
.Lambda yang tidak tersentuh
Cukup mudah. Ini melipat bagian kedua di tempat ke bagian pertama dari input dan mengembalikan salinan hanya bagian pertama.
Anehnya, salinan array dalam pernyataan kembali tampaknya menjadi cara termurah untuk menangani quirk elemen terakhir untuk input panjang ganjil.
sumber
PHP , 67 byte
Cobalah online!
sumber