Tìm số n lớn nhất cách xa vị trí n


29

Phần tiếp theo của câu hỏi này .

Bài tập

Cho một mảng các số nguyên dương, tìm phần tử k lớn nhất trong đó:

Tồn tại một số khoảng cách nguyên dương n , do đó phần tử trong mảng nằm n  đặt bên trái hoặc bên phải từ k bằng n .

Mảng được đảm bảo chứa ít nhất một phần tử thỏa mãn điều kiện này.

Mã ngắn nhất (tính bằng byte) sẽ thắng. Bạn có thể chọn bất kỳ định dạng I / O nào bạn thích.

Thí dụ

Đưa ra đầu vào

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

Các giá trị đủ điều kiện là:

  • Các 4, như có được một 7vị trí 7 vị trí bên phải của nó
  • Vị trí đầu tiên 6, vì có 33 vị trí bên phải
  • Các 3, như có được một 4vị trí 4 vị trí bên trái của nó
  • 5, có một 2vị trí nằm ở bên phải của nó
  • Thứ hai 7, vì có 33 vị trí nằm bên trái của nó.

Trong số các giá trị này, lớn nhất là 7.

Các trường hợp thử nghiệm

[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

Hai trường hợp nữa (mặc dù hơi dư thừa) trong ví dụ: 6 trường hợp đầu tiên (một lần nữa) vì có 5 năm vị trí bên phải; hoặc 7 thứ hai (một lần nữa) vì có 6 sáu vị trí còn lại.
Jonathan Allan

1. Trên điện thoại của tôi, tiêu đề dường như là "Tìm vị trí số lớn nhất cách xa". 2. Điều kiện được nêu là tồn tại một số k sao cho (một thuộc tính không phụ thuộc vào k). Nó chắc chắn phải sai.
Peter Taylor

@PeterTaylor "cái này" trong "phần tử này" đề cập đến k.
Taemyr

1
@Taemyr, điều đó không có ý nghĩa vì hai lý do: thứ nhất, vì k không được nêu là một yếu tố; và thứ hai bởi vì chúng tôi được yêu cầu " tìm phần tử lớn nhất thỏa mãn " điều kiện, vì vậy " phần tử này " có tiền đề nằm ngoài điều kiện.
Peter Taylor

2
Có lẽ bạn có thể tránh tất cả sự nhầm lẫn bằng cách nói "tìm phần tử lớn nhất k sao cho" và sau đó sử dụng k thay cho phần tử này trong định nghĩa?
Martin Ender

Câu trả lời:


3

Thạch , 9 byte

Jạþ`=ḅa¹Ṁ

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

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.

1
Hmm, không chắc chính sách về vấn đề này là gì, nhưng hiện tại bạn có hai cách tiếp cận khác nhau trong các câu trả lời riêng biệt, trong cùng một ngôn ngữ chương trình bởi cùng một người dùng. Bạn có nên đặt cả hai đoạn 9 và 10 byte vào cùng một câu trả lời không, vì đó là cùng một ngôn ngữ lập trình và cả hai bạn? Tôi có thể hiểu nhiều câu trả lời trong cùng một ngôn ngữ lập trình bởi nhiều người dùng, nhưng cá nhân tôi nghĩ rằng các cách tiếp cận khác nhau của cùng một người dùng trong cùng một ngôn ngữ lập trình sẽ phù hợp hơn với các chỉnh sửa. Chỉ là ý kiến ​​của tôi.
Kevin Cruijssen

5
Đó là câu hỏi meta đầu tiên của tôi và sự đồng thuận dường như là các cách tiếp cận khác nhau nên được đăng trong các câu trả lời khác nhau. Trong trường hợp này, cách tiếp cận của tôi không có gì ngoài điểm chung tối đa, vì vậy tôi đã đi tìm một bài riêng.
Dennis

8

05AB1E , 21 byte

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

Giải trình

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

Hãy thử trực tuyến!


Bạn có thể sử dụng nó mọi lúc, nhưng tôi chỉ nhận thấy "gói stack trong một danh sách". Khéo léo.
GreenAsJade

@GreenAsJade: Vâng, đó là một trong những lệnh tôi sử dụng nhiều nhất :)
Emigna

7

Haskell, 61 57 55 byte

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

Ví dụ sử dụng: (f.zip[0..]) [5,28,14,5,6,3,4,7]-> 14.

(Nhiều hay ít) một thực hiện trực tiếp của định nghĩa: đối với từng chỉ số ncủa danh sách đầu vào xgiữ a := x!!nnếu có một chỉ số inơi b := x!!ibình đẳng abs(n-i). Tìm mức tối đa.

Chỉnh sửa: @xnor đã lưu hai byte. Cảm ơn!


Vì bạn không sử dụng x, nên ngắn hơn để xác định hàm zvà soạn zip[0..].
xnor

6

Thạch , 10 byte

,N+JFfJị¹Ṁ

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

,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.

5

Con trăn 3 85 80 72 byte

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

Chỉnh sửa: -8 Byte nhờ @Dennis


5

EXCEL: 32 30 byte

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

Tôi vẫn không thể tin rằng tôi đã hiểu được nó ngắn thế này ...

Cách sử dụng:
dán phần này vào BẤT K cell ô nào NGOẠI TRỪ các ô của cột A. Sau khi dán, trong khi vẫn chỉnh sửa, nhấn control+ shift+ enterđể nhập chính xác.
đặt các giá trị của bạn vào cột A, 1 giá trị trên mỗi ô (theo mục nhập CSV).

Nếu bạn muốn tìm hiểu cách thức hoạt động của tính năng này, tôi đã đăng một mẹo bổ sung trong Mẹo chơi golf trong câu hỏi Excel .


Tôi yêu những sân golf xuất sắc này - ai cũng nghĩ !!
GreenAsJade

4

JavaScript (ES6), 61 byte

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

4

Perl, 45 byte

Bao gồm +2 cho -ap

Cho số trên một dòng trên 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

Một byte nữa có thể đạt được bằng cách thay thế ^Pbằng ký tự điều khiển bằng chữ, nhưng điều đó dẫn đến một cảnh báo về STDERR trên các lỗi gần đây.

Giả định largest number + array length < 2^32


3

Pyth, 19 17 byte

Cảm ơn @ Pietu1998 cho -2 byte

eS@LQ@UQs.e,-kb+b

Một chương trình lấy đầu vào của danh sách trên STDIN và in kết quả.

Dùng thử trực tuyến

Làm thế nào nó hoạt động

eS@LQ@UQs.e,-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

}#cũng giống như @. Ngoài ra, nếu bạn sắp xếp lại bit cuối cùng, ,-kb+bkbạn có thể xóa bit cuối cùng kkể từ khi Pyth tự động chèn nó.
PurkkaKoodari

@ Pietu1998 Cảm ơn. Tôi đã không biết về điền vào ngầm cho liệt kê; điều đó có làm việc cho bất kỳ chức năng loại bản đồ nào khác không?
TheBikingViking

Hoạt động với mọi lambda, nó tự động điền phần còn lại của bất kỳ lambda nào với biến lambda đầu tiên.
PurkkaKoodari

3

MATL, 13 byte

ttn:tYTq=a)X>

Đầu vào phải là một vectơ cột. Tức là, đầu vào được phân tách bằng dấu chấm phẩy như [1; 2; 3] hoặc dấu phẩy được phân tách bằng dấu chuyển vị ở cuối như [1,2,3] '.

Hãy thử trực tuyến!

Tất cả các trường hợp thử nghiệm: (A) , (B) , (C) , (D) , (E) , (F)

Cảm ơn Suever về các đề xuất trong phòng chat MATL để lưu 2 ký tự.

Giải trình:

Chiến lược tổng thể giống như câu trả lời Octave / MATLAB của tôi, trong đó khái niệm cơ bản được giải thích: https://codegolf.stackexchange.com/a/94161/42247

Mã cụ thể trong câu trả lời MATL này được xây dựng như sau:

Cốt lõi của phương pháp là việc xây dựng ma trận Toeplitz có mục nhập thứ i là abs (ij). Trước tiên, chúng tôi xây dựng ma trận Toeplitz với các mục abs (i-1) +1 với lệnh toeplitz của MATL như sau:

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

Để xem cách thức hoạt động của nó, chúng ta hãy gọi vectơ đầu vào cho đoạn mã này 'v'. 'N' tìm độ dài của v, sau đó ':' xây dựng vectơ 1: length (v). Tiếp theo, 't' tạo một bản sao khác 1: length (v) trên ngăn xếp; bản sao bổ sung này là cần thiết do một lỗi nổi tiếng trong hàm YT trong MATL (tương đương MATL của toeplitz ()), trong đó nó mong đợi hai bản sao của đầu vào thay vì 1. Sau đó, YT lấy hai bản sao của vectơ 1 này : length (v) ra khỏi ngăn xếp và tạo ma trận Toeplitz +1 (ij) +1 từ chúng.

Bây giờ chúng ta cần trừ 1 từ ma trận này để lấy ma trận Toeplitz với các mục abs (ij) và tìm các vị trí ij trong đó ma trận Toeplitz abs này (ij) bằng với ma trận của tất cả các vectơ cột chứa các bản sao cột của đầu vào vector v. Điều này được thực hiện như sau:

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

'T' đầu tiên tạo một bản sao bổ sung của đầu vào và lưu trữ nó trên ngăn xếp. 'N: tYT' tạo ma trận toeplitz như được mô tả trước đó và đưa nó vào ngăn xếp. Sau đó, 'q' trừ 1 khỏi ma trận Toeplitz và '=' thực hiện so sánh đẳng thức nguyên tố giữa ma trận abs (ij) và vectơ có các cột là bản sao của đầu vào. Lưu ý rằng bằng cách so sánh vectơ cột với ma trận, chúng tôi hoàn toàn lợi dụng quy tắc phát sóng toán tử của MATLAB / MATL (vectơ cột trong so sánh được sao chép để tạo ma trận mà không đưa ra bất kỳ lệnh nào).

Cuối cùng, chúng ta cần tìm các chỉ số hàng i trong đó có một cột j sao cho mục nhập thứ i trong phần chênh lệch ma trận được xây dựng ở trên bằng 1, sau đó lấy giá trị của vectơ đầu vào tương ứng với các chỉ số này, sau đó lấy giá trị tối đa. Điều này trong ba bước sau đây:

1) Tìm các chỉ số cho bất kỳ hàng nào có chứa khác không:

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

2) Trích xuất các phần tử của vectơ đầu vào tương ứng với các chỉ số đó:

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

3) Tìm và trả về phần tử tối đa:

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

Hành vi của chức năng YTđã thay đổi trong bản phát hành 20.2.2 . Bây giờ nó sử dụng 1 đầu vào theo mặc định (nói chung là hữu ích hơn). Mặc dù điều đó sẽ giúp bạn tiết kiệm 1 byte ở đây (loại bỏ ttrước đó YT), nhưng nó không thể bị khai thác vì sự thay đổi trong ngôn ngữ sẽ hoãn thách thức. Nhưng nó có tác dụng là câu trả lời của bạn không còn giá trị trong bản phát hành mới, hiện đang có trong TIO
Luis Mendo

Bạn có thể chỉnh sửa mã được liên kết và để lại một ghi chú hoặc sử dụng liên kết này đến trình thông dịch MATL Online, hỗ trợ các bản phát hành cũ hơn. Thật không may, bạn cũng cần cập nhật các liên kết khác. Xin lỗi vì sự bất tiện này
Luis Mendo

Bất kể điều đó, bạn có thể tiết kiệm 1 byte thay thế n:bằngf
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}

2

Octave / MATLAB, 40 byte

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

Đầu vào phải là một vectơ cột.

Cảm ơn Luis Mendo vì đã gợi ý tiết kiệm 3 byte (xem bình luận)

Cảm ơn Suever về các đề xuất lưu thêm 4 byte (thay thế ~ ~ (sum ()) bằng bất kỳ ())

Giải trình:

Cho một vectơ đầu vào v, bài toán này tương đương với việc tìm tất cả các nghiệm i, j của phương trình rời rạc sau đây,

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

trong đó abs () là hàm giá trị tuyệt đối. Mỗi v (i) mà phương trình này được giải là một trong những giải pháp ứng cử viên mà chúng ta có thể tối đa hóa.

Là một chức năng riêng biệt của i và j, tất cả các khả năng cho phía bên trái có thể được sắp xếp trong ma trận toeplitz trông giống như thế này:

[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]

Và vì phía bên tay phải không phụ thuộc vào i, nên tất cả các khả năng cho nó có thể được sắp xếp thành một ma trận trong đó các cột là tất cả các bản sao của đầu vào,

[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)]

Để tìm tất cả các giải pháp cho phương trình, chúng tôi trừ hai ma trận này và tìm các vị trí có số không. Các hàng có số 0 tương ứng với các chỉ số mong muốn i là nơi có aj sao cho abs (ij) = v (i).

Thủ đoạn khác:

  • Phải mất ít ký tự hơn để xây dựng hàm giá trị tuyệt đối cộng với một, abs (ij) +1, sau đó kiểm tra các vị trí có chênh lệch là 1, thay vì xây dựng hàm giá trị tuyệt đối đúng (không dịch chuyển).
  • Sử dụng phát sóng toán tử tự động để ngầm định tạo các bản sao của v
  • Lấy độ dài của đầu vào thông qua nnz () thay vì length (), hoạt động do các đầu vào được cho là dương trong báo cáo vấn đề.

Định dạng đầu vào là linh hoạt theo mặc định. Bạn có thể lấy vnhư một vectơ cột, chỉ cần nói rằng trong câu trả lời. Ngoài ra, bạn thay thế findbằng cách ~~lưu thêm hai byte
Luis Mendo

@LuisMendo Cảm ơn, tôi đã chỉnh sửa bài đăng để kết hợp các đề xuất của bạn!
Nick Alger

Đối với các ngôn ngữ khác nhau (hoặc một cách tiếp cận khác nhau đáng kể trong cùng một ngôn ngữ), bạn nên đăng một câu trả lời khác . Có một phòng chat MATL nếu bạn có bất kỳ câu hỏi nào về ngôn ngữ
Luis Mendo

BTW, do lỗi trong MATL's toeplitz( YT), nó sử dụng hai đầu vào (không phải một) theo mặc định
Luis Mendo

Được rồi Tôi đã dịch nó sang MATL và đăng một câu trả lời khác tại đây: codegolf.stackexchange.com/a/94183/42247
Nick Alger

1

Toán học, 69 byte

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

Chức năng ẩn danh. Lấy danh sách các số nguyên làm đầu vào và trả về một số nguyên làm đầu ra. Bỏ qua bất kỳ tin nhắn được tạo ra.


1

Scala, 94 byte

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

1

PHP, 128 byte

<?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;

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;}

Lưu 2 byte nhờ @mrco .

Ungolfed (loại) và mã kiểm tra:

Hãy thử nó ở đây.

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 }));
  }
}

Đầu ra:

13
8
14
7
5
10

1
Bạn không cần x & y. Chỉ cần sử dụng lại một trong số họ (-2). Ngoài ra tôi không nghĩ rằng bạn có thể thiết lập r trong một ternary lớn - nếu bởi vì bạn luôn phải kiểm tra cả hai trường hợp, trái và phải.
mrco

1
@mrco Cảm ơn, đã gỡ bỏ ,y. Và tôi thực sự đã đi đến kết luận tương tự liên quan đến một ternary duy nhất nếu. Tất nhiên là có thể, nhưng bạn sẽ thực hiện kiểm tra hai lần khiến nó lâu hơn rất nhiều.
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;}

Chào mừng đến với PPCG! :)
Martin Ender

1

Python, 58 byte

Dựa trên câu trả lời Tony S. Ruby . Câu trả lời này hoạt động trong Python 2 và 3. Gợi ý chơi gôn được chào đón.

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

Ungolfing

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

1

Ruby 56 byte

Dung dịch ruby ​​nhỏ nhất của tôi.

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

Khá dễ dàng để kiểm tra trong bảng điều khiển rails

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

Điều này bắt đầu ở mức 63 byte, nhờ những gợi ý giúp cắt giảm!


bạn có thể sử dụng .mapthay vì.each
Cyoce

cũng (x) if (y)có thể được thay thế bằng(y)&&(x)
Cyoce

Bạn có thể sử dụng a<<bthay vìa+=[b]
Sherlock9

@ Sherlock9 Tôi quên mất <<. Sử dụng + = [b] không hoạt động với đề xuất của Cyoce bằng cách sử dụng &&. Bây giờ nó làm, cảm ơn!
Tony S.

1

Trên thực tế , 17 byte

Câu trả lời này là một cổng thực sự của câu trả lời Python của tôi . Gợi ý chơi golf chào mừng. Hãy thử trực tuyến!

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

Ungolfing

         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.

0

T-SQL (sqlserver 2016), 132 byte

Chơi gôn

;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

Ung dung:

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

Vĩ cầm


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


0

Clojure, 68 byte

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

Ví dụ (map-indexed (juxt - +) [3 4 1 2])([-3 3] [-3 5] [1 3] [1 5])(chỉ số +/-giá trị của nó), chúng được sử dụng cho các giá trị nhìn lên từ vector gốc (out-of-phạm vi mặc định cho 0) và giá trị tối đa được tìm thấy. Vẫn cảm thấy hơi dài dòng nhưng ít nhất tôi đã sử dụng juxt:)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.