Die Aufgabe
Bei einem beliebigen Array von Ganzzahlen, zB:
[-1,476,578,27,0,1,-1,1,2]
und einen Index dieses Arrays (in diesem Beispiel wird eine auf 0 basierende Indizierung verwendet , obwohl Sie auch eine auf 1 basierende Indizierung verwenden können .):
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
Geben Sie dann die nächste Zahl zurück, die größer als das Element an diesem Index ist . In diesem Beispiel ist die nächstgelegene Zahl größer als 1 27 (bei 2 Indizes).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
^
Nearest greater number
Output = 27
Annahmen
- Nearest beinhaltet keine Verpackung.
- Das Programm erhält niemals ein Array der Länge 1 (zB;
[55]
). - Es ist anzunehmen, dass es immer eine Zahl gibt, die größer als das angegebene Element ist.
- Wenn zwei Zahlen in gleichen Abständen größer als das Element sind, können Sie eine der beiden zurückgeben .
E / A-Paare
Input:
Index = 45
Array = [69, 43, 89, 93, 62, 25, 4, 11, 115, 87, 174, 60, 84, 58, 28, 67, 71, 157, 47, 8, 33, 192, 187, 87, 175, 32, 135, 25, 137, 92, 183, 151, 147, 7, 133, 7, 41, 12, 96, 147, 9, 134, 197, 3, 107, 164, 90, 199, 21, 71, 77, 62, 190, 122, 33, 127, 185, 58, 92, 106, 26, 24, 56, 79, 71, 24, 24, 114, 17, 84, 121, 188, 6, 177, 114, 159, 159, 102, 50, 136, 47, 32, 1, 199, 74, 141, 125, 23, 118, 9, 12, 100, 94, 166, 12, 9, 179, 147, 149, 178, 90, 71, 141, 49, 74, 100, 199, 160, 120, 14, 195, 112, 176, 164, 68, 88, 108, 72, 124, 173, 155, 146, 193, 30, 2, 186, 102, 45, 147, 99, 178, 84, 83, 93, 153, 11, 171, 186, 157, 32, 90, 57, 181, 5, 157, 106, 20, 5, 194, 130, 100, 97, 3, 87, 116, 57, 125, 157, 190, 83, 148, 90, 44, 156, 167, 131, 100, 58, 139, 183, 53, 91, 151, 65, 121, 61, 40, 80, 40, 68, 73, 20, 135, 197, 124, 190, 108, 66, 21, 27, 147, 118, 192, 29, 193, 27, 155, 93, 33, 129]
Output = 199
Input:
Index = 2
Array = [4,-2,1,-3,5]
Output = 4 OR 5
Input:
Index = 0
Array = [2124, -173, -155, 146, 193, -30, 2, 186, 102, 4545]
Output = 4545
Input:
Index = 0
Array = [1,0,2,3]
Output = 2
Input:
Index = 2
Array = [3,-1,-3,-2,5]
Output = -1 OR -2
code-golf
array-manipulation
integer
Graviton
quelle
quelle
1; [7,1,-4,2]
2; [3,-1,-3,-2,5]
das ein schöner Testfall. Es gibt positive Zahlen, aber das Ergebnis ist negativ.Antworten:
MATL , 10 Bytes
Dies verwendet eine 1-basierte Indizierung. Probieren Sie es online!
Erläuterung
Betrachten Eingänge
[4,-2,1,-3,5]
,3
als Beispiel.quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
Jelly ,
1112 Bytes+1 Byte - Kein Umbruch erlaubt.
1-indiziert.
Probieren Sie es online!
Vorherige 11 Bytes (Indexierung umbrechen), 0-indexiert:
quelle
0
[1,0,2,3]
.3
, das ist 1 weg, ähm, yeah "am nächsten" ist nicht definiert ...JavaScript (ES6),
57ByteÜbernimmt das Array
a
und den Indexi
in der aktuellen Syntax(a)(i)
.Testfälle
Code-Snippet anzeigen
quelle
|
statt verwenden||
?x
nicht überschrieben werden, wenn die erste Bedingung erfüllt ist.PHP, 106 Bytes
Online Version
quelle
Haskell , 48 Bytes
Probieren Sie es online! Test Framework von Ørjan Johansen.
quelle
!!1
stattdessen (ändern Sie einfachInteger
inInt
in der Kopfzeile).x86-64-Assembly, 40 Byte
Inspiriert von der Analyse der C-Lösungen von Johan du Toit und 2501 ist das Folgende eine Funktion, die mit MASM für x86-64-Plattformen zusammengestellt werden kann.
Es folgt der Microsoft x64-Aufrufkonvention zum Übergeben von Parametern, sodass die Gesamtlänge des Arrays übergeben wird
ECX
, die interessierende Position übergebenEDX
wird und der Zeiger auf das Ganzzahl-Array übergeben wirdR8
(es ist also eine 64-Bit-Plattform) ein 64-Bit-Zeiger).Es gibt das Ergebnis (die "nächstgrößere Zahl") in zurück
EAX
.Wenn Sie es aus C-Code aufrufen möchten, wäre der Prototyp:
quelle
Ruby , 64 Bytes
Probieren Sie es online!
quelle
Ohm , 20 Bytes
Grundsätzlich eine Übersetzung dieser Ruby-Antwort .
Probieren Sie es online!
Erklärung wird später kommen, wenn ich keine Hausaufgaben mache.
quelle
Haskell , 53 Bytes
(#)
Nimmt eineInt
und eine Liste vonInt
s oderInteger
s (tatsächlich jederOrd
Typ) und gibt ein Element der Liste zurück.Wie es funktioniert
n
ist der angegebene Index undl
ist die angegebene Liste / "Array".i
Mit Werten ab 1 wird der Abstand zumn
aktuell getesteten Wert angegeben .i
prüfen wir Indizesn-i
undn+i
.x
ist das Element vonl
getestet zu werden. Wenn es die Tests besteht, ist es ein Element des resultierenden Listenverständnisses.!!
kann zu einem Fehler außerhalb der Grenzen führen, währenddrop
in diesem Fall entweder die gesamte Liste oder eine leere Liste zurückgegeben wird. Die Musterübereinstimmung mitx:_
prüft, ob das Ergebnis nicht leer ist.x>l!!n
testet, ob unser Element größer ist als das Element am Indexn
(dessen Existenz garantiert ist).!!0
Am Ende wird die erste Übereinstimmung / das erste Element des Listenverständnisses zurückgegeben.Probieren Sie es online!
quelle
Python , 62 Bytes
Probieren Sie es online!
quelle
Brachylog , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java (OpenJDK 8) , 98 Byte
Probieren Sie es online!
Überprüft die Indizes in der Reihenfolge, die durch die Teilsummen der folgenden Summe angegeben wird:
quelle
s=1,
und,s=-s
in Ihrer Antwort keinen Sinn. Haben Sie vergessen, es aus einem alten Ansatz zu entfernen?C 69 Bytes
Das erste Argument ist ein In / Out-Argument. Die Ausgabe wird in ihrem ersten Element gespeichert.
Sehen Sie , wie es online funktioniert .
quelle
R, 59 Bytes
Gibt eine anonyme Funktion zurück. Falls zwei Elemente in gleichen Abständen größer sind, wird der erste zurückgegeben (kleinerer Index).
Probieren Sie es online!
quelle
Pyth - 28 Bytes
Versuch es
quelle
PHP, 73 Bytes
Für Closure werden 0-basierte Indizes und Arrays aus Argumenten verwendet. Überprüfen Sie alle Testfälle .
quelle
Pyth, 16 Bytes
Testsuite .
quelle
C 110 Bytes
Probieren Sie es online aus
quelle
Java, 96 Bytes
Bezeichner werden wie die Antwort von @Leaky Nun benannt. Darüber hinaus wurden die meisten Teile so ausgerichtet, dass sie im Grunde genommen gleich sind: Im Vergleich wurde die
if
durch diefor
Bedingung -condition ersetzt (wobei das zusätzliche Semikolon geopfert wurde). Ein Doppelpunkt wurde entfernt, indem ein Inkrement-Teil in eine Bedingung verschoben wurde (die Klammern der vorherigen if-Anweisung wurden also praktisch "verschoben") - indem & in | geändert wurde hatte keinen Einfluss auf die Anzahl der Charaktere.quelle
Clojure, 95 Bytes
Dies ist die kürzeste, die ich mir einfallen lassen konnte :( Ich habe auch versucht, damit herumzuspielen, konnte sie aber nicht ins Ziel bringen:
quelle