도전:
벡터 / 정수 목록을 입력으로 취하고 0에 인접한 가장 큰 숫자를 출력하십시오.
사양:
- 항상 그렇듯이 선택적 입력 및 출력 형식
- 하나 이상의 0과 하나 이상의 0이 아닌 요소가 있다고 가정 할 수 있습니다.
테스트 사례 :
1 4 3 6 0 3 7 0
7
9 4 9 0 9 0 9 15 -2
9
-4 -6 -2 0 -9
-2
-11 0 0 0 0 0 -12 10
0
0 20
20
행운과 행복한 골프!
답변
젤리 , 8 바이트
ṡ2ẠÐḟS€Ṁ
ṡ2 Overlapping pairs
ẠÐḟ Remove pairs without zeroes
S€ Sum of each pair
Ṁ Maximum
답변
MATL , 10 바이트
t~5BZ+g)X>
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
설명
입력 [-4 -6 -2 0 -9]
을 예로 들어 봅시다 .
t % Input array. Duplicate
% STACK: [-4 -6 -2 0 -9], [-4 -6 -2 0 -9]
~ % Logical negate. Replaces zeros by logical 1, and nonzeros by logical 0
% STACK: [-4 -6 -2 0 -9], [0 0 0 1 0]
5B % Push logical array [1 0 1] (5 in binary)
% STACK: [-4 -6 -2 0 -9], [0 0 0 1 0], [1 0 1]
Z+ % Convolution, maintaining size. Gives nonzero (1 or 2) for neighbours of
% zeros in the original array, and zero for the rest
% STACK: [-4 -6 -2 0 -9], [0 0 1 0 1]
g % Convert to logical
% STACK: [-4 -6 -2 0 -9], [0 0 1 0 1]
) % Use as index into original array
% STACK: [-2 -9]
X> % Maximum of array.
% STACK: -2
% Implicitly display
답변
05AB1E , 9 바이트
ü‚D€P_ÏOZ
설명
ü‚ # pair up elements
D # duplicate
€P # product of each pair (0 if the pair contains a 0)
_ # logical negate, turns 0 into 1 and everything else to 0
Ï # keep only the pairs containing at least 1 zero
O # sum the pairs
Z # take max
온라인 통역사에서는 작동하지 않지만 오프라인에서는 작동합니다.
답변
하스켈, 63 43 바이트
f x=maximum[a+b|(a,b)<-tail>>=zip$x,a*b==0]
4 바이트의 @MartinEnder에 감사합니다!
답변
Pyth, 12 11 10 바이트
eSsM/#0,Vt
폼 쌍, 멤버가 0 인 필터, 합계를 기준으로 정렬하여 가장 큰 값을 반환합니다.
답변
자바 스크립트 (ES6), 59 57 56 바이트
let f =
l=>l.map((n,i)=>m=l[i-1]==0|l[i+1]==0&&n>m?n:m,m=-1/0)|m
console.log(f([1, 4, 3, 6, 0, 3, 7, 0])); // 7
console.log(f([9, 4, 9, 0, 9, 0, 9, 15, -2])); // 9
console.log(f([-4, -6, -2, 0, -9])); // -2
console.log(f([-11, 0, 0, 0, 0, 0, -12, 10])); // 0
console.log(f([3, 0, 5])); // 5
console.log(f([28, 0, 14, 0])); // 28
편집 : Huntro 덕분에 2 바이트 절약
편집 : ETH 프로덕션 덕분에 1 바이트 절약
답변
자바 스크립트 (ES6), 53 바이트
a=>(m=-1/0,a.reduce((l,r)=>(m=l*r||l+r<m?m:l+r,r)),m)
나는을 사용하는 것을 좋아하기 때문에 reduce
. 대체 솔루션, 53 바이트 :
a=>Math.max(...a.map((e,i)=>e*a[++i]==0?e+a[i]:-1/0))