카테고리 보관물: 코딩

코딩

0에 인접한 가장 큰 숫자를 찾습니다 및 출력

도전:

벡터 / 정수 목록을 입력으로 취하고 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))