Zadanie
Biorąc pod uwagę dowolną liczbę liczb całkowitych, np .:
[-1,476,578,27,0,1,-1,1,2]
oraz indeks tej tablicy (w tym przykładzie zastosowano indeksowanie na podstawie 0 , chociaż można również użyć indeksowania na podstawie 1 ).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
Następnie zwróć najbliższą liczbę większą niż element o tym indeksie . W tym przykładzie najbliższa liczba większa niż 1 to 27 (przy 2 indeksach dalej).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
^
Nearest greater number
Output = 27
Założenia
- Najbliższy nie obejmuje pakowania.
- Program nigdy nie otrzyma tablicy o długości 1 (np;
[55]
). - Zakładasz, że zawsze jest liczba większa niż podany element.
- Jeśli w równych odległościach są 2 liczby większe niż element, możesz zwrócić jedną z nich .
Pary we / wy
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
Grawiton
źródło
źródło
1; [7,1,-4,2]
2; [3,-1,-3,-2,5]
to dobry przypadek testowy. Istnieją liczby dodatnie, ale wynik jest ujemny.Odpowiedzi:
MATL , 10 bajtów
Wykorzystuje to indeksowanie 1. Wypróbuj online!
Wyjaśnienie
Rozważmy wejść
[4,-2,1,-3,5]
,3
jako przykład.źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
Galareta ,
1112 bajtów+1 bajt - niedozwolone jest zawijanie.
1-indeksowany.
Wypróbuj online!
Poprzednie 11 bajtów (indeksowanie zawijania), indeksowane 0:
źródło
0
[1,0,2,3]
.3
, która jest oddalona o 1, więc, tak, "najbliższy" nie jest zdefiniowany ...JavaScript (ES6),
5755 bajtówPobiera tablicę
a
i indeksi
w składni curry(a)(i)
.Przypadki testowe
Pokaż fragment kodu
źródło
|
zamiast||
?x
zostać zastąpieni, gdy pierwszy warunek zostanie spełniony.PHP, 106 bajtów
Wersja online
źródło
Haskell , 48 bajtów
Wypróbuj online! Środowisko testowe od Ørjan Johansen.
źródło
!!1
zamiast tego (po prostu zmieńInteger
naInt
w nagłówku).Zestaw x86-64, 40 bajtów
Zainspirowany analizą rozwiązań Johan du Toit i C 2501 , poniżej jest funkcja, którą można zmontować za pomocą MASM dla platform x86-64.
Jest zgodny z konwencją wywoływania parametrów Microsoft x64 w celu przekazywania parametrów, więc przekazywana jest całkowita długość tablicy, przekazywana jest
ECX
pozycja zainteresowaniaEDX
, a wskaźnik do tablicy liczb całkowitych jest przekazywanyR8
(jest to platforma 64-bitowa, więc jest to wskaźnik 64-bitowy).Zwraca wynik („najbliższa większa liczba”) w
EAX
.Jeśli chcesz wywołać go z kodu C, prototyp będzie:
źródło
Rubinowy , 64 bajty
Wypróbuj online!
źródło
Ohm , 20 bajtów
Zasadniczo tłumaczenie tej odpowiedzi Ruby .
Wypróbuj online!
Wyjaśnienie nastąpi później, kiedy nie będę odrabiał lekcji.
źródło
Haskell , 53 bajty
(#)
pobieraInt
listęInt
s lubInteger
s (właściwie dowolnegoOrd
typu) i zwraca element listy.Jak to działa
n
jest podanym indeksem il
jest podaną listą / „tablicą”.i
, przyjmując wartości od 1 w górę, jest odległość odn
aktualnie testowanego.i
sprawdzamy indeksyn-i
in+i
.x
jest elementeml
testowanym. Jeśli przejdzie testy, będzie to element wynikowego zrozumienia listy.!!
może dać błąd przekroczeniadrop
granicy , podczas gdy zamiast tego zwraca całą listę lub pustą listę w tym przypadku. Wzór pasuje dox:_
sprawdzania, czy wynik nie jest pusty.x>l!!n
sprawdza, czy nasz element jest większy niż element o indeksien
(który z pewnością istnieje).!!0
na końcu zwraca pierwszy wynik / element zrozumienia listy.Wypróbuj online!
źródło
Python , 62 bajty
Wypróbuj online!
źródło
Brachylog , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Java (OpenJDK 8) , 98 bajtów
Wypróbuj online!
Sprawdza indeksy w kolejności określonej przez sumy częściowe następującej sumy:
źródło
s=1,
i,s=-s
, to nie ma sensu w twojej odpowiedzi. Czy zapomniałeś usunąć je ze starego podejścia?C, 69 bajtów
Pierwszy argument to argument wejścia / wyjścia. Dane wyjściowe są przechowywane w pierwszym elemencie.
Zobacz, jak działa online .
źródło
R, 59 bajtów
zwraca anonimową funkcję. W przypadku, gdy istnieją dwa elementy większe w równych odległościach, zwróci pierwszy (mniejszy indeks).
Wypróbuj online!
źródło
Pyth - 28 bajtów
Spróbuj
źródło
PHP, 73 bajty
zamknięcie przyjmuje indeks i tablicę oparte na 0 z argumentów. Sprawdź wszystkie przypadki testowe .
źródło
Pyth, 16 bajtów
Zestaw testowy .
źródło
C, 110 bajtów
Wypróbuj online
źródło
Java, 96 bajtów
Identyfikatory są nazywane jak odpowiedź @Leaky Nun. Co więcej, większość części została ułożona tak, aby były w zasadzie takie same: Dla porównania,
if
zastąpiono je przezfor
warunek (poświęcenie dodatkowego średnika). Okrężnica została usunięta poprzez przeniesienie części przyrostowej do stanu (więc nawiasy poprzedniego wyrażenia if praktycznie „przeniesiono”) - zmiana i na | nie miało wpływu na liczbę znaków.źródło
Clojure, 95 bajtów
Jest to najkrótszy sposób, jaki mogłem wymyślić :( Próbowałem też z tym pobawić się, ale nie mogłem doprowadzić go do mety:
źródło