Учитывая массив положительных целых чисел, выведите массив всех элементов, которые больше или равны соседним. Большинство элементов будут иметь два смежных элемента; первый и последний элемент являются особыми случаями, так как они имеют только один смежный элемент.
Вы можете предположить, что массив содержит как минимум два элемента.
Тестовые случаи:
Input | Output
[4,2,6,12,4,5,4,3] | [4,12,5]
[1,2] | [2]
[1,2,3,2,1] | [3]
[3,2,1,2,3] | [3,3]
[4,4] | [4,4]
[2,4,4,4,1] | [4,4,4]
[2,3,3,4] | [3,4]
[4,3,3,4] | [4,4]
Это код-гольф , самый короткий код выигрывает!
[4,3,3,4]
в качестве тестового примера. Мое решение не очень хорошо с этим справилось.Ответы:
Желе ,
13 1211 байтМонадическая ссылка, берущая список положительных целых чисел и возвращающая отфильтрованный список, содержащий только те из них, которые больше или равны всем их соседям.
Попробуйте онлайн!
Предыдущие 12 байтов :
Предыдущие 13 байтов :
Как?
источник
»
- как насчет 10, хотя ..?Python , 54 байта
Попробуйте онлайн!
Ввод / вывод осуществляется с помощью кортежей, а не списков.
Python , 57 байт
Попробуйте онлайн!
Alt 57:
источник
Mathematica 22 байта
источник
Хаскелл,
504942 байтаПопробуйте онлайн!
scanr(:)[0]
составляет список хвостов(0:l)
, каждый с окончательным0
, например , дляl = [4,3,3,4]
:[[0,4,3,3,4,0],[4,3,3,4,0],[3,3,4,0],[3,4,0],[4,0],[0]]
что шаблон соответствует Againsi:j:k:_
извлечь все списки по крайней мере , 3 -х элементов , которые называютсяi
,j
иk
. Сохранить,j
если его> =i
иj
.Редактировать: Эрджан Йохансен спас 7 байтов. Благодарность!
источник
i:j:k:_<-scanr(:)[0]$0:l
короче (Немного подкорректировав «стандартный»tails=scanr(:)[]
трюк.)Dyalog APL,
31302822 21байтовПопробуйте онлайн!
Объяснение (я плохо разбираюсь в вещах):
источник
Haskell , 40 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 40 байт
источник
Python 3 ,
84 75 *71 байтПопробуйте онлайн!
* @ LeakyNun сэкономил 9 байт, используя хитрый операторский прием.
источник
lambda l,k=[0]:[l[i]for i in range(len(l))if(k+l+k)[i+2]<=l[i]>=(k+l+k)[i]]
Желе , 15 байт
Попробуйте онлайн!
источник
05AB1E ,
151413 байтПопробуйте онлайн!
объяснение
Предыдущее 15-байтовое решение
Попробуйте онлайн!
объяснение
источник
R, 44 байта
который оценивает функцию:
Сравнивает
x
сc(0,x)
, так что соx
смещением на одну позицию вправо. Также сравниваетсяx
сx[-1]
, так что одна позиция сдвинута влево. Это оба,TRUE
если есть максимум там.&
взять И этих булевых. Из-за природы обертывания векторов R, когда они не имеют одинаковую длину, мы должны обрезать результат до длиныx
, которая определяется путемsum(x|1)
. Затем мы подключаем логический вектор, беря только истинные индексыx
и возвращаем его.Обратите внимание, поскольку эти логические операции выполняются с векторами неравной длины, R будет жаловаться. Много. Но правильный вывод будет там среди предупреждений:
источник
R , 42 байта
Попробуйте онлайн!
На 2 байта короче, чем решение JAD .
diff
вычисляет последовательные различия; тогда оставляйте только записи больше, чем оба соседа.источник
Pyth , 20 байтов
Быть в гольфе ...
Тестирование.
источник
R , 68 байт
Попробуйте онлайн!
источник
pryr::f(expression)
это более короткий способ объявления функции, чемfunction(a)expression
.sum(a|1)
это ярлык дляlength(a)
.PHP , 67 байт
Попробуйте онлайн!
источник
Сетчатка , 51 байт
Попробуйте онлайн
источник
q, 39 байт
источник
Stax , 10 байт
Запустите и отладьте его
Он производит вывод в виде значений, разделенных новой строкой, на стандартном выводе.
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
Обновлено: только что найдено 9-байтовое решение. Обновлю объяснение позже:
Stax , 9 байт
Запустите и отладьте его
источник
Perl 5
-a
, 37 байтПопробуйте онлайн!
источник