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


38

도전:

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

행운과 행복한 골프!


네 번째 사례와 같은 테스트 사례를 추가해야하지만 결과가 음수 인 경우 (목록에 양수가 있음)
mbomb007

나는 이것을 Retina에서 시도하려고했지만 부정적인 것이 있음을 알았습니다. 망막은 부정적인 것을 싫어합니다.
mbomb007

2
레티 나가 할 수있는 것과 할 수없는 것을 지시하게하지 마십시오. 책임을지고, 당신은 보스입니다!
Stewie Griffin

답변:



19

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

x(~~(dec2bin(5)-48)). 그것을 구현하는 것이 누구의 아이디어였습니까? 매우 영리하고 논리적 인 배열에 유용합니다! :) 좋은 답변!
Stewie Griffin

1
@WeeingIfFirst 감사합니다! dec2bin()-'0'MATLAB에서 수백 번 사용 했으므로 MATL에 있어야한다는 것을 알았습니다. :-)
Luis Mendo

5
그건 그렇고, 모든 작업 후에 스택의 내용을 포함했다는 사실은 공감할 가치가 있습니다. 그것은 너무 쉽게 MATL =) 이해 (및 학습) 할 수 있습니다
스튜이 그리핀

2
컨벌루션 록스. +1
Suever

10

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

온라인 통역사에서는 작동하지 않지만 오프라인에서는 작동합니다.


하하! 제 시간에 : p.
Adnan

1
이 연산자 중 하나를 구현 했습니까? :)
Stewie Griffin

1
@WeeingIfFirst : ü어제 추가되었습니다 :)
Emigna

2
0실제 답변이 부정적이라면 이 결과가 나오지 않습니까? 제로를 버려야한다고 생각합니다.
Lynn

1
@Lynn 좋은 캐치! 이 용이하게 교체함으로써 수정 될 수 ˜O(합).
Adnan

9

하스켈, 63 43 바이트

f x=maximum[a+b|(a,b)<-tail>>=zip$x,a*b==0]

4 바이트의 @MartinEnder에 감사합니다!


나는 당신이 a*b==0대신 사용할 수 있다고 생각 합니다 ||.
마틴 엔더

zip으로 이전 버전으로 돌아 가야합니다. 여기 a는 더 이상 인접 해 있지 않습니다
Damien

여기에 람다 봇이 필요하지 않습니다. 이것은 "정규"Haskell
Damien

8

Pyth, 12 11 10 바이트

eSsM/#0,Vt

폼 쌍, 멤버가 0 인 필터, 합계를 기준으로 정렬하여 가장 큰 값을 반환합니다.


,Vt(implicit QQ)은와 동일한 쌍을 반환 .:Q2하지만 쌍이 반전됩니다. 그래도 작동해야합니다.
PurkkaKoodari

f}0T입니다/#0
isaacg

7

자바 스크립트 (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 바이트 절약


1
당신은 사용하여 2 바이트를 저장할 수 있습니다 ==대신===
Huntro

1
몇 곳에서 몇 바이트를 절약 할 수 있습니다.l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
ETHproductions

오류 : { "message": "구문 오류", "filename": " stacksnippets.net/js ", "lineno": 15, "colno": 3}
RosLuP

@RosLuP-화살표 기능을 지원하는 ES6이 필요하며 모든 브라우저에서 작동하지는 않습니다 (Edge 이전의 모든 IE 버전, v10 이하의 모든 Safari 버전 등)
Arnauld

6

자바 스크립트 (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))

5

파이썬, 49 바이트

lambda a:max(sum(x)for x in zip(a,a[1:])if 0in x)

테스트는 아이디어입니다

쌍을 통해 압축하고 0을 포함하는 것을 합산하여 최대 값을 반환합니다.


4

루비, 51 바이트

->a{a.each_cons(2).map{|a,b|a*b!=0?-1.0/0:a+b}.max}

용법

f=->a{a.each_cons(2).map{|a,b|a*b!=0?-1.0/0:a+b}.max}
p f[gets.split.map(&:to_i)]

괄호가 필요하다고 생각하지 않습니다 a+b.
Martin Ender

@Martin 청산 구문 오류가 발생합니다 ... ideone.com/F6Ed4B
cia_rana

Ruby 2.3에서 작동합니다. (예를 들어 여기에서 사용 가능 : repl.it/languages/ruby )
Martin Ender

@Martin Ender "=="대신 "! ="를 사용하면 작동합니다. 조언 해 주셔서 감사합니다! ideone.com/F6Ed4B
cia_rana

. :( 거기에 버그가있다 -3 -2 0반환 0내가 대체 생각합니다. ...?0:......?-1.0/0:...5 바이트를 추가, 그것을 수정해야합니다.
m-chrzan

4

PHP, 77 68 71 바이트

익명에서 -3 바이트, MartinEnder에서 -4 및 -2

preg_match_all("#(?<=\b0 )\S+|\S+(?= 0)#",$argv[1],$m);echo max($m[0]);

와 실행 php -r '<code>' '<space separated values>'


2
사용하여 \K경기를 폐기하는 것은 지금까지 살펴 숨김을 사용하는 것보다 짧습니다.
user59178

2
입력에 공백을 사용한 다음 \S+부호있는 정수를 일치시키는 데 사용할 수도 있습니다 . \b0,을 앞에 두지 않아도되도록 사용해야 할 것입니다 ,.
Martin Ender

1
이 같은 입력에 작동합니까 4 0 0 5?
Ton Hospel

@TonHospel No. \K대안으로 작동하지 않습니까? 알 수없는 이유로 두 번째 대안은을 반환 0 0하므로 더 0앞에 일치하는 항목 이 없습니다 5. 고마워
Titus

register_globals를 사용하여 다른 PHP 솔루션을 살펴보십시오
Jörg Hülsermann

4

자바 7 118 105 106 바이트

int d(int[]a){int i=0,m=1<<31,c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-‌​1])>m?c:m);return m;}

대신 산술 접근 방식을 사용하여 @cliffroot 덕분에 13 바이트가 절약 되었습니다. 1 바이트 추가 @mrco 가 버그를 발견 한 후 감사합니다 (추가 된 테스트 케이스 2, 1, 02대신 대신 반환 됩니다 1).

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class M{
  static int c(int[] a){
    int i,
        m = a[i=0],
        c;
    for(; ++i < a.length; m = a[i] * a[i-1] == 0 & (c = a[i] + a[i - 1]) > m)
                           ? c
                           : m);
    return m;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1, 4, 3, 6, 0, 3, 7, 0 }));
    System.out.println(c(new int[]{ 9, 4, 9, 0, 9, 0, 9, 15, -2 }));
    System.out.println(c(new int[]{ -4, -6, -2, 0, -9 }));
    System.out.println(c(new int[]{ -11, 0, 0, 0, 0, 0, -12, 10 }));
    System.out.println(c(new int[]{ 0, 20 }));
    System.out.println(c(new int[]{ 2, 1, 0 }));
  }
}

산출:

7
9
-2
0
20
1

1
약간 다른 접근 방식 사용를 arithmetics은 작동하는 것 같군int d(int[]a){int i,m=a[i=0],c;for(;++i<a.length;m=a[i]*a[i-1]==0&(c=a[i]+a[i-1])>m?c:m);return m;}
cliffroot

3
첫 번째 숫자가 0에 인접하지 않지만 0에 인접한 임의의 수보다 큰 경우 출력이 잘못되었습니다. 테스트 사례 {2, 1, 0}에서 재현 할 수 있습니다. i를 0으로 직접 초기화하고 m을 1 << 31 (+1)로 초기화하면이 문제를 해결할 수 있습니다.
mrco

3

CJam , 16 바이트

q~2ew{0&},::+:e>

온라인으로 사용해보십시오! (테스트 스위트로)

설명

q~    e# Read and eval input.
2ew   e# Get all (overlapping) pairs of adjacent values.
{0&}, e# Keep only those that contain a 0.
::+   e# Sum each pair to get the other (usually non-zero) value.
:e>   e# Find the maximum.

3

이미지 처리 도구 상자가있는 MATLAB, 32 바이트

@(x)max(x(imdilate(~x,[1 0 1])))

이것은 익명의 기능입니다. 테스트 사례의 사용 예 :

>> f = @(x)max(x(imdilate(~x,[1 0 1])))
f =
  function_handle with value:
    @(x)max(x(imdilate(~x,[1,0,1])))

>> f([1 4 3 6 0 3 7 0])
ans =
     7

>> f([9 4 9 0 9 0 9 15 -2])
ans =
     9

>> f([-4 -6 -2 0 -9])
ans =
    -2

>> f([-11 0 0 0 0 0 -12 10])
ans =
     0

>> f([0 20])
ans =
    20

3

Dyalog APL , 14 바이트

⌈/∊2(+↑⍨0∊,)/⎕

⌈/ 최대

평평한 ( " e nlisted"

2(... )/쌍으로

+ 합 (제로 더하기 무언가)

↑⍨ 만약에

0 제로

의 회원이다

, 쌍 (왼쪽 숫자와 오른쪽 숫자의 연결)

TryAPL 온라인!


3

R, 48 47 바이트

편집 : @Vlo 덕분에 오류를 수정하고 stdins의 입력을 읽도록 변경하고 paranthese를 할당 w하고 건너 뛰어 1 바이트를 절약했습니다 .

function(v)sort(v[c(w<-which(v==0)-1,w+1)],T)[1]

v=scan();w=which(v==0);sort(v[c(w-1,w+1)],T)[1]

중첩되지 않은 설명

  1. 벡터 v가 0을 취하는 인덱스를 찾으십시오 .w <- which(v == 0)
  2. 인덱스를 포함한 새로운 벡터를 만들기 +-1: w-1w+1
  3. 지수 w-1와 일치하는 요소를 추출 하고w+1
  4. 내림차순으로 정렬하고 주먹 요소 추출

의 마지막 또는 첫 번째 요소 v가 0이면 w+-1벡터의 길이를 벗어난 인덱스를 효과적으로 가져 v[length(v)+1]옵니다 NA. 이것은 일반적으로 문제가되지 않지만 , 옵션이 지정되지 않은 한 벡터에 발생이 있으면 max()함수는 불편하게 반환 NA합니다 na.rm=T. 따라서 사용하는 것보다 첫 번째 요소를 정렬하고 추출하는 것이 2 바이트 더 짧습니다 max(). 예 :

max(x,na.rm=T)
sort(x,T)[1]

1
그렇지 않으면 추가 괄호가 필요합니다. 그렇지 않으면 최대 값이 0보다 오른쪽 인 모든 테스트 사례에 실패합니다 (예 : c(1, 4, 3, 6, 0, 10, 7, 0) c((w<-which(v==0))-1,w+1)스캔시 약간 짧음sort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
Vlo

@Vlo +1의 명백한 오류를 지적 해 주셔서 감사합니다. 제안 된 솔루션에서 당신은 ()너무 잊었다 .). 코드를 업데이트하고 v이전 조작을 할당했습니다 .
Billywob

3

매스 매 티카, 46 43 바이트

@MartinEnder 로 인해 3 바이트가 저장 되었습니다 .

Max[Tr/@Partition[#,2,1]~Select~MemberQ@0]&

익명의 기능. 정수 목록을 입력으로 취하고 정수를 출력으로 리턴합니다. Ruby 솔루션을 기반으로합니다.


2

펄, 42 바이트

에 +1 포함 -p

STDIN에 숫자를 온라인으로 알려주십시오

largest0.pl <<< "8 4 0 0 5 1 2 6 9 0 6"

largest0.pl:

#!/usr/bin/perl -p
($_)=sort{$b-$a}/(?<=\b0 )\S+|\S+(?= 0)/g

2

줄리아, 56 55 바이트

f(l)=max(map(sum,filter(t->0 in t,zip(l,l[2:end])))...)

인접한 값에 대한 튜플을 만들고 0을 포함하는 튜플을 가져와 튜플 값을 합한 후 최대 값을 찾습니다.


1

파이썬 2, 74 바이트

def f(x):x=[9]+x;print max(x[i]for i in range(len(x)) if 0in x[i-1:i+2:2])

0현재 요소의 왼쪽 또는 오른쪽 위치에 a 가 있으면 모든 요소를 ​​순환 하고 생성기에 포함시킨 다음을 통해 실행합니다 max. 우리는 0숫자가 아닌 목록을 채워야합니다 . 슬라이스 [-1:2:2]에는 아무것도 포함되지 않으므로 절대 포함 되지 않습니다.


1

T-SQL, 182 바이트

골프 :

DECLARE @x varchar(max)='1 5 4 3 6 1 3 17 1 -8 0 -7'

DECLARE @a INT, @b INT, @ INT WHILE @x>''SELECT @a=@b,@b=LEFT(@x,z),@x=STUFF(@x,1,z,''),@=IIF(@a=0,IIF(@b<@,@,@b),IIF(@b<>0 or @>@a,@,@a))FROM(SELECT charindex(' ',@x+' ')z)z PRINT @

언 골프 드 :

DECLARE @x varchar(max)='1 5 4 3 6 1 3 17 1 -8 0 -7'

DECLARE @a INT, @b INT, @ INT
WHILE @x>''
  SELECT 
   @a=@b,
   @b=LEFT(@x,z),
   @x=STUFF(@x,1,z,''),
   @=IIF(@a=0,IIF(@b<@,@,@b),IIF(@b<>0 or @>@a,@,@a))
  FROM(SELECT charindex(' ',@x+' ')z)z 
PRINT @

깡깡이


1

PowerShell v3 +, 62 바이트

param($n)($n[(0..$n.count|?{0-in$n[$_-1],$n[$_+1]})]|sort)[-1]

다른 답변보다 조금 길지만 멋진 접근 방식입니다.

입력을 $n받습니다. 그런 다음 인덱스를 반복 0..$n.count하고 Where-Object( |?{...})를 사용 하여 배열의 이전 또는 다음 항목이있는 인덱스를 꺼내어 0배열 슬라이스로 다시 공급합니다 $n[...]. 우리는 |sort그 요소들을 가지고 가장 큰 것을 취합니다 [-1].

PS C:\Tools\Scripts\golfing> @(1,4,3,6,0,3,7,0),@(9,4,9,0,9,0,9,15,-2),@(-4,-6,-2,0,-9),@(-11,0,0,0,0,0,-12,10)|%{""+$_+" --> "+(.\largest-number-beside-a-zero.ps1 $_)}
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

PS C:\Tools\Scripts\golfing> @(0,20),@(20,0),@(0,7,20),@(7,0,20),@(7,0,6,20),@(20,0,6)|%{""+$_+" --> "+(.\largest-number-beside-a-zero.ps1 $_)}
0 20 --> 20
20 0 --> 20
0 7 20 --> 7
7 0 20 --> 20
7 0 6 20 --> 7
20 0 6 --> 20

1

q, 38 바이트

{max x where 0 in'x,'(next x),'prev x}

최대 값이 0 뒤에 올 때 작동하지 않는 것 같습니다 . 또한 q 전문가는 아니지만 코드를 {}기능으로 만들기 위해 코드를 둘러싸 야한다고 생각합니다 .
Dennis

1

J, 18 바이트

[:>./2(0&e.\#+/\)]

설명

[:>./2(0&e.\#+/\)]  Input: array A
                 ]  Identity. Get A
     2              The constant 2
      (         )   Operate on 2 (LHS) and A (RHS)
               \    Get each subarray of size 2 from A and
             +/       Reduce it using addition
           \        Get each subarray of size 2 from A and
       0&e.           Test if 0 is a member of it
            #       Filter for the sums where 0 is contained
[:>./               Reduce using max and return

1

펄 6 , 53 바이트

{max map ->$/ {$1 if !$0|!$2},(1,|@_,1).rotor(3=>-2)}

넓히는:

# bare block lambda with implicit signature of (*@_)
{
  max

    map

      -> $/ {           # pointy lambda with parameter 「$/」
                        # ( 「$0」 is the same as 「$/[0]」 )
        $1 if !$0 | !$2 # return the middle value if either of the others is false
      },

      ( 1, |@_, 1 )     # list of inputs, with added non-zero terminals
      .rotor( 3 => -2 ) # grab 3, back-up 2, repeat until less than 3 remain
}

1

PHP, 66 바이트

foreach($a=$argv as$k=>$v)$v||$m=max($m,$a[$k-1],$a[$k+1]);echo$m;

꽤 직설적 인. 입력을 반복하고 숫자가 0이면 $m인접한 두 숫자 중 가장 높은 숫자 이전 값인으로 설정 $m됩니다.

다음과 같이 실행하십시오 ( -d미학에만 추가됨).

php -d error_reporting=30709 -r 'foreach($a=$argv as$k=>$v)$v||$m=max($m,$a[$k-1],$a[$k+1]);echo$m;' -- -4 -6 -2 0 -9;echo

1

C # 76 74 바이트

using System.Linq;i=>i.Zip(i.Skip(1),(a,b)=>a*b==0?1<<31:a+b).Max(‌​);

설명:

zip을 사용하여 배열 자체를 조인하지만 항목 0이 항목 1에 조인되도록 두 번째 참조의 첫 번째 값을 건너 뜁니다. b에 곱하기 b를 곱한 결과가 0이면 그 중 하나가 0이고 a + b를 출력해야합니다. 그렇지 않으면 언어에서 가능한 최소 정수를 출력하십시오. 항상 0과 0이 아닌 것으로 가정하면이 최소값은 최대 값으로 출력되지 않습니다.

용법:

[TestMethod]
public void LargestFriend()
{
    Assert.AreEqual(7, F(new int[] { 1, 4, 3, 6, 0, 3, 7, 0 }));
    Assert.AreEqual(9, F(new int[] { 9, 4, 9, 0, 9, 0, 9, 15, -2 }));
    Assert.AreEqual(-2, F(new int[] { -4, -6, -2, 0, -9 }));
    Assert.AreEqual(0, F(new int[] { -11, 0, 0, 0, 0, 0, -12, 10 }));
    Assert.AreEqual(20, F(new int[] { 0, 20 }));
}

안녕하세요. 에서 공간을 제거 할 수 있습니다 int[]i) {. 또한 현재 코드에서 75 바이트를 계산합니다 (공백을 제거하면 74).
Kevin Cruijssen

삼항을 뒤집어 4 바이트를 절약 할 수 있다고 생각합니다.a?b?i.Min()).Max():a:b
Titus

게다가 using System.Linq;요?
pinkfloydx33

사실이지만이 질문은 방금 전체 프로그램이 아닌 메서드를 요청했으며 사용 System.Linq;은 기본 새 클래스 템플릿의 일부입니다.
Grax32

@Grax 어느 쪽이든 using바이트 카운트에 문장 을 포함시켜야한다
TheLethalCoder

1

R, 48 54 바이트

s=scan()

w=which;max(s[c(w(s==0)+1,w(s==0)-1)],na.rm=T)

콘솔 입력에서 벡터를 읽은 다음 0에 인접한 모든 값에서 최대 값을 가져옵니다.

편집 : rturnbull 덕분에 경계에서 생산 된 NA를 잡습니다!


내가 잘못하고 있습니까? pastebin.com/0AA11xcw
manatwork

이 같은 경우에 실패 20 0하기 때문에, s[w(s==0)+1]반환 NA, 및 max의의 기본 치료 NA를 반환하는 것입니다. 인수를 추가하여 수정 na.rm=T하거나 사용할 코드를 다시 작성하여 사용할 수 있습니다 sort(위의 다른 R 답변 참조).
rturnbull

모든 것을 한 줄로 정리할 수 있습니까? R로 코딩하는 방법을 모르지만 할 수 있다고 가정합니다.
clismique

@ Qwerp-Derp : 내가 아는 한. scan ()은 콘솔 입력이 벡터에서 읽을 때까지 기다립니다. 빈 줄을 입력하면 입력 스트림이 닫힙니다. 두 선을 하나로 실행하는 경우 두 번째 부분은 벡터에 입력되도록 적어도 부분적으로 인식됩니다.
Headcrash

0

라켓 183 바이트

(λ(k)(let*((lr(λ(l i)(list-ref l i)))(l(append(list 1)k(list 1)))(m(for/list((i(range 1(sub1(length l))))
#:when(or(= 0(lr l(sub1 i)))(= 0(lr l(add1 i)))))(lr l i))))(apply max m)))

자세한 버전 :

(define f
 (λ(k)
    (let* ((lr (λ(l i)(list-ref l i)))
           (l (append (list 1) k (list 1)))
           (m (for/list ((i (range 1 (sub1(length l))))
                         #:when (or (= 0 (lr l (sub1 i)))
                                    (= 0 (lr l (add1 i))) ))
                (lr l i) )))
      (apply max m) )))

테스트 :

(f (list 1 4 3 6 0 3 7 0))
(f (list 9 4 9 0 9 0 9 15 -2))
(f (list -4 -6 -2 0 -9))
(f (list -11 0 0 0 0 0 -12 10))
(f (list 0 20 ))

산출:

7
9
-2
0
20

0

C 132 바이트

main의 리턴 코드를 사용한 출력 :

int main(int a,char**_){int i,m=0;_[0]=_[a]="1";for(i=1;i<a;++i){m=(*_[i-1]-48||*_[i+1]-48?m>atoi(_[i])?m:atoi(_[i]):m);}return m;}

atoi 호출 중 하나를 저장하여 몇 바이트를 절약 할 수 있어야한다고 생각하지만 효율적인 방법을 찾을 수 없습니다. ( ,t더하기 t=더하기 ,더하기 t두 번이 너무 깁니다). 또한 이것은 기술적으로 정의되지 않은 동작 (_ [a]을 "1"로 설정)을 사용하지만 내가 아는 모든 컴파일러는 기본적으로 허용합니다.

전략 : 어레이의 시작과 끝을 1로 채우고 각 인접 항목을 확인하는 내부 섹션을 반복합니다.


0

PHP 69 64 바이트

Jörg Hülsermann과 Titus에서 온 / 오프 바이트. =(-5)

register_globals를 활성화해야합니다. 용법:http://localhost/notnull.php?i[]=9&i[]=-5i[]=...

$x=$_GET['i'];
$y=0;
foreach($x as $j){
if($y<abs($j)){
$y=$j;
}
}
echo $y;

골프 :

$x=$_GET['i'];$y=0;foreach($x as $j)if($y<abs($j))$y=$j;echo $y;

입력을 직접 배열로 사용하지 마십시오. json_encode의 이유를 볼 수 없습니다.
Jörg Hülsermann

기본 설정이 아닌 경우 전체 설정 변경 길이를 바이트 수에 추가해야합니다. ( meta.codegolf.stackexchange.com/q/4778#4778 참조 )이 경우에 +21 바이트 -d register_globals=1(또는 register_globals가 기본적으로 활성화 된 버전을 지정)
Titus

그러나 json_decode좋은 생각입니다.
Titus

@Titus 내가 의미는 ?id[]=1&id[]=2&id[]=3 다음 $_GET["id"]배열을 다시 제공합니다. 이런 이유로 json_decode를 들어 나를 위해 이해되지 않는다
요 르그 Hülsermann

@ JörgHülsermann 바이트 비용이 들지만 여전히 좋은 생각입니다.
Titus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.