n에서 가장 큰 수의 n 위치 찾기 선택할 수 있습니다. 예 주어진 입력 [4, 6,

이 질문 의 속편 .

태스크

양의 정수 배열이 주어지면 가장 큰 요소 k 를 찾으십시오 .

존재 어떤 양의 정수 거리 , n은 어레이의 요소가 위치되도록, 해당  장소가 왼쪽 또는 오른쪽에서 k는 동일 없음 .

배열은이 조건을 만족시키는 요소를 하나 이상 포함합니다.

가장 짧은 코드 (바이트)가 이깁니다. 원하는 I / O 형식을 선택할 수 있습니다.

주어진 입력

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

적합한 값은 다음과 같습니다.

  • 4, 같은 거기 7오른쪽에 7 위치에 위치
  • 제가 6하는 바와 같이이 3오른쪽에 3 개 위치에 위치한
  • 3, 같은 거기 4그 왼쪽에 위치한 4 개 포지션
  • 5, 같은 거기 2오른쪽 2 위치에 위치
  • 둘째 7하는 존재로 3그 왼쪽에 위치한 3 개 개의 위치.

이 값 중 가장 큰 값은 7입니다.

테스트 사례

[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



답변

젤리 , 9 바이트

Jạþ`=ḅa¹Ṁ

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

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.


답변

05AB1E , 21 바이트

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

설명

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

온라인으로 사용해보십시오!


답변

하스켈, 61 57 55 바이트

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

사용 예 : (f.zip[0..]) [5,28,14,5,6,3,4,7] -> 14.

(더 많거나 적은) 정의의 직접 구현 : n입력 목록의 각 색인마다 색인 이 있으면 x유지 a := x!!n하십시오.ib := x!!i equals 있는abs(n-i) . 최대 값을 찾으십시오.

편집 : @xnor은 2 바이트를 저장했습니다. 감사!


답변

젤리 , 10 바이트

,N+JFfJị¹Ṁ

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인 .

작동 원리

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


답변

파이썬 3, 85 80 72 바이트

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

편집 : @ Dennis 덕분에 -8 바이트


답변

엑셀 : 32 30 바이트

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

나는 이것이 내가 짧다는 것을 믿을 수 없다 …

사용법 :
열 A의 셀을 제외한 모든 셀에 이것을 붙여 넣습니다 . 붙여 넣은 후에도 편집하는 동안 control+ shift+ enter를 눌러 올바르게 입력하십시오.
CSV 항목에 따라 셀당 1 개의 값을 열 A에 입력하십시오.

이것이 어떻게 작동하는지 알고 싶다면 Excel의 골프 팁 질문에 추가 팁을 게시했습니다 .


답변

자바 스크립트 (ES6), 61 바이트

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