Masalah ini "terinspirasi" dari pertanyaan yang awalnya ditanyakan pada Quora (bukan untuk kode golf). Saya hanya ingin menjadikannya sebuah tantangan untuk kalian (dan pengiriman masalah pertama saya di sini).
Diberikan array elemen integer v
dan integer d
(kami menganggap bahwa d lebih rendah atau sama dengan panjang array), pertimbangkan semua urutan d
elemen berurutan dalam array. Untuk setiap urutan, hitung perbedaan antara nilai maksimum dan minimum elemen dalam urutan itu dan beri nama deviasinya.
Tugas Anda adalah menulis program atau fungsi yang menghitung nilai maksimum di antara semua penyimpangan dari semua urutan yang dipertimbangkan di atas, dan mengembalikan atau menampilkan nilai itu.
Contoh Worked-through:
v: (6,9,4,7,4,1)
d: 3
The sequences of length 3 are:
6,9,4 with deviation 5
9,4,7 with deviation 5
4,7,4 with deviation 3
7,4,1 with deviation 6
Thus the maximal deviation is 6, so the output is 6.
Ini adalah kode golf, jadi jawaban tersingkat dalam byte menang.
with
pada seluruh fungsi lambdaUncaught SyntaxError: Unexpected token with
,. Bisakah Anda memposting cuplikan yang berfungsi?with(Math)
, atau menggunakanf=eval("with(Math)(v,d)=>max(...a)))")
.Python, 60 byte
Menyimpan 5 byte berkat Neil
Lambda rekursif pertama saya!
Pemakaian:
sumber
v and
; rentang tidak naik jika Anda menghapus elemen.Perl, 48 byte
Termasuk +5 untuk
-0pi
Berikan lebar setelah
-i
opsi, berikan elemen sebagai garis terpisah pada STDIN:Hanya kode:
(gunakan literal
\n
untuk skor yang diklaim)sumber
$&
akan berisi seluruh kecocokan yang akan dievaluasi sebagai angka pertama dalam konteks aritmatika.$1
akan berisi nomor terakhir. Saya kemudian secara paksa gagal dengan regex\A
. Jadi itu akan mencoba semua posisi awal dan panjang hingga lebar. Saya menggunakan nilai absolut dari perbedaan sebagai indeks array dan melihat seberapa besar array tumbuh. Perl tidak memiliki builtinmax
jadi saya harus berimprovisasi-0pi3 -e
ke dalam-0pi3e
? Hanya asumsi tentang kemungkinan pengurangan, saya tidak menggunakan perl (jadi pertanyaan saya).-i
makan semuanya setelah nilainya, termasuk apa pune
-e
harus sebelum kode? Gelandangan.R,
636256 byteBillywob telah memberikan jawaban R yang bagus hanya dengan menggunakan fungsi-fungsi dasar . Namun, saya ingin melihat apakah pendekatan alternatif itu mungkin, mungkin menggunakan beberapa paket R yang luas. Ada fungsi yang bagus
rollapply
dalamzoo
paket yang dirancang untuk menerapkan fungsi ke jendela bergulir array, sehingga sesuai dengan tujuan kita dengan baik. Kami menggunakanrollapply
untuk menemukanmax
setiap jendela, dan kami menggunakannya lagi untuk menemukanmin
masing-masing jendela. Lalu kami mengambil perbedaan antara maks dan menit, yang memberi kami deviasi untuk setiap jendela, dan kemudian mengembalikannyamax
.sumber
gtools::rolling
, tapi itu satu byte lagi dan saya tidak terbiasa dengannya. Saya selalu dalam dua pikiran tentang menggunakan paket non-basis: di satu sisi, rasanya seperti curang ketika ada solusi sederhana; di sisi lain, paket (dan komunitas) adalah salah satu kekuatan R sebagai bahasa, saya pikir.R,
8077 byte byteSunting: Disimpan 3 byte berkat @rturnbull
sumber
1:(length(s)-d+1)
dengand:sum(1|s)-d+1
.PowerShell v2 +, 68 byte
Solusi berulang. Loop melalui
$v
, tapi sebenarnya kita hanya menggunakannya sebagai penghitung daripada benar-benar melalui nilai-nilai. Setiap iterasi, kami mengiris$v
oleh$i..($i+++$d-1)
, di mana$i
defaultnya0
. Kami|sort
elemen-elemen itu, dan menyimpan hasilnya$x
. Lalu kami mengambil yang terbesar[-1]
dan mengurangi yang terkecil[0]
. Kami kemudian|sort
hasil itu dan mengambil yang terbesar[-1]
dari itu. Angka itu ditinggalkan di jalur pipa dan hasilnya tersirat.Contohnya
sumber
05AB1E ,
1210 byteMenggunakan pengodean CP-1252 .
Cobalah online!
Penjelasan
sumber
Java 8,
140128Memotong banyak, sebagian berkat VTCAKAVSMoACE.
Tidak disatukan
sumber
int l(int[]a,int d){int x=0,i=0,f,j,k;for(;i<=a.length-d;i++)for(j=i;j<i+d;j++)for(k=j;k<i+d;)x=(f=a[j]-a[k++])<0?-f:f>x?f:x;return x;}
Mathematica,
4137 bytesumber
{-1,1}
untuk menghindariAbs
?Max[BlockMap[MinMax,#,#2,1].{-1,1}]&
.Ruby, 45 byte
Saya merasa ini bisa menjadi jauh lebih baik.
sumber
MATLAB dengan Kotak Alat Statistik dan Pemrosesan Gambar, 33 byte
Ini mendefinisikan fungsi anonim. Contoh penggunaan:
Anda juga dapat mencobanya di Octave at Ideone (tetapi Octave, tidak seperti Matlab, membutuhkan pemuatan paket gambar secara eksplisit).
Penjelasan
sumber
Scala, 48 byte
Tidak Terkumpul:
Penjelasan:
sumber
MATL , 10 byte
Cobalah online!
Penjelasan
Pertimbangkan input [6,9,4,7,4,1], 3 sebagai contoh.
sumber
Sebenarnya , 13 byte
Cobalah online!
-6 byte dari pengamatan dalam jawaban Haskell nimi , bahwa irisan lebih pendek daripada
d
tidak mempengaruhi deviasi maksimum.Penjelasan:
sumber
PHP,
8987 byteTidak terlalu pintar atau cantik tetapi berhasil. Gunakan seperti:
untuk
v
=6,9,4,7,4,1
,d
=3
Sunting: 2 byte disimpan berkat Jörg Hülsermann
sumber
echo+$o;
bukannyaecho$o?:0;
CJam , 17 byte
(Juga
q~ew:$z)\(\;.-:e>
)Cobalah online!
Penjelasan
sumber
Java 7.159 byte
Java = mahal (saya tahu ini bisa bermain golf lebih banyak)
Tidak disatukan
sumber
Haskell, 56 byte
Contoh penggunaan:
3 # [6,9,4,7,4,1]
->6
.Mengingat rentang kurang dari
d
tidak mengubah maksimum keseluruhan, sehingga kami dapat menjalankantake d
turun ke akhir daftar (yaitu juga termasuk rentang dengan yang terakhird-1
,d-2
, ...0
elemen). Rekursi berhenti dengan daftar kosong tempat kami mengatur penyimpangan0
.sumber
Java, 126 byte
Saya terinspirasi oleh jawaban dpa97 dan menemukan ini:
Kode diperluas, golf, dan contoh
sumber
Racket 121 byte
Tidak Terkumpul:
Pengujian:
Keluaran:
sumber
q, 25 byte
mmax
danmmin
jendela geser maksimum dan minimum masing-masingContoh
sumber
C #, 131 byte
di sini adalah solusi linq verbose
sumber
C #, 163 byte
Golf:
Tidak Terkumpul:
Uji:
Keluaran:
sumber
Pyth, 11 byte
Penjelasan
sumber
Jelly , 8 byte
Cobalah online!
Menggunakan algoritme yang sama dengan Dyalog APL, tapi saya pikir ini sendiri sebelum melihatnya.
Penjelasan:
Catatan:
x
,y
yang tersisa, argumen kanan masing-masing.sumber
Perl 6 , 44 byte
$^a
dan$^b
adalah dua argumen untuk fungsi, yang dipanggilv
dand
masing - masing dalam pernyataan masalah. Therotor
Metode mengembalikan urutan subsequences dariv
ukurand
.sumber
Clojure,
7367 byteEdit: Menggunakan
#(...)
bukan(fn[...])
danfor
bukannyamap
.sumber
Python 3, 80 byte
sumber
(max(v[i:i+d])-min(v[i:i+d])for i in range(-~len(v)-d)
sebagai gantinyamap(lambda g:max(g)-min(g),[v[i:i+d]for i in range(-~len(v)-d)])