Sıfıra komşu en büyük sayıyı bulun


38

Meydan okuma:

Bir vektör / tam sayı listesini giriş olarak alın ve sıfıra bitişik en büyük sayıyı alın.

Özellikler:

  • Her zaman olduğu gibi, isteğe bağlı giriş ve çıkış formatı
  • En az bir sıfır ve en az bir sıfır olmayan eleman olacağını varsayabilirsiniz.

Test durumları:

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

İyi şanslar ve mutlu golf!


Dördüncü gibi bir test durumu eklemelisiniz, ancak sonucun negatif olduğu yerde (listede pozitif sayılar vardır).
mbomb007 21:16

Bunu Retina'da deneyecektim, ama sonra negatiflerin olduğunu fark ettim. Retina, negatiflerden nefret eder.
mbomb007 21:16

2
Retina'nın yapabileceklerini ve yapamadıklarını belirlemesine izin verme. Sorumluluk sende, patron sensin!
Stewie Griffin,

Yanıtlar:



19

MATL , 10 bayt

t~5BZ+g)X>

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın .

açıklama

[-4 -6 -2 0 -9]Örnek olarak girdi alalım.

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)). Bunu uygulamak kimin fikriydi? Çok zeki ve mantıksal diziler için kullanışlıdır! :) Güzel cevap!
Stewie Griffin,

1
@WeeingIfFirst Teşekkürler! dec2bin()-'0'MATLAB'da yüzlerce kez kullanmıştım , bu yüzden birinin MATL :-) olması gerektiğini biliyordum
Luis Mendo

5
Bu arada, her işlemden sonra yığının içeriğini eklemeniz gerçeği, tek başına bir avantajdır. Anlamak çok daha kolay (ve muhtemelen öğrenecek) MATL =)
Stewie Griffin

2
Evrişim kayalar. +1
Suever

10

05AB1E , 9 bayt

ü‚D€P_ÏOZ

açıklama

ü‚         # 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

Çevrimiçi tercümanda çalışmaz, ancak çevrimdışı çalışır.


Bu inanılmaz haha! Tam zamanında: s.
Adnan

1
Sadece bu operatörlerden birini uyguladınız mı? :)
Stewie Griffin

1
@WeeingIfFirst: üdaha dün eklendi :)
Emigna

2
0Asıl cevap negatif olursa bu dönüş olmaz mı? Sanırım sıfırları atmak zorundasın.
Lynn,

1
@ Lynn Güzel yakala! Bu (sum) ˜ile değiştirerek kolayca düzeltilebilir O.
Adnan

9

Haskell, 63 43 bayt

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

@MartinEnder'e 4 bayt için teşekkürler!


Bunun a*b==0yerine kullanabileceğini düşünüyorum ||.
Martin Ender

Zip ile önceki sürüme geri dönmelisiniz. Burada a ve artık bitişik
Damien

Burada lambdabot gerekmez. Bu "normal" Haskell
Damien

8

Pyth, 12 11 10 bayt

eSsM/#0,Vt

Form çiftleri, sıfır üyeye göre filtreler, toplama göre sıralar, en büyük değeri döndürür.


,Vt(örtük QQ) aynı çiftleri döndürür .:Q2, ancak çiftler çevrilmiş olarak. Yine de çalışmalı.
PurkkaKoodari 21:16

f}0Tis/#0
isaacg 21:16

7

JavaScript (ES6), 59 57 56 bayt

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

Düzenleme: Huntro Düzenleme sayesinde 2 bayt
kaydedildi: ETHproductions sayesinde 1 bayt kaydedildi


1
Kullanarak ==yerine iki bayt kaydedebilirsiniz===
Huntro

1
Birkaç yerde bir kaç bayt kurtarabilirim:l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
ETHproductions

Hata: {"message": "Sözdizimi hatası", "dosya adı": " stacksnippets.net/js ", "lineno": 15, "colno": 3}
RosLuP

@RosLuP - Bu, ok işlevi destekli ES6'yı gerektirir ve tüm tarayıcılarda çalışmaz (bunlarla sınırlı olmamak üzere: Edge öncesi tüm IE sürümleri, v10 altındaki tüm Safari sürümleri vb.)
Arnauld

6

JavaScript (ES6), 53 bayt

a=>(m=-1/0,a.reduce((l,r)=>(m=l*r||l+r<m?m:l+r,r)),m)

Çünkü kullanmayı seviyorum reduce. Alternatif çözüm, ayrıca 53 bayt:

a=>Math.max(...a.map((e,i)=>e*a[++i]==0?e+a[i]:-1/0))

5

Python, 49 bayt

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

Testler ideone altında

Çiftler arasında fermuarlar, sıfır içerenleri toplar, maksimum değeri döndürür.


4

Ruby, 51 bayt

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

kullanım

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)]

Etraftaki parantezlere ihtiyacın olduğunu sanmıyorum a+b.
Martin Ender

@Martin Ender sözdizimi hatası oluşuyor
cia_rana 21:16

Ruby 2.3'te çalışıyor. (burada bulunabilir: repl.it/languages/ruby )
Martin Ender

@Martin Ender "==" yerine "! =" Kullandığımda işe yarıyor. Tavsiyen için teşekkürler! ideone.com/F6Ed4B
cia_rana 21:16

. :( orada bir hata var -3 -2 0getiri 0ben yerine düşünüyorum. ...?0:...İle ...?-1.0/0:...5 bayt ekleyerek, bunu düzeltmek gerekir.
m-Chrzan

4

PHP, 77 68 71 bayt

Anonimden -3 bayt , MartinEnder'den -4 ve -2

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

koşmak php -r '<code>' '<space separated values>'


2
kullanarak \Kmaçı atmak şimdiye kadar bir görünüm geride kullanmaktan daha kısadır.
user59178 21:16

2
Giriş için boşluk ayırmayı da kullanabilir ve ardından \S+işaretli bir tamsayıyla eşleştirmek için kullanabilirsiniz . Muhtemelen kullanmanız gerekecek, \b0,yani hazırlamak zorunda kalmayacaksınız ,.
Martin Ender

1
Bu giriş için çalışıyor mu 4 0 0 5?
Ton Hospel

@TonHospel No. \KAlternatiflerle çalışmıyor mu ? Bilinmeyen bir nedenden dolayı, ikinci alternatif geri döner 0 0, böylece daha 0önce eşleşecek bir şey kalmaz 5. Sabit, teşekkürler.
Titus,

Register_globals ile diğer PHP çözümüne göz atın
Jörg Hülsermann 21:16

4

Java 7, 118 105 106 bayt

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;}

13 bayt @cliffroot sayesinde yerine aritmetik bir yaklaşım kullanarak kaydetti . Bir hata keşfettikten sonra @mrco'ya 1 ek bayt teşekkür eder (eklenen test durumu yerine 2, 1, 0geri döner ).21

Ungolfed ve test kodu:

Burada dene.

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 }));
  }
}

Çıktı:

7
9
-2
0
20
1

1
arithmetics kullanarak biraz farklı bir yaklaşım, çalışıyor gibi görünüyorint 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 21:16

3
İlk sayı 0'a bitişik değil, 0'a bitişik herhangi bir sayıdan daha büyük olduğunda çıkış yanlıştır. {2, 1, 0} test durumuyla yeniden üretilebilir. Bunu, i'yi 0 ile, m'yi 1 << 31 (toplam +1) ile başlatarak düzeltebilirsiniz.
mrco

3

CJam , 16 bayt

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

Çevrimiçi deneyin! (Test takımı olarak.)

açıklama

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

Görüntü İşleme Araç Kutusu ile MATLAB, 32 bayt

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

Bu anonim bir işlevdir. Test durumları için örnek kullanım:

>> 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 bayt

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

⌈/ en büyüğü

düzleştirilmiş (" e listelenmiş")

2(... )/çift ​​yönlü

+ toplamı (sıfır artı bir şey)

↑⍨ eğer alınmışsa

0 sıfır

üyesi

, çifti (sol taraftaki sayı ile sağ taraftaki sayıyı birleştirdi)

TryAPL çevrimiçi!


3

R, 48 47 bayt

EDIT: @Vlo sayesinde bir hata düzeltildi ve stdins'ten girdi okumak için değiştirildi, wparantezleri atayarak ve atlayarak bir bayt kaydetti .

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]

İstenmeyen açıklama

  1. Vektörün v0 değerini aldığı endeksleri bulun :w <- which(v == 0)
  2. Endeksleri içeren yeni bir vektör oluşturun +-1: w-1vew+1
  3. Endekslerle eşleşen öğeleri w-1vew+1
  4. Azalan düzende sıralayın ve ilk elemeyi çıkarın

Son veya ilk elemanın vsıfır w+-1olması durumunda, v[length(v)+1]döndürülen vektörün uzunluğu dışında bir indeksi etkin bir şekilde alacağına dikkat edin NA. Bu genellikle bir sorun değildir, ancak vektörde bir seçenek belirtilmediği sürece, herhangi bir oluşum olması durumunda max()işlevler uygunsuz bir şekilde geri döner . Bu nedenle, ilk öğeyi kullanmak ve kullanmaktan daha ayıklamak, 2 bayt daha kısadır , örneğin:NAna.rm=Tmax()

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

1
İlave parantez aksi maksimum 0 gibi sağında tüm test durumları başarısız Need c(1, 4, 3, 6, 0, 10, 7, 0) c((w<-which(v==0))-1,w+1)biraz tarama ile daha kısa bit Ayrıcasort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
VLO

@Vlo Bu açık hatayı işaret ettiğin için teşekkürler, +1. Önerilen çözümünüzde siz de unutmuşsunuz ();). Kodu güncelledi ve vşimdi önceden manipülasyon atadı .
Billywob

3

Mathematica, 46 43 bayt

@MartinEnder nedeniyle 3 bayt kaydedildi .

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

Anonim işlev Girdi olarak tam sayıların bir listesini alır ve çıktı olarak bir tamsayı döndürür. Ruby çözümünden alınmıştır.


2

Perl, 42 bayt

İçin +1 içerir -p

STDIN'de on line numaraları verin

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

Julia, 56 55 bayt

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

Komşu değerler için tuples oluşturun, 0 içeren tupleri alın, tuple değerlerini toplayın ve maksimum sayı bulun


1

Python 2, 74 Bayt

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

0Geçerli öğenin solunda veya sağında bir konum varsa, her öğenin arasında geçiş yapın, jeneratöre ekleyin ve ardından geçirin max. Listeyi bazı 0numara olmayanlarla doldurmamız gerekiyor . Dilim [-1:2:2]hiçbir şey içermeyeceği için asla eklenmeyecek .


1

T-SQL, 182 bayt

golfed:

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 @

Ungolfed:

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 @

Keman


1

PowerShell v3 +, 62 bayt

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

Diğer cevaplardan biraz daha uzun, ama şık bir yaklaşım.

Girdi alır $n. Ardından, dizinler arasında dolaşır 0..$n.count, Where-Object( |?{...}) işlevini dizideki önceki veya sonraki öğenin bulunduğu dizinleri çıkarmak için kullanır 0ve bunları dizin dilimine geri besler $n[...]. Daha sonra |sortbu unsurları ve en büyüğünü alırız [-1].

Örnekler

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 bayt

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

Maksimum 0'dan sonra geldiğinde bu iş görünmüyor . Ayrıca, ben bir q uzmanı değilim, ancak {}bir işlev yapmak için kodunuzu çevrelemeniz gerektiğini düşünüyorum .
Dennis,

1

J, 18 bayt

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

açıklama

[:>./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

Perl 6 , 53 bayt

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

Expanded:

# 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 bayt

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

Oldukça basit. Girdi üzerinde yinelenir ve bir sayı olduğunda 0, $m2 bitişik sayının en yüksek sayısına ve önceki herhangi bir değerine ayarlanır $m.

Bu şekilde koş ( -dyalnızca estetik için eklendi):

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 bayt

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

Açıklama:

Diziyi kendisiyle birleştirmek için zip işlevini kullanın, ancak 2. referanstaki ilk değeri atlayarak öğenin sıfırı bir öğeye birleştirmesini sağlayın. B sayısını çarpın, sonuç sıfırsa, bunlardan birinin sıfır olması ve a + b çıktısı alması gerekir. Aksi takdirde, dilde mümkün olan minimum sayıyı yazınız. Her zaman sıfır ve sıfır olmayan olacağımız varsayımı dikkate alındığında, bu minimum değer asla maksimum olarak verilmez.

Kullanımı:

[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 }));
}

Selam. alanını kaldırabilirsiniz int[]i) {. Ayrıca, şu anki kodunuzda 75 bayt sayıyorum (boşluğu kaldırırsanız 74).
Kevin Cruijssen

Sanırım üçlüleri tersine çevirerek 4 bayt kaydedebilirsiniz:a?b?i.Min()).Max():a:b
Titus

Artı using System.Linq;, hayır?
pinkfloydx33

Doğru ama bu soru tam bir program değil, sadece bir yöntem istedi ve kullanmak System.Linq;varsayılan yeni sınıf şablonunun bir parçası.
Grax32

@Grax Her iki şekilde de ifadenizi usingbayt
sayınıza

1

R, 48 54 bayt

s=scan()

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

Konsol girişindeki vektörü okur, ardından 0'a bitişik tüm değerlerin üstünden maksimum değeri alır.

Düzenleme: Sınırda üretilen NA yakalar, teşekkürler rturnbull!


Yanlış mı yapıyorum? pastebin.com/0AA11xcw
yapıt

Bu gibi durumlarda başarısız olur 20 0, çünkü s[w(s==0)+1]iadeler NAve maxvarsayılan işlemi NAgeri döndürmektir. Argümanı ekleyerek düzeltebilir na.rm=Tveya kullanılacak kodu yeniden çalıştırabilirsiniz sort(yukarıda verilen diğer R cevabına bakınız).
rturnbull

Her şeyi tek bir çizgide sıkıştırabilir misin? R'de nasıl kod yazılacağını bilmiyorum ama yapabileceğini farz ediyorum.
clismique 25:16

@ Qwerp-Derp: Bildiğim kadarıyla değil. scan () konsol girişinin vektörde okunmasını bekler, giriş akışı boş bir satır girilerek kapatılır. İki çizgiyi bir olarak çalıştırırsanız, ikinci kısım en azından kısmen vektörlerin girişi olduğu kabul edilir.
Headcrash

0

Raket 183 bayt

(λ(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)))

Detaylı versiyon:

(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) )))

Test yapmak:

(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 ))

Çıktı:

7
9
-2
0
20

0

C 132 bayt

Ana'nın dönüş kodunu kullanarak çıkışlar:

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 aramalarından birini kaydederek birkaç bayt kurtarabilmem gerektiğini hissediyorum, ancak verimli bir yol bulamadım. ( ,tartı t=artı ,artı tiki kez çok uzun). Ayrıca bu teknik olarak tanımsız davranışlar kullanır (_ [a] - "1" a ayarlı) ancak bildiğim her derleyici varsayılan olarak izin veriyor.

Strateji: dizinin başlangıcını ve sonunu 1 ile doldurun, ardından her bir komşuyu kontrol eden iç bölüm üzerinde döngü uygulayın.


0

PHP 69 64 bayt

Jörg Hülsermann ve Titus'tan bazı baytlar açılıyor. =(-5)

Register_globals etkin olmalı. Kullanımı: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;

golfed:

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

Neden girişi doğrudan dizi olarak kullanmıyorsunuz? Json_encode nedenini göremedim.
Jörg Hülsermann 21:16

Varsayılan olmayan ayarlar için, ayar değişikliğinin tam uzunluğunu bayt sayınıza eklemelisiniz. (bkz. meta.codegolf.stackexchange.com/q/4778#4778 ) Bu durumda +21 bayt -d register_globals=1(veya varsayılan olarak register_globals öğesinin varsayılan olarak etkin olduğu bir sürüm belirtin)
Titus

Ama json_decodegüzel bir fikir.
Titus

@Titus Demek istediğim, ?id[]=1&id[]=2&id[]=3 sonra $_GET["id"]bir dizi geri veriyor. Bu nedenle json_decode benim için bir anlam ifade etmiyor
Jörg Hülsermann 21:16

@ JörgHülsermann Bayt maliyeti, ama yine de güzel bir fikir.
Titus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.