Finden Sie die größte Zahl, die an eine Null angrenzt

38

Herausforderung:

Nehmen Sie einen Vektor / eine Liste von Ganzzahlen als Eingabe und geben Sie die größte Zahl aus, die einer Null benachbart ist.

Spezifikationen:

  • Wie immer optionales Eingabe- und Ausgabeformat
  • Sie können davon ausgehen, dass es mindestens ein Null- und mindestens ein Nicht-Null-Element gibt.

Testfälle:

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

Viel Glück und viel Spaß beim Golfen!

Stewie Griffin
quelle
Sie sollten einen Testfall wie den vierten hinzufügen, bei dem das Ergebnis jedoch negativ ist (die Liste enthält positive Zahlen).
mbomb007
Ich wollte das auf der Retina versuchen, aber dann habe ich festgestellt, dass es Negative gibt. Retina hasst Negative.
mbomb007
2
Lassen Sie sich nicht von der Netzhaut vorschreiben, was Sie können und was nicht. Übernimm die Kontrolle, du bist der Boss!
Stewie Griffin

Antworten:

19

MATL , 10 Bytes

t~5BZ+g)X>

Probieren Sie es online! Oder überprüfen Sie alle Testfälle .

Erläuterung

Nehmen wir [-4 -6 -2 0 -9]als Beispiel die Eingabe .

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
Luis Mendo
quelle
x(~~(dec2bin(5)-48)). Wer wollte das umsetzen? Sehr clever und nützlich für logische Arrays! :) Gute Antwort!
Stewie Griffin
1
@WeeingIfFirst Danke! Ich hatte dec2bin()-'0'hunderte Male in MATLAB gearbeitet, also wusste ich, dass man in MATL sein musste :-)
Luis Mendo
5
Übrigens ist die Tatsache, dass Sie den Inhalt des Stapels nach jeder Operation eingeschlossen haben, eine Aufwertung wert. Es macht es so viel einfacher zu verstehen (und möglicherweise zu lernen) MATL =)
Stewie Griffin
2
Faltungs-Felsen. +1
Suever
10

05AB1E , 9 Bytes

ü‚D€P_ÏOZ

Erläuterung

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

Funktioniert nicht im Online-Interpreter, funktioniert aber offline.

Emigna
quelle
Das ist unglaublich haha! Pünktlich: p.
Adnan
1
Einfach einen dieser Operatoren implementiert oder? :)
Stewie Griffin
1
@WeeingIfFirst: Wurde üerst gestern hinzugefügt :)
Emigna
2
Wird dies nicht zurückkehren, 0wenn die tatsächliche Antwort negativ wäre? Sie müssen die Nullen wegwerfen, denke ich.
Lynn
1
@Lynn Schöner Fang! Dies kann leicht durch Ersetzen ˜durch O(sum) behoben werden .
Adnan
9

Haskell, 63 43 Bytes

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

Danke an @MartinEnder für 4 Bytes!

BlackCap
quelle
Ich denke, Sie können a*b==0anstelle der verwenden ||.
Martin Ender
Sie müssen mit zip zur vorherigen Version zurückkehren. Hier sind a und be nicht mehr benachbart
Damien
Sie brauchen hier keinen Lambdabot. Dies ist "normal" Haskell
Damien
8

Pyth, 12 11 10 Bytes

eSsM/#0,Vt

Bildet Paare, filtert nach Nullelement, sortiert nach Summe und gibt den größten Wert zurück.

orlp
quelle
,Vt(implizit QQ) liefert die gleichen Paare wie .:Q2, jedoch mit umgedrehten Paaren. Sollte aber funktionieren.
PurkkaKoodari
f}0Tis/#0
isaacg
7

JavaScript (ES6), 59 57 56 Bytes

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

Edit: dank Huntro 2 Byte gespeichert
Edit: dank ETHproductions 1 Byte gespeichert

Arnauld
quelle
1
Sie können zwei Bytes speichern, indem Sie ==anstelle von===
Huntro
1
Ich kann ein paar Bytes an mehreren Stellen l=>l.map((n,i)=>m=l[i-1]*l[i+1]==0&n>m?n:m,m=-1/0)|m
speichern
Fehler: {"message": "Syntax error", " filename ": " stacksnippets.net/js ", "lineno": 15, "colno": 3}
RosLuP
@RosLuP - Dies erfordert ES6 mit Pfeilfunktionsunterstützung und funktioniert nicht in allen Browsern (einschließlich, aber nicht beschränkt auf: alle IE-Versionen vor Edge, alle Safari-Versionen unter v10 usw.)
Arnauld
6

JavaScript (ES6), 53 Byte

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

Weil ich gerne benutze reduce. Alternativlösung, auch 53 Bytes:

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

Python, 49 Bytes

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

Tests sind bei ideone

Zippt durch die Paare, summiert die Nullen und gibt das Maximum zurück.

Jonathan Allan
quelle
4

Ruby, 51 Bytes

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

Verwendung

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)]
cia_rana
quelle
Ich glaube nicht, dass Sie die Klammern brauchen a+b.
Martin Ender
@ Martin Ender Syntaxfehler auftritt ... ideone.com/F6Ed4B
cia_rana
Es funktioniert in Ruby 2.3. (verfügbar hier zum Beispiel: repl.it/languages/ruby )
Martin Ender
@Martin Ender Wenn ich "! =" Anstelle von "==" verwende, funktioniert es. Danke für deinen Rat! ideone.com/F6Ed4B
cia_rana
Es gibt einen Fehler :(. -3 -2 00...?0:......?-1.0/0:...
Kehrt
4

PHP, 77 68 71 Bytes

-3 Bytes von anonym, -4 und -2 von MartinEnder

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

renn mit php -r '<code>' '<space separated values>'

Titus
quelle
2
Die Verwendung von \K, um das Match zu verwerfen, ist bisher kürzer als die Verwendung eines Rückblicks.
user59178
2
Sie können auch eine Leerzeichen-Trennung für die Eingabe verwenden und dann verwenden \S+, um eine Ganzzahl mit Vorzeichen abzugleichen. Sie müssen wahrscheinlich verwenden, \b0,damit Sie das nicht voranstellen müssen ,.
Martin Ender
1
Funktioniert das für Eingaben wie 4 0 0 5?
Ton Hospel
@TonHospel Nein. Funktioniert \Knicht mit Alternativen? Aus unbekannten Gründen kehrt die zweite Alternative zurück 0 0, so dass 0vor dem keine Übereinstimmungen mehr vorhanden sind 5. Behoben, danke.
Titus
Werfen Sie einen Blick auf die andere PHP-Lösung mit register_globals
Jörg Hülsermann
4

Java 7, 118 105 106 Bytes

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 Bytes werden dank @cliffroot mithilfe eines arithmetischen Ansatzes eingespart . 1 zusätzliches Byte danke an @mrco, nachdem er einen Fehler entdeckt hatte (der hinzugefügte Testfall 2, 1, 0würde zurückkehren 2anstatt 1).

Ungolfed & Testcode:

Probieren Sie es hier aus.

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

Ausgabe:

7
9
-2
0
20
1
Kevin Cruijssen
quelle
1
etwas andere Herangehensweise mit Arithmetik, scheint zu funktionierenint 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
Die Ausgabe ist falsch, wenn die erste Zahl nicht neben 0 liegt, sondern größer als eine Zahl neben 0. Reproduzierbar durch den Testfall {2, 1, 0}. Sie können dies beheben, indem Sie i direkt mit 0 und m mit 1 << 31 (+1 insgesamt) initialisieren.
MrCo
3

CJam , 16 Bytes

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

Probieren Sie es online! (Als Testsuite.)

Erläuterung

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.
Martin Ender
quelle
3

MATLAB mit Image Processing Toolbox, 32 Byte

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

Dies ist eine anonyme Funktion. Anwendungsbeispiel für die Testfälle:

>> 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
Luis Mendo
quelle
3

Dyalog APL , 14 Bytes

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

⌈/ größte von

die Abgeflachten (" e nlisted")

2(... )/paarweise

+ Summe (Null plus etwas ist etwas)

↑⍨ genommen wenn

0 Null

ist ein Mitglied von

, das Paar (lit. die Verkettung der linken und der rechten Nummer)

TryAPL online!

Adam
quelle
3

R, 48 47 Bytes

BEARBEITEN: Ein Fehler wurde dank @Vlo behoben und so geändert, dass Eingaben aus stdins gelesen und ein Byte durch Zuweisen wund Überspringen von Klammern gespeichert wurden.

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]

Nicht verschachtelte Erklärung

  1. Finden Sie Indizes, für die der Vektor vdie Werte 0 annimmt:w <- which(v == 0)
  2. Erstellen Sie einen neuen Vektor, der die Indizes enthält +-1: w-1undw+1
  3. Extrahieren Sie Elemente, die mit den Indizes w-1und übereinstimmenw+1
  4. In absteigender Reihenfolge sortieren und erstes Element extrahieren

Beachten Sie, dass, wenn das letzte oder erste Element von veine Null ist, w+-1effektiv ein Index außerhalb der Länge des Vektors abgerufen wird, was impliziert, dass dieser v[length(v)+1]zurückgibt NA. Dies ist in der Regel kein Problem, aber die max()Funktionen geben unpraktisch zurück, NAwenn der Vektor vorkommt, es sei denn, Sie geben die Option an na.rm=T. So ist es 2 Bytes kürzer, das erste Element zu sortieren und zu extrahieren, als es zu verwenden ist max(), zB:

max(x,na.rm=T)
sort(x,T)[1]
Billywob
quelle
1
Benötigen Sie eine zusätzliche Klammer, sonst scheitern alle Testfälle, in denen max rechts von 0 ist, wie c(1, 4, 3, 6, 0, 10, 7, 0) c((w<-which(v==0))-1,w+1)auch ein bisschen kürzer mit Scansort((v<-scan())[c(w<-which(v==0)-1,w+1)],T)[1]
Vlo
@ Vlo Danke, dass du auf diesen offensichtlichen Fehler hingewiesen hast, +1. In deinem Lösungsvorschlag hast du das allerdings auch vergessen ();). Der Code wurde aktualisiert und vvor der Bearbeitung zugewiesen .
Billywob
3

Mathematica, 46 43 Bytes

3 Bytes aufgrund von @MartinEnder gespeichert .

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

Anonyme Funktion. Nimmt eine Liste von Ganzzahlen als Eingabe und gibt eine Ganzzahl als Ausgabe zurück. Basierend auf der Ruby-Lösung.

LegionMammal978
quelle
2

Perl, 42 Bytes

Beinhaltet +1 für -p

Geben Sie die Zahlen online auf 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
Tonne Hospel
quelle
2

Julia, 56 55 Bytes

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

Erstellen Sie Tupel für benachbarte Werte, nehmen Sie die Tupel mit 0, summieren Sie die Tupelwerte und finden Sie das Maximum

nyro_0
quelle
1

Python 2, 74 Bytes

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

Durchlaufen Sie jedes Element. Wenn sich 0links oder rechts vom aktuellen Element ein befindet, fügen Sie es in den Generator ein und führen Sie es durch max. Wir müssen die Liste mit einer Nicht- 0Nummer auffüllen . Es wird niemals enthalten sein, da das Slice [-1:2:2]nichts enthält.

SCB
quelle
1

T-SQL, 182 Bytes

Golf gespielt:

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 @

Geige

t-clausen.dk
quelle
1

PowerShell v3 +, 62 Byte

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

Ein bisschen länger als die anderen Antworten, aber ein geschickter Ansatz.

Übernimmt die Eingabe $n. Durchlaufen Sie dann die Indizes 0..$n.count, verwenden Sie das Where-Object( |?{...}), um die Indizes abzurufen, bei denen sich das vorherige oder nächste Element im Array befindet 0, und geben Sie diese zurück in den Array-Slice $n[...]. Wir dann |sortdiese Elemente und nehmen die größten [-1].

Beispiele

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
AdmBorkBork
quelle
1

q, 38 Bytes

{max x where 0 in'x,'(next x),'prev x}
Liam Baron
quelle
Dies scheint nicht zu funktionieren, wenn das Maximum nach einer 0 liegt . Außerdem bin ich kein Q-Experte, aber ich denke, Sie müssten Ihren Code mit einem Rahmen versehen {}, um eine Funktion daraus zu machen.
Dennis
1

J, 18 Bytes

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

Erläuterung

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

Perl 6 , 53 Bytes

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

Erweitert:

# 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
}
Brad Gilbert b2gills
quelle
1

PHP, 66 Bytes

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

Ziemlich einfach. Durchläuft die Eingabe, und wenn eine Zahl vorhanden ist 0, wird sie $mauf die höchste Zahl der 2 benachbarten Zahlen und auf den vorherigen Wert von gesetzt $m.

Laufen Sie wie folgt ( -dnur aus ästhetischen Gründen hinzugefügt):

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
aross
quelle
1

C # 76 74 Bytes

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

Erläuterung:

Verwenden Sie zip, um das Array mit sich selbst zu verbinden, aber überspringen Sie den ersten Wert in der zweiten Referenz, sodass Element Null mit Element Eins verbunden wird. Multiplizieren Sie a mit b. Wenn das Ergebnis Null ist, muss einer von ihnen Null sein und a + b ausgeben. Andernfalls geben Sie die minimal mögliche Ganzzahl in der Sprache aus. Unter der Annahme, dass wir immer eine Null und eine Nicht-Null haben, wird dieser Minimalwert niemals als der Maximalwert ausgegeben.

Verwendung:

[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 }));
}
Grax32
quelle
Hallo. Sie können das Leerzeichen bei entfernen int[]i) {. Außerdem zähle ich 75 Bytes in Ihrem aktuellen Code (74, wenn Sie das Leerzeichen entfernen).
Kevin Cruijssen
Ich denke, Sie können 4 Bytes sparen, indem Sie die Ternaries invertieren:a?b?i.Min()).Max():a:b
Titus
Plus using System.Linq;, nein?
Pinkfloydx33
Richtig, aber diese Frage wurde nur nach einer Methode gestellt, nicht nach einem vollständigen Programm. Die Verwendung System.Linq;ist Teil der neuen Standardklassenvorlage.
Grax32,
@Grax So oder so müssen Sie die usingAnweisung in Ihre
Byteanzahl aufnehmen
1

R, 48 54 Bytes

s=scan()

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

Liest den Vektor von der Konsoleneingabe und nimmt dann das Maximum über alle Werte neben 0 an.

Edit: Fängt NAs ab, die an der Grenze produziert wurden, danke rturnbull!

Head-Crash
quelle
Mache ich es falsch? pastebin.com/0AA11xcw
Manatwork
Dies nicht für Fälle wie 20 0, weil s[w(s==0)+1]Renditen NA, und maxist der Standard - Behandlung NAist es zurückzukehren. Sie können das Problem beheben, indem Sie das Argument hinzufügen na.rm=Toder den zu verwendenden Code überarbeiten sort(siehe die andere R-Antwort oben).
Rturnbull
Können Sie alles in einer Zeile zusammenfassen? Ich weiß nicht, wie man R codiert, aber ich gehe davon aus, dass Sie es können.
Clismique
@ Qwerp-Derp: Soweit ich weiß nicht. scan () wartet darauf, dass die Konsoleneingabe den Vektor einliest, der Eingabestream wird durch Eingabe einer leeren Zeile geschlossen. Wenn Sie die beiden Zeilen als eine Zeile ausführen, wird der zweite Teil zumindest teilweise als Eingabe für den Vektor s erkannt.
Headcrash
0

Schläger 183 Bytes

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

Ausführliche Version:

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

Testen:

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

Ausgabe:

7
9
-2
0
20
rnso
quelle
0

C 132 Bytes

Ausgaben mit dem Rückkehrcode von 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;}

Ich habe das Gefühl, dass ich in der Lage sein sollte, ein paar Bytes zu sparen, indem ich einen der atoi-Aufrufe speichere, aber ich konnte keinen effizienten Weg finden. ( ,tplus t=plus ,plus tzweimal ist zu lang). Auch dies verwendet technisch undefiniertes Verhalten (Setzen von _ [a] auf "1"), aber jeder mir bekannte Compiler erlaubt es standardmäßig.

Strategie: Füllen Sie den Anfang und das Ende des Arrays mit 1 auf und durchlaufen Sie dann den internen Abschnitt, um jeden Nachbarn zu überprüfen.

LambdaBeta
quelle
0

PHP 69 64 Bytes

Einige Bytes von Jörg Hülsermann und Titus. =(-5)

Erfordert die Aktivierung von register_globals. Verwendung: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;

Golf gespielt:

$x=$_GET['i'];$y=0;foreach($x as $j)if($y<abs($j))$y=$j;echo $y;
Roman Gräf
quelle
Warum nicht direkt die Eingabe als Array verwenden. Ich konnte den Grund für json_encode nicht erkennen.
Jörg Hülsermann
Für nicht standardmäßige Einstellungen müssen Sie die gesamte Länge der Einstellungsänderung zu Ihrer Byteanzahl hinzufügen. (siehe meta.codegolf.stackexchange.com/q/4778#4778 ) In diesem Fall +21 Bytes für -d register_globals=1(oder geben Sie eine Version an, in der register_globals standardmäßig aktiviert ist)
Titus
Ist json_decodeaber eine nette Idee.
Titus
@Titus Was ich meine ist ?id[]=1&id[]=2&id[]=3 und $_GET["id"]gibt dann ein Array zurück. Aus diesem Grund macht json_decode für mich keinen Sinn
Jörg Hülsermann
@ JörgHülsermann Es kostet Bytes, ist aber trotzdem eine schöne Idee.
Titus