이 질문 의 속편 .
태스크
양의 정수 배열이 주어지면 가장 큰 요소 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
하십시오.i
b := 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)))