Учитывая список целых чисел, ваша задача состоит в том, чтобы вывести второе по величине значение в первых k элементах, для каждого k от 2 до длины входного списка.
Другими словами, выведите второе по величине значение для каждого префикса ввода.
Вы можете вывести произвольное значение для первого элемента (где k = 1) или просто пропустить это значение, так как для списка из 1 элемента не существует второго максимума. Вы можете предположить, что на входе есть как минимум 2 элемента.
Самый короткий код выигрывает.
Примеры
Input:
1 5 2 3 5 9 5 8
Output:
1 2 3 5 5 5 8
Input:
1 1 2 2 3 3 4
Output:
1 1 2 2 3 3
Input:
2 1 0 -1 0 1 2
Output:
1 1 1 1 1 2
code-golf
number
array-manipulation
jimmy23013
источник
источник
k
определяется?1
не является, строго говоря, второе по величине значение из1,1
(2 примера) это второе значение , когда отсортированный по убыванию.-1, 0, 0, 1, 1, 2
для последнего тестового случая.)Ответы:
05AB1E , 5 байтов
Попробуйте онлайн!
Возвращает
[]
(произвольное значение) для первого.источник
η¦ε{¨θ
должно работать на 6 байтовZ©KZ®‚¹sÃ
было то, о чем я думал, даже не знал, что этоà
была вещь!Áθ
вместо этого.Шелуха ,
97 байтСохранено один или два байта благодаря @Zgarb
Возвращает
0
для первого «второго максимума»Explaination
Попробуйте онлайн!
источник
→hO
вместо этого и сохранить байт.Python 2 , 54 байта
Попробуйте онлайн!
источник
JavaScript (ES6),
585150 байтСохранено 1 байт благодаря @Neil
Добавляется
undefined
для k = 1 .Контрольные примеры
NB. Этот фрагмент
JSON.stringify()
кода используется для удобства чтения, которое, в качестве побочного эффекта, преобразуетсяundefined
вnull
.Показать фрагмент кода
источник
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
только 50.Pyth , 8 байт
Попробуйте онлайн! или попробуйте тестовый набор!
Как?
Это выводит первый элемент списка в качестве первого значения в списке, согласно спецификации. Вы можете вывести произвольное значение для первого элемента .
источник
Желе , 8 байт
Попробуйте онлайн!
Первое значение будет всегда 0, а следующие числа будут вторыми максимумами каждого префикса.
объяснение
источник
Java (OpenJDK 8) ,
8786 байтПопробуйте онлайн!
источник
int x,y=x=
. Я не знал, что отдельное объявление и назначение могут быть сделаны в том же заявлении.Python 2 , 45 байт
Попробуйте онлайн!
Правая часть кода не требует пояснений. Тем не менее, что мы ставим слева от
and
? Поскольку мы рекурсивно объединяем части списка, нам нужно, чтобы левая сторона была правдивой, если в нейl
есть 2 или более элементов, и пустой список в противном случае.l[1:]
удовлетворяет этому критерию приятно.источник
C # (моно) , 81 байт
Попробуйте онлайн!
источник
Брахилог , 10 байт
Попробуйте онлайн!
источник
Пакетный, 123 байта
источник
APL (Dyalog) , 15 байтов
Попробуйте онлайн!
источник
05AB1E , 5 байтов
Нашел еще 5-байтовый, сильно отличающийся от решения Эрика . Произвольное значение является первым элементом списка.
Попробуйте онлайн!
объяснение
Давайте рассмотрим пример, чтобы было легче понять.
Сначала мы получаем неявный ввод, скажем так
[1, 5, 2, 3, 5, 9, 5, 8]
.Затем мы нажимаем его префиксы, используя
η
-[[1], [1, 5], [1, 5, 2], [1, 5, 2, 3], [1, 5, 2, 3, 5], [1, 5, 2, 3, 5, 9], [1, 5, 2, 3, 5, 9, 5], [1, 5, 2, 3, 5, 9, 5, 8]]
.Теперь код отображается в списке и сортирует каждый префикс, используя
{
-[[1], [1, 5], [1, 2, 5], [1, 2, 3, 5], [1, 2, 3, 5, 5], [1, 2, 3, 5, 5, 9], [1, 2, 3, 5, 5, 5, 9], [1, 2, 3, 5, 5, 5, 8, 9]]
.Затем мы берем самый последний элемент и переместить его в начале:
[[1], [5, 1], [5, 1, 2], [5, 1, 2, 3], [5, 1, 2, 3, 5], [9, 1, 2, 3, 5, 5], [9, 1, 2, 3, 5, 5, 5], [9, 1, 2, 3, 5, 5, 5, 8]]
.Конечно, теперь код получает последний элемент каждого подсписка, используя
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(первым является произвольное значение.источник
CJam , 16 байтов
Попробуйте онлайн!
Возвращает первый элемент для первого.
-2 благодаря Challenger5 .
источник
{_,,:)\f{<$-2=}}
на два байта короче.R ,
5449 байтБлагодаря Джузеппе -5 байт. Я не знал эту особенность
seq()
.Попробуйте онлайн!
источник
seq(x<-scan())
короче на несколько байтов.Japt ,
1210 байтВыходной массив состоит из первого элемента во входном массиве, за которым следует желаемая последовательность.
Проверь это
объяснение
Неявный ввод массива
U
.Карта
U
, гдеY
текущий индекс.Кусочек
U
от0
доY+1
.Сортировать по убыванию.
Получи второй элемент.
Неявно выведите полученный массив.
источник
MATL ,
1910 байтСпасибо Луису Мендо за то, что он сбрил 9 байтов!
Попробуй это здесь .
объяснение
источник
J, 13 байт
Попробуйте онлайн! Первый элемент всегда 1.
объяснение
Пространство имеет значение.
источник
Ом ,
108 байт-2 байта благодаря ETHproductions.
Попробуйте онлайн!
Ну, это странно , но я не знаю , как еще подтолкнуть отрицательное число ...Я не очень знаю Ом. :Писточник
0 2-
кажется очень странным ...2~
?Mathematica, 45 байт
Попробуйте онлайн!
источник
Perl 5 , 42 + 1 (-a) = 43 байта
Попробуйте онлайн!
источник
Swift 3 , 67 байт
Тестирование.
Swift 3 , 65 байт
Тестирование.
Как запустить это?
Первая - это полная функция, которая принимает входные данные в качестве параметра функции и печатает результат. Вы можете использовать их точно так, как показано в ссылке для тестирования. Я решил добавить инструкции, потому что второй тип функции используется очень редко, и большинство людей даже не знают о его существовании. Использование:
Вторая - анонимная функция, такая как лямбда-выражения. Вы можете использовать его точно так же, как Python, объявив переменную
f
и вызвав ее:или заключите его в скобки и вызовите его напрямую (
(...)(ArrayGoesHere)
):источник
PHP, 53 байта
принимает входные данные из аргументов командной строки. Выходные данные разграничены, опережают и тянутся через точку с запятой.
Запустите
-nr
или попробуйте онлайн .Выдает предупреждение в PHP 7.1; заменить
a&
с ,""<
чтобы исправить.Или используйте
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 байта)источник
Mathematica 42 байта
Независимо получил ответ, очень похожий на @Jenny_mathy, но на 3 байта короче
Понял, что первый рабочий максимум занимает всего 15 байтов и два вызова функций !:
Это может быть сделано так сжато , потому что
Max
есть атрибутыFlat
и ,OneIdentity
но это не верно дляRankedMax
которой было бы логичная замена. К сожалению, определение атрибутов или их изменение в существующих функциях занимает слишком много байтов, поэтому выравнивание должно выполняться другими способами.Все n-ые рабочие максимумы могут быть найдены в 48 байтах:
источник
Pyth, 15 байт
FNr2hlQ@_S<QN1
Попробуйте это здесь: https://pyth.herokuapp.com/?code=FNr2hlQ%40_S%3CQN1&input=%5B1%2C+5%2C+2%2C+3%2C+5%2C+9%2C+5% 2C + 8% 5D & отладки = 0
объяснение
FNr2hlQ
- Для цикла со счетчиком 2 <= N <= длина списка@_S<QN1
- 2-й элемент, когда первые N элементов списка отсортированы в порядке возрастания, а затем перевернуты (отсортированы в порядке убывания)источник
к , 13 байт
Попробуйте онлайн!
источник
Октава, 51 байт
- Произвольное значение, возвращаемое для первого элемента.
Попробуйте онлайн!
источник
JavaScript (ES6),
4351 байтРедактировать: Добавлено 8 байт, поскольку требуется числовая сортировка.
:(
Хранение этого здесь, тем не менее, так как оно короче, если требуется лексикографический порядок:
Оба выражения производят
undefined
для первого элемента.Тестовый код
Показать фрагмент кода
источник
10
,.sort()
по умолчанию, лексикографически (т.е. 1,10,100,11,12,13, ..., 2,20,21, ...). Вам нужно будет включить(a,b)=>a-b
или подобное, чтобы заставить его сортировать по номеру.Clojure, 56 байт
Может быть, есть лучший способ генерировать эти префиксы.
источник