Продолжение этого вопроса .
задача
По массиву натуральных чисел найдите самый большой элемент k, для которого:
Существует некоторое положительное целое расстояние n , так что элемент в массиве, расположенный в n местах слева или справа от k, равен n .
Массив гарантированно содержит хотя бы один элемент, удовлетворяющий этому условию.
Самый короткий код (в байтах) выигрывает. Вы можете выбрать любой формат ввода / вывода, который вам нравится.
пример
Учитывая вход
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Допустимые значения:
- То
4
, как есть7
расположенные справа 7 позиций - Первый
6
, так как есть3
расположенные 3 позиции справа от него - То
3
, как есть4
расположенные 4 позиции слева от него - То
5
, как есть2
расположенные 2 позиции справа от него - Второе
7
, так как есть3
расположенные 3 позиции слева от него.
Из этих значений наибольшим является 7
.
Контрольные примеры
[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
Ответы:
Желе , 9 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
05AB1E , 21 байт
объяснение
Попробуйте онлайн!
источник
Haskell,
615755 байтПример использования:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Более или менее) прямая реализация определения: для каждого индекса
n
входного спискаx
сохраните,a := x!!n
если есть индекс,i
гдеb := x!!i
равенabs(n-i)
. Найди максимум.Редактировать: @xnor сохранил два байта. Благодарность!
источник
x
, это должно быть короче, чтобы определить функциюz
и составить вzip[0..]
.Желе , 10 байт
Попробуйте онлайн! илипроверьте все контрольные примеры .
Как это работает
источник
Python 3,
858072 байтаРедактировать: -8 байт благодаря @Dennis
источник
EXCEL:
3230 байт=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Я до сих пор не могу поверить, что я так коротко ...
Как использовать:
вставьте это в ЛЮБУЮ ячейку, КРОМЕ ячеек столбца A. После вставки, все еще редактируя, нажмите
control
+shift
+,enter
чтобы правильно ввести его.поместите ваши значения в столбец A, 1 значение на ячейку (согласно записи CSV).
Если вы хотите узнать, как это работает, я разместил дополнительный совет в разделе « Советы по игре в гольф в Excel» .
источник
JavaScript (ES6), 61 байт
источник
Perl, 45 байт
Включает +2 для
-ap
Дайте числа в строке на STDIN:
largest.pl
:Еще один байт можно получить, заменив
^P
его буквальным управляющим символом, но это приводит к предупреждению о STDERR о последних perls.Предполагает
largest number + array length < 2^32
источник
Pyth,
1917 байтСпасибо @ Pietu1998 за -2 байта
Программа, которая принимает ввод списка в STDIN и печатает результат.
Попробуйте онлайн
Как это работает
источник
}#
так же, как@
. Кроме того, если вы переставляете последний бит,,-kb+bk
вы можете удалить последний,k
так как Pyth автоматически вставит его.MATL, 13 байт
На входе должен быть вектор столбца. Т.е. входные данные разделяются точкой с запятой, как [1; 2; 3], или запятыми, которые разделяются галочкой транспонирования в конце, как [1,2,3] '.
Попробуйте онлайн!
Все тестовые случаи: (A) , (B) , (C) , (D) , (E) , (F)
Спасибо Suever за предложения по сохранению 2 персонажей в чате MATL .
Объяснение:
Общая стратегия аналогична моему ответу на Octave / MATLAB, где объясняется основная концепция: https://codegolf.stackexchange.com/a/94161/42247
Конкретный код в этом ответе MATL построен следующим образом:
Суть метода - построение матрицы Теплица, i-ая запись которой - abs (ij). Сначала мы построим матрицу Тёплица с элементами abs (i-1) +1 с помощью команды toptlitz для MATL следующим образом:
Чтобы увидеть, как это работает, давайте назовем входной вектор для этого фрагмента кода v. 'N' находит длину v, затем ':' создает вектор 1: length (v). Затем 't' делает еще одну копию 1: length (v) в стеке; эта дополнительная копия необходима из-за хорошо известной ошибки в функции YT в MATL (эквивалент toeplitz () в MATL), в которой она ожидает две копии ввода вместо 1. Затем YT берет две копии этого вектора 1 : длина (v) вне стека и делает из них матрицу Аэса (ij) +1 Тёплица.
Теперь нам нужно вычесть 1 из этой матрицы, чтобы получить матрицу Тёплица с записями abs (ij) и найти местоположения ij, где эта матрица Теплица abs (ij) равна матрице всех векторов столбцов, содержащих столбцы-копии входных данных. вектор v. Это делается следующим образом:
Первый 't' делает дополнительную копию ввода и сохраняет ее в стеке. 'N: tYT' создает матрицу тепловых эффектов, как описано ранее, и выводит ее в стек. Затем 'q' вычитает 1 из матрицы Тёплица, а '=' выполняет поэлементное сравнение на равенство между матрицей abs (ij) и вектором, столбцы которого являются копиями входных данных. Обратите внимание, что, сравнивая вектор столбца с матрицей, мы неявно используем преимущества правил вещания операторов MATLAB / MATL (вектор сравнения в столбце копируется для создания матрицы без каких-либо команд).
Наконец, нам нужно найти индексы строк i, где есть столбец j, такой, что ij-я запись в разности матриц, построенной выше, равна 1, затем получить значение входного вектора, соответствующего этим индексам, и затем взять максимум. Это в следующие три шага:
1) Найти индексы для любой строки, которая содержит ненулевое значение:
2) Извлечь элементы входного вектора, соответствующие этим индексам:
3) Найти и вернуть максимальный элемент:
источник
YT
изменилось в выпуске 20.2.2 . Теперь он использует 1 ввод по умолчанию (что в целом более полезно). Несмотря на то, что это сэкономит вам 1 байт (удалитьt
доYT
), его нельзя использовать, потому что смена языка ставит задачу на задний план. Но это приводит к тому, что ваш ответ больше не действителен в новом выпуске, который теперьn:
наf
Рубин, 66 байт
источник
Октава / MATLAB, 40 байт
На входе должен быть вектор столбца.
Спасибо Луису Мендо за предложения по экономии 3 байта (см. Комментарий)
Спасибо Suever за предложения по сохранению еще 4 байтов (замена ~~ (sum ()) на any ())
Объяснение:
При заданном входном векторе v эта задача эквивалентна нахождению всех решений i, j следующего дискретного уравнения,
где abs () - функция абсолютного значения. Каждое v (i), для которого решается это уравнение, является одним из возможных решений, которое мы можем максимизировать.
Как дискретная функция от i и j, все возможности для левой части могут быть упорядочены в матрице Теплица, которая выглядит примерно так:
И поскольку правая часть не зависит от i, все возможности для этого могут быть организованы в матрицу, где столбцы являются копиями ввода,
Чтобы найти все решения уравнения, мы вычитаем эти две матрицы и находим места, где есть ноль. Строки, где есть ноль, соответствуют желаемым индексам i, где есть aj такой, что abs (ij) = v (i).
Другие хитрости:
источник
v
в качестве вектора столбца, просто укажите это в ответе. Кроме того, вы заменяетеfind
на,~~
чтобы сохранить еще два байтаtoeplitz
(YT
), он использует два входа (не один) по умолчаниюMathematica, 69 байт
Анонимная функция. Принимает список целых чисел в качестве входных данных и возвращает целое число в качестве выходных данных. Игнорировать любые сгенерированные сообщения.
источник
Скала, 94 байта
источник
PHP, 128 байт
источник
Java 7,
125123 байта2 байта сохранены благодаря @mrco .
Ungolfed (вроде) и тестовый код:
Попробуй это здесь.
Выход:
источник
,y
. И я действительно пришел к такому же выводу относительно единственного троичного, если. Конечно, это возможно, но вы будете делать проверку дважды, делая это намного дольше.Ява, 118 байт
источник
Python, 58 байт
На основе рубинового ответ Тони С., . Этот ответ работает в Python 2 и 3. Приветствуются предложения по игре в гольф.
Ungolfing
источник
Рубин 56 байтов
Мое самое маленькое рубиновое решение.
Довольно легко проверить в консоли рельсы
Это началось в 63 байта, спасибо за предложения, чтобы помочь урезать это!
источник
.map
вместо.each
(x) if (y)
можно заменить на(y)&&(x)
a<<b
вместоa+=[b]
На самом деле 17 байт
Этот ответ на самом деле является портом моего Python-ответа . Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
T-SQL (sqlserver 2016), 132 байта
Golfed:
Ungolfed:
скрипка
источник
JavaScript (ES6),
5654 байтаисточник
Clojure, 68 байт
Например
(map-indexed (juxt - +) [3 4 1 2])
,([-3 3] [-3 5] [1 3] [1 5])
(индексировать+/-
его значение), они используются для поиска значений из исходного вектора (вне диапазона по умолчанию0
), и найдено максимальное значение. Все еще чувствует себя немного многословно, но по крайней мере я должен использоватьjuxt
:)источник