Terinspirasi oleh pertanyaan di Stack Overflow .
Diberikan array integer yang tidak kosong x
dan integer positif n
, hitung jumlah setiap blok geser yang panjang di n
sepanjang array x
, secara melingkar mengisi nilai-nilai yang hilang di sebelah kiri dengan nilai-nilai dari kanan sebagai berikut:
- blok pertama berisi entri pertama
x
, didahului olehn-1
entri yang digeser secara sirkuler; - blok kedua memiliki entri pertama dan kedua
x
, didahului olehn-2
entri yang digeser secara sirkuler; dan seterusnya.
Array output y
memiliki ukuran yang sama dengan x
. Dimungkinkan untuk n
melebihi panjang x
, dan kemudian nilai x
sirkuler digunakan kembali beberapa kali .
Contohnya
Contoh 1 (nilai digunakan kembali hanya sekali)
x = [2, 4, -3, 0, -4]
n = 3
berikan sebagai output
y = [-2, 2, 3, 1, -7]
dimana
-2
adalah jumlah dari blok[0, -4, 2]
(dua nilai pertama berasal dari pergeseran melingkar)2
adalah penjumlahan[-4, 2, 4]
(nilai pertama berasal dari penggeseran lingkaran)3
adalah jumlah dari[2, 4, -3]
(tidak diperlukan lagi penggeseran lingkaran)1
adalah jumlah dari[4, -3, 0]
-7
adalah jumlah dari[-3, 0, -4]
.
Contoh 2 (nilai digunakan kembali beberapa kali)
x = [1, 2]
n = 5
memberikan
y = [7, 8]
dimana
7
adalah jumlah blok[1, 2, 1, 2, 1]
(empat nilai pertama telah digunakan kembali secara sirkuler)8
adalah jumlah blok[2, 1, 2, 1, 2]
(tiga nilai pertama telah digunakan kembali secara sirkuler)
Aturan tambahan
- Algoritme harus bekerja untuk array dengan ukuran arbitrer dan untuk nilai integer arbitrer. Dapat diterima jika program dibatasi oleh tipe data atau batasan memori; tetapi nilai integer positif maupun negatif harus ditangani.
- Input / output dapat diambil / diproduksi dengan cara apa pun yang wajar .
- Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang.
- Kode terpendek dalam byte menang.
Uji kasus
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]
code-golf
math
arithmetic
array-manipulation
integer
Luis Mendo
sumber
sumber
Jawaban:
Jelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
MATL,
111097 byte3 Bytes disimpan berkat @Luis!
Input pertama adalah ukuran jendela dan input kedua adalah array
Cobalah di MATL Online
Penjelasan
sumber
Mathematica, 29 byte
Atau sama panjangnya:
sumber
CJam (16 byte)
Test suite online . Ini adalah blok anonim (fungsi) yang mengambil array dan panjangnya di stack dan meninggalkan array di stack.
Pembedahan
sumber
Haskell, 57 byte
Cobalah online!
Hanya beberapa pengulangan indeks dan mengakses daftar input di indeks modulo panjang daftar.
sumber
Haskell ,
696564 byteCobalah online! Contoh penggunaan:
[2, 4, -3, 0, -4] # 3
.Menggunakan
n
berhasil daripada entri sebelumnya bisa menjadi5046 byte (menyingkirkan yang terbalik di awal dan akhir):Cobalah online!
sumber
Japt , 12 byte
Cobalah online!
TIO tidak mendukung
Ë
, sehingga tautan TIO tidak akan berfungsi. Sebagai gantinya, coba di sini .sumber
Pyth ,
1816 byteDisimpan 2 byte berkat @FryAmTheEggman !
Coba di sini atau Verifikasi semua test case.
Memperbaiki semua kekurangan dengan biaya -6 byte ! Terima kasih banyak untuk Luis karena membuat saya mengerti tugas dalam obrolan.
Penjelasan (akan diperbarui)
sumber
Java 8, 102 byte
Lambda (kari) dari
int[]
ke lambda dariInteger
keint[]
. Tetapkan untukFunction<int[], Function<Integer, int[]>>
.Cobalah secara Online
Lambda yang tidak tersentuh
(j % l + l) % l
menghitung sisa yang tidak negatif untuk apa punj
. Diambil dari sini .sumber
C, 91 byte
Cobalah online!
sumber
Oktaf, 53 byte
Cobalah online!
imfilter
fungsi dengan pilihancircular
menghitung konvolusi melingkar di tengah jendela sehingga hasilnya harus digeser.sumber
05AB1E , 10 byte
Cobalah online!
Penjelasan
sumber
Perl 6 ,
4239 byteCobalah online!
Entri Perl 6 pertama saya. Mungkin bisa ditingkatkan.
sumber
->\a,\b{[«+»] map {a.rotate(-$_)},^b}
Perhatikan bahwa itu tidak dalam kasus ini tetapi jika jika ada contoh lain$b
dalam kode.Kotlin ,
141140138 byteGo pertama saja
pengajuan
Yg diperindahkan
TryItOnline
Suntingan
sumber
Röda , 52 byte
Cobalah online!
Penjelasan:
sumber
JavaScript ES6
8078 byte2 byte disimpan berkat Neil
Pemakaian:
sumber
,N
penampilan yang tidak perlu dengan saya ...Perl 5 , 66 + 1 (-a) = 67 byte
Cobalah online!
sumber
Python 2 ,
6961 byte- 8 byte Terima kasih banyak @muru
Cobalah online!
Penjelasan:
Pertama kita perlu memastikan ada cukup angka di sebelah kiri daftar asli, ini dicapai oleh
x*n+x
bagian.Misalnya, untuk
[2,4,-3,0,4],5
:Maka kita akan membalik daftar:
Selanjutnya kita mendapatkan blok yang sesuai untuk setiap elemen
[len(x)+~i:][:n]
. Irisan akan terbalik yaitu 2 akan mendapatkan blok:[2,-4,0,-3,4]
yang merupakan kebalikan dari yang diharapkan[4,-3,0,-4,2]
, tetapi bagaimanapun juga kita membutuhkan jumlah. Jadi, ini berhasil. :)sumber
x[-n+1:]+x*n
harus memberi Anda daftar dengan bantalan yang cukup di kedua sisi, tanpa harus membalikkan (lambda x,n:[sum((x[-n+1:]+x*n)[i:i+n])for i in range(len(x))]
)R ,
1019389 byteCobalah online!
sumber
K (oK) , 18 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Akan memposting solusi 31 byte maka saya ingat bahwa oK memiliki built-in untuk sliding windows ...
Bonus:
Solusi 31 byte yang juga berfungsi di K4 :
sumber