Tugas
Mengingat daftar bilangan bulat L dan lain bilangan bulat s , tujuannya adalah untuk menghitung jumlah kolom-bijaksana semua s -Panjang (berpotensi tumpang tindih) irisan L , sedangkan yang berkaitan posisi mereka relatif terhadap L (lihat di bawah).
Definisi
The s -Panjang (tumpang tindih) irisan dari daftar L adalah semua subsequences bersebelahan (tanpa pembungkus) dari L yang panjang s .
Dalam rangka untuk berhubungan posisi dari irisan s relatif terhadap L , Anda bisa membayangkan membangun sebuah "tangga", di mana setiap irisan s i telah offset i posisi dari awal.
Spesifikasi
- s adalah bilangan bulat lebih tinggi dari 1 dan ketat lebih kecil dari panjang L .
- L akan selalu mengandung setidaknya 3 elemen.
- Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun , sambil memperhatikan bahwa celah ini dilarang secara default. Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
Contoh dan Kasus Uji
Berikut ini contoh yang berhasil:
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
-------------------------------- (+) | column-wise summation
[1, 4, 9, 12, 15, 18, 21, 16, 9]
Dan beberapa kasus uji lagi:
[1, 3, 12, 100, 23], 4 -> [1, 6, 24, 200, 23]
[3, -6, -9, 19, 2, 0], 2 -> [3, -12, -18, 38, 4, 0]
[5, 6, 7, 8, 2, -4, 7], 3 -> [5, 12, 21, 24, 6, -8, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3 -> [1, 4, 9, 12, 15, 18, 21, 16, 9]
[1, 1, 1, 1, 1, 1, 1], 6 -> [1, 2, 2, 2, 2, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
code-golf
array-manipulation
subsequence
Tuan Xcoder
sumber
sumber
s
lebih besar dariL/2
. Mungkin menambahkan beberapa test case lagi dimana itu merupakan kasus[1, 1, 1, 1, 1, 1, 1], 6 ->
[1, 2, 2, 2, 2, 2, 1] `atau[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
?Jawaban:
J ,
11, 98 byte-1 byte berkat mil!
Bagaimana itu bekerja?
Argumen kiri adalah s, yang benar - L
]\
- Membagi L menjadi sub daftar dengan panjang s/.
- mengekstrak diagonal miring (anti-diagonal)+/
- menambahkannya[:
- membuat garpu dari kata kerja di atasInilah contoh sesi J untuk test case pertama:
Cobalah online!
sumber
/.
, berlawanan dengan diagonal utama yang bergerak dari atas ke kiri ke bawah ke kanan.,/\
dengan]\
Haskell ,
5956 byteCobalah online!
Menentukan fungsi
(#)
yang mengambil daftars
dan dan nomorn
sebagai argumen.Ini berdasarkan pengamatan bahwa untuk
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
dann = 3
sama dengan
Untuk membuat daftar ini pada awalnya meningkat, lalu daftar konstan dan akhirnya menurun, kita bisa mulai dengan
yang menghasilkan
[1, 2, 3, 4, 5, 4, 3, 2, 1]
. Menambahkann
sebagai kendala tambahan ke dalamminimum
ekspresi menghasilkan[1, 2, 3, 3, 3, 3, 3, 2, 1]
jawaban daftar yang benar untukn = 3
, meskipun untukn = 6
(atau secara umum adan > lengths s/2
) kendala tambahanlength s + 1 - n
diperlukan:atau lebih pendek:
Untuk perkalian berpasangan berpasangan
[1..length s]
dengan zips
, dan karenazip
memotong daftar yang lebih panjang dengan panjang yang lebih pendek daftar tak terbatas[1..]
dapat digunakan:sumber
JavaScript (ES6),
656258 byteDisimpan 4 byte berkat @Shaggy
Mengambil input dalam sintaks currying
(a)(n)
.Uji kasus
Tampilkan cuplikan kode
sumber
a=>n=>a.map((v,i)=>v*Math.min(++i,n,a.length+1-(n>i?n:i)))
berfungsi untuk 58 byte?Java 8, 83 byte
Kasing uji pertama (dan dua yang terakhir saya tambahkan) mengacaukan saya beberapa kali, tetapi akhirnya berfungsi sekarang ..: D
Mengubah array input alih-alih mengembalikan yang baru.
Penjelasan:
Cobalah online.
sumber
05AB1E , 12 byte
Cobalah online!
sumber
MATL , 8 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Pertimbangkan input
[1, 3, 12, 100, 23]
dan4
.sumber
APL (Dyalog Unicode) ,
1914 byte SBCS-5 Terima kasih kepada ngn.
Anix tacit infix function mengambil s sebagai argumen kiri dan L sebagai argumen kanan. Mengasumsikan
⎕IO
( I ndex O rigin)0
sebagai default pada banyak sistem.Cobalah online!
Penjelasan dengan contoh kasus
[1,3,12,100,23]
(
...)
terapkan fungsi diam-diam anonim berikut:,/
jendela yang tumpang tindih dengan ukuran itu;[[1,3,12],[3,12,100],[12,100,23]]
(
... secara)\
kumulatif menerapkan fungsi diam-diam berikut ini:⊢
argumen yang paling tepat0,
dengan nol di sebelah kiriReduksi kumulatif berarti kita memasukkan fungsi ke setiap "ruang" di antara istilah-istilah yang berurutan, bekerja dengan cara kami dari kanan ke kiri. Untuk setiap "spasi", fungsi akan membuang argumen kiri tetapi menambahkan nol tambahan. Secara efektif, ini menambahkan nol untuk setiap istilah karena ada "spasi" di sebelah kirinya, sehingga suku pertama mendapat nol spasi, yang kedua mendapat satu, dan yang ketiga mendapat dua:
[[1,3,12],[0,3,12,100],[0,0,12,100,23]]
↑
naik pangkat dengan menggabungkan daftar ke dalam matriks tunggal, padding dengan nol;┌ ┐
│1 3 12 0 0│
│0 3 12 100 0│
│0 0 12 100 23│
└ ┘
∘
lalu+⌿
jumlahkan secara vertikal;[1,6,36,200,23]
sumber
⊢,⍨¨0⍴⍨¨⍳∘≢
->{0,⍵}\
+⌿∘↑((0,⊢)\,/)
lebih elegan.2{(⊃⌽⍺),⊃⍵}/⊢
->2{⊃¨(⌽⍺)⍵}/⊢
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Japt , 13 byte
Butuh waktu terlalu lama untuk ini bekerja ketika
s
>L/2
!Cobalah
Penjelasan
sumber
s > L/2
! ” Aku memiliki persis sama Kasus uji lainnya mudah, tetapi yang pertama (dan dua yang saya tambahkan di akhir) sangat mengganggu! .. +1 dari saya!Bahasa Wolfram (Mathematica) , 42 byte
Cobalah online!
sumber
Julia , 41 byte
Cobalah online!
\
operator.a[L=end]
adalah alternatif yang lebih pendekL=length(a)
.sumber
Japt ,
1312 byte-1 byte terima kasih kepada @ETHproductions
Cobalah online!
sumber
R ,
5251 byteCobalah online!
Ini setara dengan jawaban Laikoni .
seq(l)
menghasilkan indeks1...length(l)
sejaklength(l)>1
(kalau tidak akan menghasilkan1...l[1]
). Saya menyimpannya sebagaix
, menyimpannya sebagaiy
, dan mengambil elemen pertama dariy
(length(l)
) untuk mem-porting jawaban Laikoni dengan rapi dan menyimpan satu byte!Jawaban asli, 52 byte
Cobalah online!
Outputnya adalah
l
elemen dikalikan dengan minimums
, indeks berbasis elemen 1x
,length(l)-x+1
danlength(L)-s+1
.Ini juga setara dengan jawaban Laikoni, menggunakan
L-x
bukanrev(x)
karena lebih pendek.sumber
APL + WIN, 25 byte
Anjuran untuk input layar L diikuti oleh s
Penjelasan:
sumber
K (oK) , 30 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Jangan berpikir saya bisa bersaing dengan J yang satu ini. Buat daftar nol untuk ditambahkan dan ditambahkan ke daftar jendela geser, kemudian jumlahkan:
Rinciannya adalah sebagai berikut ... meskipun ini masih terasa canggung.
sumber
Sekam , 4 byte
Cobalah online!
Menggunakan ide dari jawaban J Galen Ivanov .
Penjelasan
sumber
C (gcc) , 100 byte
Cobalah online!
sumber
Python 2 ,
6866 byte-2 byte terima kasih kepada Laikoni
Cobalah online!
sumber
max(i,n-1)
bukannya[i,n-1][n>i]
.Perl 5 , 63 byte
Cobalah online!
sumber
C (gcc) ,
838179 bytePada dasarnya ada tiga "fase" untuk manipulasi daftar: ramp-up, sustain, dan cool-off. Saat kita masuk dalam daftar, kita akan meningkatkan faktor kita sampai kita mencapai beberapa maksimum. Jika irisan penuh dapat masuk ke dalam daftar, maksimum ini akan sama dengan panjang irisan. Jika tidak, itu akan sama dengan jumlah irisan yang sesuai. Di ujung yang lain, kita akan mengurangi faktor lagi, menjadi 1 pada elemen terakhir.
Panjang fase ramp-up dan cool-down yang menunjukkan dataran tinggi ini adalah satu kurang dari faktor maksimum.
Loop yang tidak diserami sebelum menggabungkannya diharapkan membuatnya lebih jelas (R = panjang fase ramp-up):
Tiga loop terlalu banyak, jadi menentukan faktor berdasarkan r memberi kita satu loop (menggunakan s untuk R untuk menyimpan beberapa byte):
Cobalah online!
sumber
Perl,
4544 byteTermasuk +4 untuk
-ai
Juga perhatikan bahwa kode ini memberikan 2 peringatan perl saat startup. Anda dapat menekan ini dengan biaya satu pukulan dengan menambahkanX
opsiBerikan panjang mask setelah
-i
opsi dan array pada satu baris di STDIN:Hanya kode:
sumber
Ruby , 62 byte
Cobalah online!
Pada dasarnya port jawaban javascript Arnauld , kecuali bahwa kebutuhan
with_index
jauh lebih menyakitkan.Dalam waktu yang dibutuhkan bagi saya untuk memutuskan untuk benar-benar mengirimkan ini, saya bermain golf dari versi 70-byte ini, yang lebih dekat dengan algoritma Dennis .
sumber
Clojure, 72 byte
sumber
Pyt , 106 byte
Mengambil L pada baris pertama sebagai array, dan mengambil s pada baris kedua
Penjelasan:
Cobalah online!
sumber
Python + numpy, 64 byte
Sebut ini dengan l sebagai daftar, dan N sebagai panjangnya.
sumber