Задание
Задача очень простая. Учитывая массив, содержащий только целые числа и строки , выведите наибольшее число и наименьшее число.
Тестовые случаи
Input: [1, 2, 3, 4, 5, 6, 7, 8]
Output: 1, 8
Input: [5, 4, 2, 9, 1, 10, 5]
Output: 1, 10
Input: [7, 8, 10, "Hello", 5, 5]
Output: 5, 10
Числа в строках не считаются целыми числами:
Input: [1, 2, 3, 4, "5"]
Output: 1, 4
Если есть только одно целое число, оно является как наибольшим, так и наименьшим целым числом:
Input: [1]
Output: 1, 1
Input: ["1", "2", "3", "4", 5]
Output: 5, 5
правила
- Вы можете предположить, что массив всегда будет содержать хотя бы одно целое число.
- Все целые числа положительны (больше 0)
- Порядок вывода не имеет значения.
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
- Строки могут содержать все печатаемые символы ASCII (
32 - 126
) и не являются пустыми.
[1, 2, 3]
1 2 3
и{1; 2; 3}
все они являются допустимыми форматами ввода, поэтому я не понимаю, почему они должны отличаться для строковых литералов, полученных из STDIN.Ответы:
Серьезно,
96 байтовПопробуйте онлайн
Как это работает
источник
JavaScript (ES6), 54
56Редактирование 2 байт сохраненного ТНХ @Neil
Примечание:
x===+x
верно, если и только еслиx
числоисточник
()
с?Pyth,
141110 байтПопробуйте онлайн. Тестирование.
объяснение
Q
: оцененный вклад#
: filter что on:I
: значение остается неизменным после:^…1
поднимая его к власти 1S
Сортировать это_B
: создать массив[previous, reversed(previous)]
hM
: возьмите первый предмет каждого предмета этогоСамая сложная часть состоит в удалении струн из гольфа, которое в настоящее время занимает 4 байта. Текущий подход работает благодаря
^<str>1
получению первой декартовой степени последовательности (в основном, списка символов строки), но^<int>1
является просто функцией тождества.источник
*#_1Q
для удаления строк, которые были бы короче, если бы переменная была инициализирована как отрицательная ...Python 2, 42 байта
В Python 2 целые числа всегда меньше строк во время сравнений, поэтому простой
min(s)
найдет наименьшее целое число. Однако при поиске максимума мы должны сначала отфильтровать строки. Анонимная функция принимает последовательность и возвращает кортеж с минимумом и максимумом.Пример:
источник
lambda a:
застрять перед этим.if x>0
илиif''>x
сохранить один байт.lambda s:(min(s),-min(-1*_ for _ in s))
(39 байт)Желе, 8 байт
Попробуйте онлайн!
Задний план
В идеальном мире достаточно было бы пересечь список со сглаженной версией самого себя. Строки - это просто списки символов в Jelly, поэтому, хотя исходный список будет содержать целые числа и строки, уплощенная версия будет содержать целые числа и символы, оставляя в пересечении только целые числа.
В реальном мире, как парсеры обоего входных и строковых литералов дают символы вместо строк длины 1. Единственным способом передать одноплодную строку в функцию будет кодировать его «вручную» , как, например,
[”a]
, что является символ, завернутый в массив.Это позволит сэкономить байт, в общей сложности 7 байтов ( попробуйте онлайн! ).
Поскольку это, вероятно, не приемлемо, нам также нужен способ отличать символы от целых чисел.
Побитовые атомы желе
отчаяннопытаются преобразовать свои аргументы в целые числа. Они начинают с векторизации, пока не сталкиваются с типами глубины 0 (числа или символы), а затем пытаются преобразовать их в целые числа. Для символа, представляющего целое число, это будет успешно. Для других диадический побитовый атом просто сдастся и вернет 0 .Например, побитовое ИЛИ со списком
[1, "2", "34", "-5", "a", "bc"]
само по себе дастПересекая результат с исходным списком, мы избавляемся от массивов и целых чисел, которых не было в исходном списке.
Как это работает
источник
Mathematica, 20 байтов
Контрольные примеры
источник
*
есть? Кажется, что вы можете добраться до 19, просто порезав его.MinMax@Select[#>0&]
не является допустимой чистой функцией.@*
- это композиция функций, а@
приложение-функция.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
дает правильный ответMinMax@Select[# > 0 &]
символу или просто оценить его.Рубин,
573629 байтНовичок здесь, так что я не знаю, существует ли какое-либо стандартное или общепринятое место / способ вычисления используемых байтов, любая помощь будет очень признательна!
Отредактировано в соответствии с manatwork и комментариями Doorknob!
Тест
источник
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 байтБезымянный блок (функция), который ожидает входной массив в стеке и оставляет выходной массив на своем месте.
Запустите все тестовые случаи.
объяснение
источник
q~_e(ae)a+
e(
иe)
будет игнорировать строки или что-то, что кажется несовместимым. И если бы он включал сравнение со строками, он, вероятно, потерпел бы неудачу так же, как$
иe>
не может сравнить целые числа со строками.Haskell,
4139 байтВ Haskell все элементы списка должны быть одного типа, поэтому я не могу смешивать
Integer
иString
. Однако естьEither
тип для объединения двух типов в один. Таким образом, список ввода имеет типEither Integer String
1 .f
фильтрует целые числа, удаляетEither
оболочку, помещает список как отдельный элемент в новый список (например[[1,2,3]]
), чтобы<*>
можно было применить к нему функции, указанные в первом аргументе.Пример использования:
f [Left 1, Left 3, Right "Hello", Left 2]
->[1,3]
.Редактировать: @xnor введен
<*>
в игру и сохранил 2 байта. Благодарность!1 на самом деле он полностью полиморфен во втором типе, поскольку
String
свойство никогда не используется.источник
f x=[minimum,maximum]<*>[[i|Left i<-x]]
JQ, 21 символов
Образец прогона:
Он-лайн тест:
источник
Mathematica, 28 байт
источник
Nothing
... Это не значит ничего особенного ... Кроме того, для 23 байтов:MinMax@*Select[NumberQ]
Nothing
имеет особое значение. Начиная с Mathematica 10.2, он автоматически удаляется из списков.Nothing
- документированная функция в последних версиях.PHP,
5048 байтисточник
'
вокругis_int
.Сетчатка , 71
Спасибо (как всегда) @ MartinBüttner за помощь в игре в гольф.
Не конкурентный гольф, но интересно реализовать целочисленную сортировку пузырьков в Retina.
Предполагается, что все строки во входных данных заключены в
"
двойные кавычки и не содержат экранированных двойных кавычек\"
.Ввод разделен новой строкой.
Попробуйте онлайн.
источник
<space>.*<space>
от второго до последнего этапа из-за жадности.Математика , 14
Пример:
Объяснение:
Когда
MinMax
получает не числовой ввод, это уменьшает проблему настолько, насколько это возможно, затем оставляет термины включеннымиMin
иMax
:Из-за автоматического упорядочения строки следуют за целыми числами.
Apply
затем на уровне уровней {1} сокращенно@@@
используется первый аргумент неатомарных элементов. Обратите внимание, что5
здесь нетронутым:источник
Oracle SQL 11.2, 189 байт
Un-golfed
Подзапрос анализирует массив и разделяет его, чтобы заполнить представление одним элементом на строку. Затем нечисловые элементы отфильтровываются.
Я хотел бы найти способ сделать это с LEAST и GREATEST, но не повезло с обработкой массива в качестве параметра.
источник
[]
массив в массиве, поэтому не выбираете max или min, если они являются первым или последним элементом массива. Вам также не нужно выражение WHERE, вы уже выбираете агрегаты, поэтому вам не нужно фильтровать. Ищите числовые символы в своих регулярных выражениях и передавайте преобразование чисел вниз к подзапросу (очень небольшая опасность толкаемых предикатов), и оно становится 126 байтов:select min(i),max(i)from(select to_number(regexp_substr(&1,'\d+',1,level))i from dual connect by level<=regexp_count(&1,'\d'))
+
во втором регулярном выражении, так как не имеет значения, генерируете ли вы несколько дополнительных строк (сохраняет байт). Стоит также отметить, что если у вас есть строка, состоящая исключительно из цифр, вы не проигнорируете ее здесь; это требует перегруженных функций в одном пакете, так что это совсем не красиво.vimscript, 25 байт
Да, это верно, vimscript.
Ожидает ввода в виде
И выводы в виде
Объяснение:
Первая строка должна дублироваться дважды, чтобы обработать крайний случай ввода одного числа. Это связано с тем, что последняя команда будет жаловаться, если при ее достижении будет только две строки, так как она в конечном итоге
2,1d
окажется в обратном диапазоне.источник
Perl
4439 + 3 = 41 байтТребуются
-pa
флаги:Спасибо @manatwork за сбривание нескольких байтов
источник
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
нужно, чтобы!/"/
, еще один байт.Юлия, 35 байт
Это лямбда-функция, которая принимает массив и возвращает кортеж целых чисел. Чтобы вызвать его, назначьте его переменной.
У Джулии есть встроенная функция
extrema
для получения минимального и максимального элементов массива в виде кортежа. Однако, поскольку в массиве также могут быть строки, мы сначала должны отфильтровать их. Мы можем сделать это, проверив, является ли каждый элемент целочисленнымisa
.источник
Japt, 23 байта
Проверьте это онлайн!
Как это работает
источник
Баш,
403130 байтТребуется разделенный строкой список:
Благодаря @manatwork сбрить несколько байтов
источник
sed '1p;$p;d'
сохраняет байт.PowerShell,
5336 байтСохранено 17 байт благодаря @goric
OOOF ... PowerShell обычно играет довольно быстро и свободно с кастингом, который, как правило, полезен для игры в гольф, но вредит ему.
Принимает наш ввод
$args[0]
и передает его вWhere-Object
оператор (?
), который будет выбирать только целые числа и передавать их по конвейеру, отбрасывая все остальное. Поскольку динамическое повторное приведение происходит для вас на лету в фоновом режиме (например,1+"5"
возвращение6
является совершенно корректным PowerShell), нам нужно использовать-is
оператор для того, чтобы различать типы данных.Оттуда мы передадим эту коллекцию
Sort-Object
, которая будет сортировать целые числа от наименьшего к наибольшему. Внешнее()
необходимо, чтобы мы могли ссылаться на первый и последний элементы с помощью[0,-1]
(т. Е. Наименьшего и наибольшего), но учтите, что нам также нужно, чтобы внешний@
вызывал приведение выводаsort
в виде массива, если существует только один объект (как результат?
, или только один объект был вход).источник
-is
оператор типа здесь . Я думаю , что вы могли бы заменить.GetType().Name-eq"Int32"
с ,-is[int]
чтобы сэкономить 17 байтMATL , 23 байта
Попробуйте онлайн!
источник
JavaScript (ES5), 105 байт
Использование:
a([1,2,3,'4'])
Просто пытаюсь :)
"Ungolfed":
источник
Pyth, 11 байт
Объяснение:
Попробуй это здесь!
источник
Perl 6 , 25 байт
Очевидным ответом будет эта лямбда-код Wh WhisCode
Если это должна быть полная программа
Входные данные для этой полной программы представляют собой список значений, разделенных пробелами
использование
источник
𝔼𝕊𝕄𝕚𝕟, 16 символов / 20 байтов
Try it here (Firefox only).
Не плохо, не плохо ...
объяснение
Это выводит массив, содержащий как максимум, так и минимум.
(ï⇔⒡≔=+$⸩,
в основном отфильтровывает все строки на входе,МƲ
получает максимум на входе иМƵ
получает минимум.Просто примечание: это первая задача, которую я использую
⇔
, которая в основном превращаетсяï⇔
вï=ï
.источник
Python 3, 56 байт
Попробуйте онлайн на Ideone .
источник
APL (Dyalog) , 13 байт
Попробуйте онлайн!
∊
enlist (flatten - все строки превращаются в символы в большом списке)⎕AV~⍨
удалить все символы в Tomic V Ector (набор символов - листья числа)(
…)
Применить следующую молчаливую функцию:⌊/
минимум по,
добавлен в⌈/
максимальный поперекисточник
Java (OpenJDK 8) , 124 байта
Попробуйте онлайн!
Java 8 лямбда-функция, принимает массив в качестве входных данных и выдает массив
{min, max}
. Не конкурирует, потому что входные данные должны быть целочисленным массивом.Исправлено и -1 байт благодаря Кевину Круйссену
источник
<i
теперь выдает ошибку без целочисленного приведения. Кроме того, ваш исходный код (и этот тоже) не работаетmin
, так как он всегда будет выводить0
дляmin
. Вот возможное исправление. РЕДАКТИРОВАТЬ: Try-catch, кажется, на 1 байт короче, чемif(i instanceof Integer)
.Джольф, 20 байт
Я, наверное, могу сыграть в гольф ... Мне нужно реализовать более короткие решения для проверки типов.
источник