Finden Sie die größte Anzahl n Positionen von n entfernt

29

Eine Fortsetzung dieser Frage .

Aufgabe

Bestimmen Sie bei einer Reihe positiver Ganzzahlen das größte Element k, für das:

Es existiert ein positiver ganzzahliger Abstand n , so dass das Element in dem Array, das sich n-  mal links oder rechts von k befindet, gleich n ist .

Es wird garantiert, dass das Array mindestens ein Element enthält, das diese Bedingung erfüllt.

Der kürzeste Code (in Bytes) gewinnt. Sie können das gewünschte E / A-Format auswählen.

Beispiel

Angesichts der Eingabe

[4, 6, 7, 9, 3, 6, 5, 7, 2]

Die zulässigen Werte sind:

  • Die 4, da es eine 77 Positionen auf der rechten Seite befindet
  • Das erste 6, da es 33 Positionen auf der rechten Seite gibt
  • Die 3, da es eine 44 Positionen auf der linken Seite befindet
  • Die 5, da es eine 22 Positionen auf der rechten Seite befindet
  • Das zweite 7, da es 33 Positionen zu seiner Linken gibt.

Der größte dieser Werte ist 7.

Testfälle

[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Lynn
quelle
Zwei weitere (wenn auch leicht überflüssige) Fälle innerhalb des Beispiels: die ersten 6 (wieder), da rechts davon 5 fünf Stellen sind; oder die zweite 7 (wieder), da es noch 6 sechs Positionen vor ihm gibt.
Jonathan Allan
1. Auf meinem Telefon scheint der Titel "Finde die größte Anzahl von Positionen entfernt von einer" zu sein. 2. Die angegebene Bedingung ist, dass es k solcher Art gibt (eine Eigenschaft, die nicht von k abhängt). Es muss sicher falsch sein.
Peter Taylor
@PeterTaylor "this" in "this element" bezieht sich auf k.
Taemyr
1
@Taemyr, das macht aus zwei Gründen keinen Sinn: Erstens, weil k kein Element ist; und zweitens, weil wir aufgefordert werden, " das größte Element zu finden, das die Bedingung erfüllt ", hat " dieses Element " einen Vorläufer außerhalb der Bedingung.
Peter Taylor
2
Vielleicht könnten Sie jede Verwirrung vermeiden, indem Sie sagen "finde das größte Element k so" und dann k anstelle dieses Elements in der Definition verwenden?
Martin Ender

Antworten:

3

Gelee , 9 Bytes

Jạþ`=ḅa¹Ṁ

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

Wie es funktioniert

Jạþ`=ḅa¹Ṁ  Main link. Argument: A (array)

J          Indices; yield [1, ..., len(A)].
   `       Use the previous return value as left and right argument:
 ạþ        Absolute difference table; take the absolute value of the difference
           of each pair of indices, yielding a 2D array.
    =      Compare each absolute difference with the corresponding item of A.
     ḅ     Base; convert each Boolean list from base i to integer, where i is the
           corresponding item of A. The value of i is not important; we only care
           if the list contains a 1, which will result in a non-zero integer.
       ¹   Identity; yield A.
      a    Logical AND; replace non-zero values with the corresponding items of A.
        Ṁ  Take the maximum.
Dennis
quelle
1
Hmm, ich bin mir nicht sicher, wie die Richtlinie lautet, aber Sie haben jetzt zwei unterschiedliche Ansätze in getrennten Antworten, und zwar in derselben Programmiersprache vom selben Benutzer. Wäre es nicht ratsamer, sowohl 9- als auch 10-Byte-Snippets in dieselbe Antwort zu setzen, da es sich um dieselbe Programmiersprache handelt und beide von Ihnen? Ich kann mehrere Antworten in derselben Programmiersprache von mehreren Benutzern verstehen, aber ich persönlich denke, dass verschiedene Ansätze desselben Benutzers in derselben Programmiersprache besser für Bearbeitungen geeignet sind. Nur meine Meinung.
Kevin Cruijssen
5
Das war meine erste Meta-Frage und der Konsens schien zu sein, dass unterschiedliche Ansätze in unterschiedlichen Antworten gepostet werden sollten. In diesem Fall haben meine Ansätze am Ende nur das Maximum gemeinsam, weshalb ich mich für einen separaten Beitrag entschieden habe.
Dennis
8

05AB1E , 21 Bytes

vyN+Ny-})¹gL<Ãv¹yè})Z

Erläuterung

v      }               # for each num in input
 yN+                   # push index + num
    Ny-                # push index - num
        )              # wrap stack in a list
         ¹gL<Ã         # remove indices outside the range of input
              v¹yè})   # get list of elements in input at the remaining indices
                    Z  # get max

Probieren Sie es online!

Emigna
quelle
Sie verwenden es wahrscheinlich die ganze Zeit, aber ich habe gerade erst bemerkt, dass "Stapel in eine Liste einschließen". Ordentlich.
GreenAsJade
@ GreenAsJade: Ja, es ist einer der Befehle, die ich am häufigsten
benutze
7

Haskell, 61 57 55 Bytes

f x=maximum[a|(n,a)<-x,(i,b)<-x,b==abs(n-i)]
f.zip[0..]

Anwendungsbeispiel: (f.zip[0..]) [5,28,14,5,6,3,4,7] -> 14.

(Mehr oder weniger) eine direkte Implementierung der Definition: Für jeden Index nder Eingabeliste xbehalten Sie a := x!!nbei , ob es einen Index gibt, iin demb := x!!i equals abs(n-i). Finde das Maximum.

Edit: @xnor speicherte zwei Bytes. Vielen Dank!

nimi
quelle
Da Sie nicht verwenden x, sollte es kürzer sein, eine Funktion in zu definieren zund in zu komponieren zip[0..].
22.
6

Gelee , 10 Bytes

,N+JFfJị¹Ṁ

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

Wie es funktioniert

,N+JFfJị¹Ṁ  Main link. Argument: A (array)

,N          Pair A with -A (element-wise negative).
   J        Yield the indices of A [1, ..., len(A)].
  +         Add the elements of A (and their negatives) with the corr. indices.
    F       Flatten the resulting 2D array.
     fJ     Filter indices; remove invalid indices (not in [1, ..., len(A)]) from
            the generated array. The result is the list of all indices of eligible
            elements of A.
       ị¹   Retrieve the corresponding elements of A.
         Ṁ  Take the maximum.
Dennis
quelle
5

Python 3, 85 80 72 Bytes

lambda l,e=enumerate:max(i for p,i in e(l)for s,j in e(l)if j==abs(s-p))

Edit: -8 Bytes dank @Dennis

Elvorfirilmathredia
quelle
5

EXCEL: 32 bis 30 Bytes

=MAX(IF(A:A-ROW(A:A)<0,A:A,0))

Ich kann immer noch nicht glauben, dass ich es so kurz habe ...

So verwenden Sie es:
Fügen Sie es in JEDE Zelle ein, AUSSER in die Zellen von Spalte A. Drücken Sie nach dem Einfügen während der Bearbeitung control+ shift+ enter, um es korrekt einzugeben.
Tragen Sie Ihre Werte in Spalte A ein, 1 Wert pro Zelle (gemäß CSV-Eintrag).

Wenn Sie herausfinden möchten, wie das funktioniert, habe ich in meinen Tipps zum Golfen in Excel einen zusätzlichen Tipp hinterlegt .

Gemeinschaft
quelle
Ich liebe diese hervorragenden Golfplätze - wer hätte das gedacht !!
GreenAsJade
4

JavaScript (ES6), 61 Byte

a=>Math.max(...a.filter((_,i)=>a.some((e,j)=>e==i-j|e==j-i)))
Neil
quelle
4

Perl, 45 Bytes

Beinhaltet +2 für -ap

Geben Sie Zahlen in einer Zeile auf STDIN ein:

largest.pl <<< "5 12 2 5 4 7 3 3 6 2 10 5 5 5 4 1 8 5"

largest.pl:

#!/usr/bin/perl -ap
($_)=sort{$b-$a}map@F[$^P=$n-$_,$n+++$_],@F

Ein weiteres Byte kann durch Ersetzen gewonnen werden ^P durch das Literal-Steuerzeichen gewonnen werden. Dies führt jedoch zu einer Warnung bei STDERR für aktuelle Perls.

Geht davon aus largest number + array length < 2^32

Tonne Hospel
quelle
3

Pyth, 19 17 Bytes

Vielen Dank an @ Pietu1998 für -2 Bytes

eS@[email protected],-kb+b

Ein Programm, das eine Liste in STDIN eingibt und das Ergebnis druckt.

Probieren Sie es online aus

Wie es funktioniert

eS@[email protected],-kb+b  Program. Input: Q
         .e        Map over Q (implicit input fill) with elements as b and indices as k:
            -kb     k-b
               +b   k+b (Implicit fill with k)
           ,        2-element list of those (possible indices)
        s          Flatten that
      UQ           Yield [0, 1, 2, 3..., len(Q)-1]
     @             Filter the flattened list by presence in the above, removing invalid
                   indices
  @LQ              Index into Q at those indices
 S                 Sort that
e                  Yield the last element of that, giving the maximum
                   Implicitly print
TheBikingViking
quelle
}#ist das gleiche wie @. Wenn Sie das letzte Bit neu anordnen, können Sie auch das letzte Bit ,-kb+bkentfernen, kseit es von Pyth automatisch eingefügt wurde.
PurkkaKoodari
@ Pietu1998 Danke. Ich wusste nichts über die implizite Füllung für Aufzählung; funktioniert das für irgendwelche anderen kartentypen funktionen?
TheBikingViking
Funktioniert für jedes Lambda und füllt den Rest jedes Lambdas automatisch mit der ersten Lambda-Variablen.
PurkkaKoodari
3

MATL, 13 Bytes

ttn:tYTq=a)X>

Die Eingabe muss ein Spaltenvektor sein. Das heißt, die Eingabe erfolgt wie bei [1; 2; 3] durch Semikolons oder wie bei [1,2,3] durch ein Transponierungs-Häkchen am Ende durch Kommas getrennt.

Probieren Sie es online!

Alle Testfälle: (A) , (B) , (C) , (D) , (E) , (F)

Vielen Dank an Suever für Vorschläge im MATL-Chatroom , um 2 Zeichen zu speichern.

Erläuterung:

Die Gesamtstrategie entspricht meiner Octave / MATLAB-Antwort, in der das Grundkonzept erklärt wird: https://codegolf.stackexchange.com/a/94161/42247

Der spezifische Code in dieser MATL-Antwort setzt sich wie folgt zusammen:

Der Kern der Methode ist die Konstruktion der Toeplitz-Matrix, deren ij'ter Eintrag abs (ij) ist. Wir konstruieren zunächst die Toeplitz-Matrix mit den Einträgen abs (i-1) +1 mit dem Toeplitz-Befehl YT von MATL wie folgt:

n:tYT % Equivalent to @(v)toeplitz(1:length(v))

Um zu sehen, wie dies funktioniert, rufen wir den Eingabevektor für diesen Codeausschnitt 'v' auf. Das 'n' findet die Länge von v, dann ':' konstruiert den Vektor 1: Länge (v). Als nächstes macht das 't' eine weitere Kopie von 1: Länge (v) auf dem Stapel; Diese zusätzliche Kopie wird aufgrund eines bekannten Fehlers in der YT-Funktion in MATL (dem MATL-Äquivalent von toeplitz ()) benötigt, bei dem zwei Kopien der Eingabe anstelle von 1 erwartet werden. Dann nimmt YT die zwei Kopien dieses Vektors 1 : Länge (v) vom Stapel und ergibt daraus die abs (ij) +1 Toeplitz-Matrix.

Jetzt müssen wir 1 von dieser Matrix subtrahieren, um die Toeplitz-Matrix mit den Einträgen abs (ij) zu erhalten, und die ij-Positionen finden, an denen diese abs (ij) Toeplitz-Matrix gleich der Matrix aller Spaltenvektoren ist, die Spaltenkopien der Eingabe enthalten Vektor v. Dies geschieht wie folgt:

t n:tYT q=
% t [code] q= is equivalent to @(v) [code](v)-1 == v

Das erste 't' erstellt eine zusätzliche Kopie der Eingabe und speichert diese im Stapel. Das 'n: tYT' erzeugt die Toeplitz-Matrix wie oben beschrieben und gibt sie in den Stapel aus. Dann subtrahiert 'q' 1 von der Toeplitz-Matrix und '=' führt den Vergleich der Elementgleichheit zwischen der abs (ij) -Matrix und dem Vektor durch, dessen Spalten Kopien der Eingabe sind. Beachten Sie, dass wir durch den Vergleich eines Spaltenvektors mit einer Matrix implizit die Broadcast-Regeln von MATLAB / MATL nutzen (der Spaltenvektor im Vergleich wird kopiert, um eine Matrix zu erstellen, ohne Befehle auszugeben).

Schließlich müssen wir die Zeilenindizes i finden, wo es eine Spalte j gibt, so dass der ij-te Eintrag in der oben konstruierten Matrixdifferenz gleich 1 ist, dann den Wert des Eingangsvektors erhalten, der diesen Indizes entspricht, und dann das Maximum nehmen. Dies geschieht in den folgenden drei Schritten:

1) Finden Sie die Indizes für jede Zeile, die eine Nicht-Null enthält:

tn:tYTq= a
% [code] a is equivalent to @(v) any([code](v))

2) Extrahieren Sie die Elemente des Eingabevektors, die diesen Indizes entsprechen:

t tn:tYTq= a ) X>
% t [code] ) is equivalent to @(v) v([code](v)]

3) Finde das maximale Element und gib es zurück:

t tn:tYTq= a ) X>
% [code] X> is equivalent to @(v) max(v).
Nick Alger
quelle
Das Funktionsverhalten YThat sich in Release 20.2.2 geändert . Jetzt wird standardmäßig 1 Eingabe verwendet (was im Allgemeinen nützlicher ist). Das erspart Ihnen hier zwar 1 Byte ( tvorher entfernen YT), kann aber nicht ausgenutzt werden, da die Änderung der Sprache die Herausforderung nachholt. Dies hat jedoch zur Folge, dass Ihre Antwort in der neuen Version, die jetzt in TIO
Luis Mendo
Sie können entweder den verknüpften Code bearbeiten und eine Notiz hinterlassen oder diesen Link zum MATL Online-Interpreter verwenden, der ältere Versionen unterstützt. Leider müssen Sie auch die anderen Links aktualisieren. Entschuldigen Sie die Unannehmlichkeiten
Luis Mendo
Unabhängig davon können Sie 1 Byte einsparen, indem Sie n:durchf
Luis Mendo
2

Ruby, 66 Bytes

->a{i=-1;a.map{|e|i+=1;[a[j=i+e]||0,a[0>(k=i-e)?j:k]||0].max}.max}
cia_rana
quelle
2

Oktave / MATLAB, 40 Bytes

@(v)max(v(any(toeplitz(1:nnz(v))-v==1)))

Die Eingabe muss ein Spaltenvektor sein.

Danke an Luis Mendo für die Vorschläge, 3 Bytes zu sparen (siehe Kommentar)

Vielen Dank an Suever für die Vorschläge zum Speichern von 4 weiteren Bytes (Ersetzen von ~~ (sum ()) durch any ())

Erläuterung:

Bei gegebenem Eingangsvektor v ist dieses Problem gleichbedeutend mit dem Finden aller Lösungen i, j der folgenden diskreten Gleichung:

abs(i-j) = v(i),   i,j both in 1..k,

Dabei ist abs () die Absolutwertfunktion. Jedes v (i), für das diese Gleichung gelöst ist, ist eine der Kandidatenlösungen, über die wir maximieren können.

Als diskrete Funktion von i und j können alle Möglichkeiten für die linke Seite in der Toeplitz-Matrix angeordnet werden, die ungefähr so ​​aussieht:

[0, 1, 2, 3, 4]
[1, 0, 1, 2, 3]
[2, 1, 0, 1, 2]    <--- abs(i-j)
[3, 2, 1, 0, 1]
[4, 3, 2, 1, 0]

Und da die rechte Seite nicht von i abhängt, können alle Möglichkeiten in einer Matrix angeordnet werden, in der die Spalten alle Kopien der Eingabe sind.

[v(1), v(1), v(1), v(1), v(1)]
[v(2), v(2), v(2), v(2), v(2)]
[v(3), v(3), v(3), v(3), v(3)]   <--- v(i)
[v(4), v(4), v(4), v(4), v(4)]
[v(5), v(5), v(5), v(5), v(5)]

Um alle Lösungen für die Gleichung zu finden, subtrahieren wir diese beiden Matrizen und suchen die Stellen, an denen es eine Null gibt. Die Zeilen, in denen es eine Null gibt, entsprechen den gewünschten Indizes i, in denen es aj gibt, so dass abs (ij) = v (i).

Andere Tricks:

  • Es sind weniger Zeichen erforderlich, um die Absolutwertfunktion plus eins, abs (ij) +1, zu konstruieren, und dann nach Stellen zu suchen, an denen die Differenz 1 beträgt, anstatt die wahre (nicht verschobene) Absolutwertfunktion zu konstruieren.
  • Verwendet die automatische Operatorübertragung, um implizit Spaltenkopien von v zu erstellen
  • Ruft die Länge der Eingabe über nnz () anstelle von length () ab, was funktioniert, da die Eingaben in der problem-Anweisung als positiv bezeichnet werden.
Nick Alger
quelle
Das Eingabeformat ist standardmäßig flexibel. Sie können vals Spaltenvektor nur das in der Antwort angeben. Außerdem ersetzen Sie finddurch ~~, um zwei weitere Bytes zu sparen
Luis Mendo
@ LuisMendo Danke, ich habe den Beitrag bearbeitet, um Ihre Vorschläge zu berücksichtigen!
Nick Alger
Für verschiedene Sprachen (oder einen signifikant unterschiedlichen Ansatz in derselben Sprache) sollten Sie eine andere Antwort posten . Es gibt einen MATL-Chatroom, falls Sie Fragen zur Sprache haben
Luis Mendo
Übrigens, aufgrund eines Fehlers in MATLs toeplitz(YT ) werden standardmäßig zwei Eingänge (nicht einer) verwendet
Luis Mendo
OK Cool. Ich habe es in MATL übersetzt und hier eine andere Antwort gepostet: codegolf.stackexchange.com/a/94183/42247
Nick Alger
1

Mathematica, 69 Bytes

Max@MapIndexed[{If[#2[[1]]>#,a[[#2-#]],{}],a[[#2+#]]~Check~{}}&,a=#]&

Anonyme Funktion. Nimmt eine Liste von Ganzzahlen als Eingabe und gibt eine Ganzzahl als Ausgabe zurück. Ignorieren Sie alle generierten Nachrichten.

LegionMammal978
quelle
1

Scala, 94 Bytes

a=>a.zipWithIndex.filter(p=>a.zipWithIndex.exists(x=>x._1==Math.abs(p._2-x._2))).unzip._1.max
sprague44
quelle
1

PHP, 128 Bytes

<?foreach(($i=$_GET[i])as$k=>$v){$k-$v<0?:!($i[$k-$v]>$m)?:$m=$i[$k-$v];if($k+$v<count($i))if($i[$k+$v]>$m)$m=$i[$k+$v];}echo$m;
Jörg Hülsermann
quelle
1

Java 7, 125 123 Bytes

int c(int[]a){int r=0,i=0,l=a.length,x;for(;i<l;r=l>(x=i+a[i])?a[x]>r?a[x]:r:r,r=(x=i-a[i++])>0?a[x]>r?a[x]:r:r);return r;}

2 Bytes gespart dank @mrco .

Ungolfed & Testcode:

Probieren Sie es hier aus.

class M{
  static int c(int[] a){
    int r = 0,
        i = 0,
        l = a.length,
        x;
    for(; i < l; r = l > (x = i + a[i])
                      ? a[x] > r
                         ? a[x]
                         : r
                      : r,
                 r = (x = i - a[i++]) > 0
                      ? a[x] > r
                         ? a[x]
                         : r
                      : r);
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1, 13 }));
    System.out.println(c(new int[]{ 2, 9, 8, 3, 72, 2 }));
    System.out.println(c(new int[]{ 5, 28, 14, 5, 6, 3, 4, 7 }));
    System.out.println(c(new int[]{ 1, 3, 5, 15, 4, 1, 2, 6, 7, 7 }));
    System.out.println(c(new int[]{ 5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3 }));
    System.out.println(c(new int[]{ 5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5 }));
  }
}

Ausgabe:

13
8
14
7
5
10
Kevin Cruijssen
quelle
1
Du brauchst kein x & y. Verwenden Sie einfach einen von ihnen (-2). Ich glaube auch nicht, dass man r in einen riesigen Dreiklang setzen kann - wenn man immer beide Fälle testen muss, links und rechts.
MrCo
1
@ Mrco Danke, entfernte die ,y. Und ich bin in der Tat zu dem gleichen Schluss in Bezug auf das einzelne ternäre if gekommen. Natürlich ist es möglich, aber Sie werden die Prüfung zweimal durchführen, um sie viel länger zu machen.
Kevin Cruijssen
1

Java, 118 Bytes

int f(int[]a){int t=0,i,j,z=0,l=a.length;while(t<l*l){i=t/l;j=t++%l;z=a[i]>z&&((i<j?j-i:i-j)==a[j])?a[i]:z;}return z;}
Ekeko
quelle
Willkommen bei PPCG! :)
Martin Ender
1

Python, 58 Bytes

Basierend auf Tony S. Ruby Antwort . Diese Antwort funktioniert in Python 2 und 3. Golfvorschläge sind willkommen.

lambda n:max([n[i+v]for i,v in enumerate(n)if i+v<len(n)])

Ungolfing

def f(array):
    result = []
    for index, value in enumerate(array):
        if index + value < len(array):
            result.append(array[index + value])
    return max(result)
Sherlock9
quelle
1

Ruby 56 Bytes

Meine kleinste Rubinlösung.

->n{x=[];i=0;n.map{|v|x<<n[v+i]&&v+i<n.size;i+=1};x.max}

Ziemlich einfach in Schienen Konsole zu testen

a = ->n{x=[];i=0;n.map{|v|x<<n[v+i]&&v+i<n.size;i+=1};x.max}
a[[1, 13]
=> 13
a[[2, 9, 8, 3, 72, 2]]
=> 8
a[[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5]]
=> 10

Dies begann bei 63 Bytes, danke für die Vorschläge, die helfen, es zu verkleinern!

Tony S.
quelle
Sie können .mapanstelle von.each
Cyoce
auch (x) if (y)mit ersetzt werden(y)&&(x)
Cyoce
Sie können a<<banstelle vona+=[b]
Sherlock9
@ Sherlock9 habe ich vergessen <<. Die Verwendung von a + = [b] funktionierte nicht mit Cyoces Vorschlag, && zu verwenden. Jetzt schon, danke!
Tony S.
1

Tatsächlich 17 Bytes

Diese Antwort ist eine aktuelle Portierung meiner Python-Antwort . Golfvorschläge sind willkommen. Probieren Sie es online!

;╗ñ♂Σ⌠╜l>⌡░⌠╜E⌡MM

Ungolfing

         Implicit input L.
;╗       Duplicate L and save a copy of L to register 0.
ñ        enumerate() the other copy of L.
♂Σ       sum() all the pairs of [index, value of n]. Call this list Z.
⌠...⌡░   Push values of Z where the following function returns a truthy value. Variable v_i.
  ╜        Push L from register 0.
  l        Push len(L).
  >        Check if len(L) > v_i.
⌠...⌡M   Map the following function over Z_filtered. Variable i.
  ╜        Push L from register 0.
  E        Take the ith index of L.
M        max() the result of the map.
         Implicit return.
Sherlock9
quelle
0

T-SQL (SQL Server 2016), 132 Byte

Golf gespielt:

;WITH C as(SELECT value*1v,row_number()over(order by 1/0)n FROM STRING_SPLIT(@,','))SELECT max(c.v)FROM C,C D WHERE abs(D.n-C.n)=D.v

Ungolfed:

DECLARE @ varchar(max)='2, 9, 8, 3, 72, 2'

;WITH C as
(
  SELECT
    value*1v,
    row_number()over(order by 1/0)n
  FROM
    STRING_SPLIT(@,',')
)
SELECT
  max(c.v)
FROM
  C,C D
WHERE
  abs(D.n-C.n)=D.v

Geige

t-clausen.dk
quelle
0

JavaScript (ES6), 56 54 Bytes

let f =
    
l=>l.map((n,i)=>m=Math.max(m,l[i+n]|0,l[i-n]|0),m=0)|m

console.log(f([1, 13])); // → 13
console.log(f([2, 9, 8, 3, 72, 2])); // → 8
console.log(f([5, 28, 14, 5, 6, 3, 4, 7])); // → 14
console.log(f([1, 3, 5, 15, 4, 1, 2, 6, 7, 7])); // → 7
console.log(f([5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3])); // → 5
console.log(f([5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5])); // → 10

Arnauld
quelle
0

Clojure, 68 Bytes

#(apply max(map(fn[i](get % i 0))(flatten(map-indexed(juxt - +)%))))

Beispiel: (map-indexed (juxt - +) [3 4 1 2])Ist ([-3 3] [-3 5] [1 3] [1 5])(Index +/-seines Werts), werden diese verwendet, um Werte aus dem ursprünglichen Vektor nachzuschlagen (Standardwert für außerhalb des Bereichs ist 0), und der Maximalwert wird gefunden. Fühlt sich immer noch ein bisschen wortreich an, aber ich muss es zumindest benutzen juxt:)

NikoNyrh
quelle