Задание
Дан любой массив целых чисел, например:
[-1,476,578,27,0,1,-1,1,2]
и индекс этого массива (в этом примере используется индексация на основе 0 , хотя можно также использовать индексацию на основе 1 ).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
Затем верните ближайшее число больше, чем элемент с этим индексом . В этом примере самое близкое число больше 1 - 27 (на расстоянии 2 индексов).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
^
Nearest greater number
Output = 27
Предположения
- Ближайший не включает в себя упаковку.
- Программа никогда не получит массив длиной 1 (например;
[55]
). - Вы должны предположить, что всегда есть число больше, чем данный элемент.
- Если есть 2 числа больше, чем элемент на равных расстояниях, вы можете вернуть либо одно .
Пары ввода / вывода
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
Гравитон
источник
источник
1; [7,1,-4,2]
2; [3,-1,-3,-2,5]
, это хороший тестовый пример. Есть положительные числа, но результат отрицательный.Ответы:
MATL , 10 байт
При этом используется индексирование на основе 1. Попробуйте онлайн!
объяснение
Рассмотрим входы
[4,-2,1,-3,5]
, в3
качестве примера.источник
Желе , 10 байт
Попробуйте онлайн!
источник
Желе ,
1112 байт+1 байт - упаковка не допускается.
1-индексироваться.
Попробуйте онлайн!
Предыдущие 11 байтов (индексирование с переносом), 0 проиндексированы:
источник
0
[1,0,2,3]
.3
, а это 1, так что, да, «ближайшее» не определено ...JavaScript (ES6),
5755 байтПринимает массив
a
и индексi
в карри синтаксисе(a)(i)
.Контрольные примеры
Показать фрагмент кода
источник
|
вместо||
?x
перезаписываться при выполнении первого условия.PHP, 106 байт
Онлайн версия
источник
Haskell , 48 байтов
Попробуйте онлайн! Тестовый фреймворк от Эрджана Йохансена.
источник
!!1
вместо этого (просто изменитеInteger
наInt
в заголовке).Сборка x86-64, 40 байт
Вдохновленный анализом Johan du Toit и решений C на 2501 , ниже приводится функция, которая может быть собрана с MASM для платформ x86-64.
Он соответствует соглашению о вызовах Microsoft x64 для передачи параметров, поэтому передается общая длина массива, передается
ECX
интересующая позицияEDX
и указатель на массив целых чиселR8
(это 64-битная платформа, поэтому 64-битный указатель).Возвращает результат («ближайшее большее число») в
EAX
.Если вы хотите вызвать его из кода C, прототип будет:
источник
Рубин , 64 байта
Попробуйте онлайн!
источник
Ом , 20 байт
В основном перевод этого рубинового ответа .
Попробуйте онлайн!
Объяснение придет позже, когда я не буду делать домашнее задание.
источник
Haskell , 53 байта
(#)
принимаетInt
и списокInt
s илиInteger
s (фактически любогоOrd
типа) и возвращает элемент списка.Как это работает
n
является указанным индексом иl
заданным списком / «массивом».i
Принимая значения от 1 и выше, это расстояние отn
тестируемого в данный момент.i
мы проверяем индексыn-i
иn+i
.x
это элементl
тестирования. Если он пройдет тесты, он станет элементом понимания списка.!!
может привести к ошибке «вне границ», в то времяdrop
как в этом случае возвращается либо весь список, либо пустой список. Шаблон соответствуетx:_
проверке того, что результат не пустой.x>l!!n
проверяет, что наш элемент больше, чем элемент в индексеn
(который гарантированно существует).!!0
в конце возвращает первое совпадение / элемент понимания списка.Попробуйте онлайн!
источник
Python , 62 байта
Попробуйте онлайн!
источник
Brachylog , 17 байт
Попробуйте онлайн!
объяснение
источник
Java (OpenJDK 8) , 98 байт
Попробуйте онлайн!
Проверяет индексы в порядке, указанном частичными суммами следующей суммы:
источник
s=1,
и,s=-s
, он не имеет смысла в вашем ответе. Вы забыли удалить его из старого подхода?C 69 байтов
Первый аргумент - это аргумент in / out. Вывод сохраняется в его первом элементе.
Посмотрите, как это работает онлайн .
источник
R, 59 байт
возвращает анонимную функцию. В случае, если есть два элемента больше на равных расстояниях, вернет первый (меньший индекс).
Попробуйте онлайн!
источник
Pyth - 28 байт
Попытайся
источник
PHP, 73 байта
Закрытие принимает на основе 0 индекс и массив из аргументов. Проверьте все контрольные примеры .
источник
Pyth, 16 байт
Тестовый пакет .
источник
C, 110 байтов
Попробуйте онлайн
источник
Java, 96 байт
Идентификаторы названы как ответ @Leaky Nun. Кроме того, большинство частей были выровнены, чтобы быть в основном одинаковыми: для сравнения,
if
было замененоfor
условием (жертвуя дополнительной точкой с запятой). Двоеточие было удалено путем перемещения части-инкремента в условие (поэтому круглые скобки предыдущего оператора if практически «переместились») - изменив & на | не влияет на количество персонажей.источник
Clojure, 95 байт
Это самое короткое, что я мог придумать :( Я тоже пытался поиграть с этим, но не смог довести его до финиша:
источник