Temukan nomor n posisi terbesar dari n

29

Sekuel dari pertanyaan ini .

Tugas

Diberikan array bilangan bulat positif, temukan elemen k terbesar yang:

Ada beberapa jarak integer positif n , sehingga elemen dalam array terletak n  tempat ke kiri atau kanan dari k sama dengan n .

Array dijamin mengandung setidaknya satu elemen yang memenuhi kondisi ini.

Kode terpendek (dalam byte) menang. Anda dapat memilih format I / O mana yang Anda suka.

Contoh

Diberikan input

[4, 6, 7, 9, 3, 6, 5, 7, 2]

Nilai yang memenuhi syarat adalah:

  • Itu 4, karena ada 77 posisi yang terletak di sebelah kanannya
  • Yang pertama 6, karena ada 33 posisi yang berada di sebelah kanannya
  • Itu 3, karena ada 44 posisi terletak di sebelah kirinya
  • Itu 5, karena ada 22 posisi yang terletak di sebelah kanannya
  • Yang kedua 7, karena ada 33 posisi yang berada di sebelah kirinya.

Dari nilai-nilai ini, yang terbesar adalah 7.

Uji kasus

[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Lynn
sumber
Dua kasus lagi (walaupun sedikit berlebihan) dalam contoh: 6 pertama (sekali lagi) karena ada 5 posisi lima di sebelah kanannya; atau yang kedua 7 (lagi) karena ada 6 posisi enam yang tersisa.
Jonathan Allan
1. Di ponsel saya, judulnya tampaknya "Cari posisi angka terbesar dari". 2. Kondisi yang dinyatakan adalah bahwa ada beberapa k sedemikian sehingga (properti yang tidak bergantung pada k). Pasti salah.
Peter Taylor
@PeterTaylor "ini" di "elemen ini" mengacu pada k.
Taemyr
1
@ Taemyr, itu tidak masuk akal karena dua alasan: pertama, karena k tidak dinyatakan sebagai elemen; dan kedua karena kita diminta untuk " menemukan elemen terbesar yang memuaskan " kondisi, jadi " elemen ini " memiliki anteseden di luar kondisi.
Peter Taylor
2
Mungkin Anda bisa menghindari semua kebingungan dengan mengatakan "menemukan elemen k terbesar sehingga" dan kemudian menggunakan k bukannya elemen ini dalam definisi?
Martin Ender

Jawaban:

3

Jelly , 9 byte

Jạþ`=ḅa¹Ṁ

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

Jạþ`=ḅa¹Ṁ  Main link. Argument: A (array)

J          Indices; yield [1, ..., len(A)].
   `       Use the previous return value as left and right argument:
 ạþ        Absolute difference table; take the absolute value of the difference
           of each pair of indices, yielding a 2D array.
    =      Compare each absolute difference with the corresponding item of A.
     ḅ     Base; convert each Boolean list from base i to integer, where i is the
           corresponding item of A. The value of i is not important; we only care
           if the list contains a 1, which will result in a non-zero integer.
       ¹   Identity; yield A.
      a    Logical AND; replace non-zero values with the corresponding items of A.
        Ṁ  Take the maximum.
Dennis
sumber
1
Hmm, tidak yakin apa kebijakannya tentang ini, tetapi Anda sekarang memiliki dua pendekatan berbeda dalam jawaban terpisah, dalam bahasa program yang sama oleh pengguna yang sama. Bukankah lebih baik menempatkan potongan 9 dan 10 byte dalam jawaban yang sama, karena itu bahasa pemrograman yang sama dan Anda berdua? Saya dapat memahami beberapa jawaban dalam bahasa pemrograman yang sama oleh banyak pengguna, tetapi saya pribadi berpendapat bahwa pendekatan yang berbeda oleh pengguna yang sama dalam bahasa pemrograman yang sama akan lebih cocok sebagai suntingan. Hanya pendapat saya saja.
Kevin Cruijssen
5
Itu adalah pertanyaan meta pertama saya , dan tampaknya konsensus bahwa pendekatan yang berbeda harus diposting dalam jawaban yang berbeda. Dalam hal ini, pendekatan saya tidak memiliki apa pun kecuali maksimum pada akhirnya, jadi saya pergi untuk pos yang terpisah.
Dennis
8

05AB1E , 21 byte

vyN+Ny-})¹gL<Ãv¹yè})Z

Penjelasan

v      }               # for each num in input
 yN+                   # push index + num
    Ny-                # push index - num
        )              # wrap stack in a list
         ¹gL<Ã         # remove indices outside the range of input
              v¹yè})   # get list of elements in input at the remaining indices
                    Z  # get max

Cobalah online!

Emigna
sumber
Anda mungkin menggunakannya sepanjang waktu, tetapi saya baru saja memperhatikan "bungkus tumpukan dalam daftar". Rapi.
GreenAsJade
@GreenAsJade: Ya itu salah satu perintah yang paling saya gunakan :)
Emigna
7

Haskell, 61 57 55 byte

f x=maximum[a|(n,a)<-x,(i,b)<-x,b==abs(n-i)]
f.zip[0..]

Contoh penggunaan: (f.zip[0..]) [5,28,14,5,6,3,4,7]-> 14.

(Lebih atau kurang) implementasi langsung dari definisi: untuk setiap indeks ndari daftar input xtetap a := x!!njika ada indeks di imana b := x!!isama abs(n-i). Temukan yang maksimal.

Edit: @xnatau disimpan dua byte. Terima kasih!

nimi
sumber
Karena Anda tidak menggunakan x, itu harus lebih pendek untuk mendefinisikan suatu fungsi zdan komposisi zip[0..].
xnor
6

Jelly , 10 byte

,N+JFfJị¹Ṁ

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

,N+JFfJị¹Ṁ  Main link. Argument: A (array)

,N          Pair A with -A (element-wise negative).
   J        Yield the indices of A [1, ..., len(A)].
  +         Add the elements of A (and their negatives) with the corr. indices.
    F       Flatten the resulting 2D array.
     fJ     Filter indices; remove invalid indices (not in [1, ..., len(A)]) from
            the generated array. The result is the list of all indices of eligible
            elements of A.
       ị¹   Retrieve the corresponding elements of A.
         Ṁ  Take the maximum.
Dennis
sumber
5

Python 3, 85 80 72 Bytes

lambda l,e=enumerate:max(i for p,i in e(l)for s,j in e(l)if j==abs(s-p))

Sunting: -8 Bytes berkat @Dennis

Elvorfirilmathredia
sumber
5

EXCEL: 32 30 byte

=MAX(IF(A:A-ROW(A:A)<0,A:A,0))

Saya masih tidak percaya saya mendapatkannya sesingkat ini ...

Cara menggunakan:
rekatkan ini ke sel APA PUN kecuali sel-sel kolom A. Setelah menempel, saat masih mengedit, tekan control+ shift+ enteruntuk memasukkannya dengan benar.
masukkan nilai Anda ke kolom A, 1 nilai per sel (sesuai entri CSV).

Jika Anda ingin mengetahui cara kerjanya, saya telah memposting tip tambahan di Tips saya untuk bermain golf di pertanyaan Excel .

Komunitas
sumber
Saya suka golf yang luar biasa ini - siapa yang akan berpikir !!
GreenAsJade
4

JavaScript (ES6), 61 byte

a=>Math.max(...a.filter((_,i)=>a.some((e,j)=>e==i-j|e==j-i)))
Neil
sumber
4

Perl, 45 byte

Termasuk +2 untuk -ap

Berikan angka pada satu baris di STDIN:

largest.pl <<< "5 12 2 5 4 7 3 3 6 2 10 5 5 5 4 1 8 5"

largest.pl:

#!/usr/bin/perl -ap
($_)=sort{$b-$a}map@F[$^P=$n-$_,$n+++$_],@F

Satu byte lagi dapat diperoleh dengan mengganti ^Pdengan karakter kontrol literal, tetapi itu mengarah ke peringatan pada STDERR pada perl saat ini.

Diasumsikan largest number + array length < 2^32

Ton Hospel
sumber
3

Pyth, 19 17 byte

Terima kasih kepada @ Pietu1998 untuk -2 byte

eS@[email protected],-kb+b

Program yang mengambil input daftar pada STDIN dan mencetak hasilnya.

Cobalah online

Bagaimana itu bekerja

eS@[email protected],-kb+b  Program. Input: Q
         .e        Map over Q (implicit input fill) with elements as b and indices as k:
            -kb     k-b
               +b   k+b (Implicit fill with k)
           ,        2-element list of those (possible indices)
        s          Flatten that
      UQ           Yield [0, 1, 2, 3..., len(Q)-1]
     @             Filter the flattened list by presence in the above, removing invalid
                   indices
  @LQ              Index into Q at those indices
 S                 Sort that
e                  Yield the last element of that, giving the maximum
                   Implicitly print
TheBikingViking
sumber
}#sama dengan @. Juga, jika Anda mengatur ulang bit terakhir, ,-kb+bkAnda dapat menghapus bit terakhir ksejak Pyth memasukkannya secara otomatis.
PurkkaKoodari
@ Pietu1998 Terima kasih. Saya tidak tahu tentang pengisian implisit untuk penghitungan; apakah itu berfungsi untuk fungsi tipe peta lainnya?
TheBikingViking
Berfungsi untuk lambda apa pun, itu mengisi otomatis seluruh lambda dengan variabel lambda pertama.
PurkkaKoodari
3

MATL, 13 Bytes

ttn:tYTq=a)X>

Input harus berupa vektor kolom. Yaitu, input dipisahkan dengan titik koma seperti [1; 2; 3], atau koma yang dipisahkan dengan centang transpos di akhir seperti [1,2,3] '.

Cobalah online!

Semua uji kasus: (A) , (B) , (C) , (D) , (E) , (F)

Terima kasih kepada Suever untuk saran di chatroom MATL untuk menyimpan 2 karakter.

Penjelasan:

Strategi keseluruhan sama dengan jawaban Oktaf / MATLAB saya, di mana konsep dasar dijelaskan: https://codegolf.stackexchange.com/a/94161/42247

Kode spesifik dalam jawaban MATL ini dibuat sebagai berikut:

Inti dari metode ini adalah pembuatan matriks Toeplitz yang entri pertamanya adalah abs (ij). Pertama-tama kita membangun matriks Toeplitz dengan entri abs (i-1) +1 dengan perintah toeplitz MATL YT sebagai berikut:

n:tYT % Equivalent to @(v)toeplitz(1:length(v))

Untuk melihat cara kerjanya, mari kita panggil vektor input ke cuplikan kode ini 'v'. 'N' menemukan panjang v, lalu ':' membuat vektor 1: panjang (v). Selanjutnya 't' membuat salinan 1: panjang (v) pada tumpukan; salinan tambahan ini diperlukan karena bug yang terkenal di fungsi YT di MATL (setara dengan MATL dari toeplitz ()), di mana ia mengharapkan dua salinan input, bukan 1. Kemudian YT mengambil dua salinan vektor ini 1 : length (v) dari stack, dan membuat abs (ij) +1 Toeplitz matrix dari mereka.

Sekarang kita perlu mengurangi 1 dari matriks ini untuk mendapatkan matriks Toeplitz dengan entri abs (ij), dan menemukan lokasi ij di mana abs (ij) matriks Toeplitz ini sama dengan matriks semua vektor kolom yang berisi salinan kolom dari input vektor v. Hal ini dilakukan sebagai berikut:

t n:tYT q=
% t [code] q= is equivalent to @(v) [code](v)-1 == v

'T' pertama membuat salinan tambahan dari input dan menyimpannya di tumpukan. The 'n: tYT' membuat toeplitz matrix seperti yang dijelaskan sebelumnya dan mengeluarkannya ke dalam stack. Kemudian 'q' mengurangi 1 dari matriks Toeplitz, dan '=' melakukan perbandingan kesetaraan elemen antara matriks abs (ij) dan vektor yang kolomnya merupakan salinan dari input. Perhatikan bahwa dengan membandingkan vektor kolom dengan matriks, kami secara implisit mengambil keuntungan dari aturan penyiaran operator MATLAB / MATL (vektor kolom dalam perbandingan disalin untuk membuat matriks tanpa mengeluarkan perintah apa pun).

Akhirnya, kita perlu menemukan indeks baris i di mana ada kolom j sedemikian rupa sehingga entri ij'th dalam perbedaan matriks yang dibangun di atas sama dengan 1, kemudian mendapatkan nilai vektor input yang sesuai dengan indeks-indeks ini, kemudian ambil yang maksimum. Ini dalam tiga langkah berikut:

1) Temukan indeks untuk setiap baris yang berisi bukan nol:

tn:tYTq= a
% [code] a is equivalent to @(v) any([code](v))

2) Ekstrak elemen-elemen vektor input yang sesuai dengan indeks tersebut:

t tn:tYTq= a ) X>
% t [code] ) is equivalent to @(v) v([code](v)]

3) Temukan dan kembalikan elemen maksimum:

t tn:tYTq= a ) X>
% [code] X> is equivalent to @(v) max(v).
Nick Algeria
sumber
Perilaku fungsi YTtelah berubah dalam rilis 20.2.2 . Sekarang menggunakan 1 input secara default (yang lebih bermanfaat secara umum). Meskipun itu akan menghemat 1 byte di sini (hapus tsebelumnya YT), itu tidak dapat dieksploitasi karena perubahan bahasa postdates tantangan. Tetapi itu memiliki efek bahwa jawaban Anda tidak lagi berlaku dalam rilis baru, yang sekarang tinggal di TIO
Luis Mendo
Anda dapat mengedit kode tertaut dan meninggalkan catatan, atau menggunakan tautan ini ke juru bahasa MATL Online, yang mendukung rilis yang lebih lama. Sayangnya Anda juga perlu memperbarui tautan lainnya. Maaf atas ketidaknyamanan ini
Luis Mendo
Terlepas dari itu, Anda dapat menghemat penggantian 1 byte n:olehf
Luis Mendo
2

Ruby, 66 byte

->a{i=-1;a.map{|e|i+=1;[a[j=i+e]||0,a[0>(k=i-e)?j:k]||0].max}.max}
cia_rana
sumber
2

Oktaf / MATLAB, 40 Bytes

@(v)max(v(any(toeplitz(1:nnz(v))-v==1)))

Input harus berupa vektor kolom.

Terima kasih kepada Luis Mendo untuk saran menghemat 3 byte (lihat komentar)

Terima kasih kepada Suever untuk saran yang menyimpan 4 byte lebih banyak (menggantikan ~~ (jumlah ()) dengan any ())

Penjelasan:

Diberikan vektor input v, masalah ini setara dengan menemukan semua solusi i, j dari persamaan diskrit berikut,

abs(i-j) = v(i),   i,j both in 1..k,

di mana abs () adalah fungsi nilai absolut. Setiap v (i) yang memecahkan persamaan ini adalah salah satu solusi kandidat yang dapat kita maksimalkan.

Sebagai fungsi diskrit dari i dan j, semua kemungkinan untuk sisi kiri dapat diatur dalam matriks toeplitz yang terlihat seperti ini:

[0, 1, 2, 3, 4]
[1, 0, 1, 2, 3]
[2, 1, 0, 1, 2]    <--- abs(i-j)
[3, 2, 1, 0, 1]
[4, 3, 2, 1, 0]

Dan karena sisi kanan tidak bergantung pada i, semua kemungkinan untuk itu dapat disusun menjadi matriks di mana kolom semua salinan dari input,

[v(1), v(1), v(1), v(1), v(1)]
[v(2), v(2), v(2), v(2), v(2)]
[v(3), v(3), v(3), v(3), v(3)]   <--- v(i)
[v(4), v(4), v(4), v(4), v(4)]
[v(5), v(5), v(5), v(5), v(5)]

Untuk menemukan semua solusi persamaan, kami kurangi dua matriks ini dan temukan lokasi di mana ada nol. Baris di mana ada nol sesuai dengan indeks yang diinginkan i di mana ada aj sedemikian rupa sehingga abs (ij) = v (i).

Trik lainnya:

  • Dibutuhkan lebih sedikit karakter untuk membangun fungsi nilai absolut ditambah satu, abs (ij) +1, lalu memeriksa lokasi di mana perbedaannya adalah 1, daripada membangun fungsi nilai absolut yang sebenarnya (tidak tergeser).
  • Menggunakan penyiaran operator otomatis untuk secara implisit membuat salinan kolom v
  • Mendapat panjang input melalui nnz () alih-alih panjang (), yang bekerja karena input dikatakan positif dalam pernyataan masalah.
Nick Algeria
sumber
Format input fleksibel secara default. Anda dapat mengambil vsebagai vektor kolom, sebutkan saja dalam jawaban. Anda juga menggantinya finddengan ~~menyimpan dua byte lagi
Luis Mendo
@LuisMendo Terima kasih, saya mengedit posting untuk memasukkan saran Anda!
Nick Alger
Untuk bahasa yang berbeda (atau pendekatan yang sangat berbeda dalam bahasa yang sama) Anda harus memposting jawaban lain . Ada obrolan MATL jika Anda memiliki pertanyaan mengenai bahasa
Luis Mendo
BTW, karena bug dalam MATL's toeplitz( YT), ia menggunakan dua input (bukan satu) secara default
Luis Mendo
OK keren. Saya menerjemahkannya ke MATL dan memposting jawaban lain di sini: codegolf.stackexchange.com/a/94183/42247
Nick Alger
1

Mathematica, 69 byte

Max@MapIndexed[{If[#2[[1]]>#,a[[#2-#]],{}],a[[#2+#]]~Check~{}}&,a=#]&

Fungsi anonim. Mengambil daftar integer sebagai input dan mengembalikan integer sebagai output. Abaikan pesan yang dihasilkan.

LegionMammal978
sumber
1

Scala, 94 byte

a=>a.zipWithIndex.filter(p=>a.zipWithIndex.exists(x=>x._1==Math.abs(p._2-x._2))).unzip._1.max
sprague44
sumber
1

PHP, 128 Bytes

<?foreach(($i=$_GET[i])as$k=>$v){$k-$v<0?:!($i[$k-$v]>$m)?:$m=$i[$k-$v];if($k+$v<count($i))if($i[$k+$v]>$m)$m=$i[$k+$v];}echo$m;
Jörg Hülsermann
sumber
1

Java 7, 125 123 byte

int c(int[]a){int r=0,i=0,l=a.length,x;for(;i<l;r=l>(x=i+a[i])?a[x]>r?a[x]:r:r,r=(x=i-a[i++])>0?a[x]>r?a[x]:r:r);return r;}

2 byte disimpan berkat @rco .

Tidak dikelompokkan (semacam) & kode pengujian:

Coba di sini.

class M{
  static int c(int[] a){
    int r = 0,
        i = 0,
        l = a.length,
        x;
    for(; i < l; r = l > (x = i + a[i])
                      ? a[x] > r
                         ? a[x]
                         : r
                      : r,
                 r = (x = i - a[i++]) > 0
                      ? a[x] > r
                         ? a[x]
                         : r
                      : r);
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1, 13 }));
    System.out.println(c(new int[]{ 2, 9, 8, 3, 72, 2 }));
    System.out.println(c(new int[]{ 5, 28, 14, 5, 6, 3, 4, 7 }));
    System.out.println(c(new int[]{ 1, 3, 5, 15, 4, 1, 2, 6, 7, 7 }));
    System.out.println(c(new int[]{ 5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3 }));
    System.out.println(c(new int[]{ 5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5 }));
  }
}

Keluaran:

13
8
14
7
5
10
Kevin Cruijssen
sumber
1
Anda tidak perlu x & y. Gunakan kembali salah satunya (-2). Juga saya tidak berpikir Anda dapat mengatur r di ternary-if besar karena Anda selalu harus menguji kedua kasus, kiri dan kanan.
mrco
1
@ mrco Terima kasih, hapus ,y. Dan saya memang sampai pada kesimpulan yang sama tentang terner tunggal jika. Tentu saja itu mungkin, tetapi Anda akan melakukan pemeriksaan dua kali lebih lama.
Kevin Cruijssen
1

Java, 118 byte

int f(int[]a){int t=0,i,j,z=0,l=a.length;while(t<l*l){i=t/l;j=t++%l;z=a[i]>z&&((i<j?j-i:i-j)==a[j])?a[i]:z;}return z;}
Ekeko
sumber
Selamat datang di PPCG! :)
Martin Ender
1

Python, 58 byte

Berdasarkan Tony S. jawaban Ruby . Jawaban ini berfungsi dalam Python 2 dan 3. Selamat datang di saran golf.

lambda n:max([n[i+v]for i,v in enumerate(n)if i+v<len(n)])

Tidak melakukanolf

def f(array):
    result = []
    for index, value in enumerate(array):
        if index + value < len(array):
            result.append(array[index + value])
    return max(result)
Sherlock9
sumber
1

Ruby 56 byte

Solusi ruby ​​terkecil saya.

->n{x=[];i=0;n.map{|v|x<<n[v+i]&&v+i<n.size;i+=1};x.max}

Cukup mudah untuk menguji di konsol rel

a = ->n{x=[];i=0;n.map{|v|x<<n[v+i]&&v+i<n.size;i+=1};x.max}
a[[1, 13]
=> 13
a[[2, 9, 8, 3, 72, 2]]
=> 8
a[[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5]]
=> 10

Ini dimulai pada 63 byte, terima kasih atas saran untuk membantu memangkasnya!

Tony S.
sumber
Anda dapat menggunakan .mapsebagai gantinya.each
Cyoce
juga (x) if (y)dapat diganti dengan(y)&&(x)
Cyoce
Anda dapat menggunakan a<<bsebagai gantinyaa+=[b]
Sherlock9
@ Sherlock9 Saya lupa tentang <<. Menggunakan + = [b] tidak berfungsi dengan saran Cyoce menggunakan &&. Sekarang berhasil, terima kasih!
Tony S.
1

Sebenarnya , 17 byte

Jawaban ini adalah port Sebenarnya dari jawaban Python saya . Saran bermain golf diterima. Cobalah online!

;╗ñ♂Σ⌠╜l>⌡░⌠╜E⌡MM

Tidak melakukanolf

         Implicit input L.
;╗       Duplicate L and save a copy of L to register 0.
ñ        enumerate() the other copy of L.
♂Σ       sum() all the pairs of [index, value of n]. Call this list Z.
⌠...⌡░   Push values of Z where the following function returns a truthy value. Variable v_i.
  ╜        Push L from register 0.
  l        Push len(L).
  >        Check if len(L) > v_i.
⌠...⌡M   Map the following function over Z_filtered. Variable i.
  ╜        Push L from register 0.
  E        Take the ith index of L.
M        max() the result of the map.
         Implicit return.
Sherlock9
sumber
0

T-SQL (sqlserver 2016), 132 byte

Golf:

;WITH C as(SELECT value*1v,row_number()over(order by 1/0)n FROM STRING_SPLIT(@,','))SELECT max(c.v)FROM C,C D WHERE abs(D.n-C.n)=D.v

Tidak Terkumpul:

DECLARE @ varchar(max)='2, 9, 8, 3, 72, 2'

;WITH C as
(
  SELECT
    value*1v,
    row_number()over(order by 1/0)n
  FROM
    STRING_SPLIT(@,',')
)
SELECT
  max(c.v)
FROM
  C,C D
WHERE
  abs(D.n-C.n)=D.v

Biola

t-clausen.dk
sumber
0

JavaScript (ES6), 56 54 byte

let f =
    
l=>l.map((n,i)=>m=Math.max(m,l[i+n]|0,l[i-n]|0),m=0)|m

console.log(f([1, 13])); // → 13
console.log(f([2, 9, 8, 3, 72, 2])); // → 8
console.log(f([5, 28, 14, 5, 6, 3, 4, 7])); // → 14
console.log(f([1, 3, 5, 15, 4, 1, 2, 6, 7, 7])); // → 7
console.log(f([5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3])); // → 5
console.log(f([5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5])); // → 10

Arnauld
sumber
0

Clojure, 68 byte

#(apply max(map(fn[i](get % i 0))(flatten(map-indexed(juxt - +)%))))

Sebagai contoh (map-indexed (juxt - +) [3 4 1 2])adalah ([-3 3] [-3 5] [1 3] [1 5])(indeks +/-nilainya), ini digunakan untuk mencari nilai-nilai dari vektor asli (out-of-range defaulting to 0) dan nilai maks ditemukan. Masih terasa sedikit verbose tapi setidaknya saya harus menggunakan juxt:)

NikoNyrh
sumber