вступление
Друг поставил этот вопрос сегодня немного по-другому: «Может ли одна команда [Python] определить наибольшее из целых чисел И что они не равны?».
Хотя мы не нашли способ сделать это в рамках разумных определений «единой команды», я подумал, что это может быть забавной проблемой для гольфа.
Вызов
Msgstr " Вернуть наибольшее из списка целых чисел, если-и-только-если они не все равны. "
Более конкретно:
Дана строка, содержащая только список целых чисел через запятую:
- Если они все равны, ничего не вернуть / вывести
- Иначе, возврат / вывод самый большой
правила
- Вход должен быть строкой , содержащей только разделенный запятыми список целых чисел
- Выход должен быть либо ничего (нет выхода любого вида), либо наибольший элемент из ввода, представленное как это на входе
Записи могут быть полной программой или просто функцией, при условии, что вы предоставляете какой-то способ их проверить!
Предположения
- Предположим, элементы входного списка могут быть более одной цифры, но не больше (2 32 - 1)
- Предположим, что входной список содержит не более миллиона элементов
- Предположим, что входные данные не будут содержать отрицательные значения
- Предположим, что вход никогда не будет пустым
Во избежание сомнений, объяснение вызова, данное сразу после «Более конкретно», должно заменить замену вызова выше («Верните самое большое ...»).
Примеры
(1) Все равны:
Input: 1,1
Output:
(2) Не похожи:
Input: 1,2
Output: 2
(3) Ноль !:
Input: 0,0,0,0,0,0,0,1,0,0
Output: 1
(4) Случайный:
Input: 7,3,8,4,8,3,9,4,6,1,3,7,5
Output: 9
(5) Большие числа, больший список:
Input: 627,3894,863,5195,7789,5269,8887,3262,1448,3192
Output: 8887
Дополнительные примеры:
(6) Все равны, большой список:
Input: 7,7,7,7,7,7,7,7,7
Output:
(7) Все равны, большой список, большие числа:
Input: 61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976
Output:
(8) Не равно, больший список, большие числа:
Input: 96185,482754,96185,96185,96185,96185,96185,96185,7,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,961185,96185,96185,96185
Output: 961185
счет
Это code-golf
так, поэтому код с самым коротким числом байтов выигрывает!
None
в python) вместо вывода ничего? Кроме того, почему входные данные должны быть строкой, а не списком? И что вы подразумеваете под самым большим элементом на входе, представленным как он есть на входе7,3,7,2
.,
во вход?Ответы:
R ,
5037 байт-33 байта благодаря digEmAll! -13 байт благодаря rturnbull!
Попробуйте онлайн!
источник
MathGolf , 5 байтов
Попробуйте онлайн!
объяснение
Это работает, потому что оператор max и оператор discard from left ничего не делают для пустых списков. Хорошо, оператор max удаляет список и ничего не выдвигает для пустых списков.
Это может быть 4 байта, если входные данные могут быть приняты в качестве списка.
источник
Perl 6 ,
26 2322 байта-1 байт благодаря nwellnhof
Попробуйте онлайн!
Возвращает пустую квитанцию, если все равно.
объяснение
источник
EVAL
Трюк аккуратно , и вы можете даже сохранить байты сo&EVAL
.if +.Set
сработает?Желе , 4 байта
Полная программа, принимающая ввод в качестве аргумента командной строки (без кавычек), который печатает требуемый вывод
(Обратите внимание, что он имеет дело с: пустой ввод, как
, например , ввод с одним элементом и ввод с
7
несколькими элементами,7,8,7
как того требует спецификация в настоящее время.)Попробуйте онлайн!
Как?
источник
APL (Dyalog Classic) , 6 байтов
Попробуйте онлайн!
поезд вычисления максимума (
⌈/
) без (~
) сурик (⌊/
) превратился в матрицу (⍪
)если вход содержит только один отдельный элемент,
⌈/~⌊/
будет пустым и⍪
вернет матрицу 0 × 1, которая будет отображаться как ничтов противном случае
⌈/~⌊/
это будет 1-элементный вектор, а его⍪
будет матрица 1x1 (визуально неотличимая от скаляра), которая содержит максимумисточник
CJam ,
1613 байтовПопробуйте онлайн!
источник
Python 2 , 37 байт
выводит в stderr (отладка по tio).
Попробуйте онлайн!
источник
Python 2 ,
4241 байтПопробуйте онлайн!
источник
element, element, ...
. то есть, это не должно быть заключено в скобки.input
по умолчаниюeval
с любой строкой передается из стандартного ввода.,
, так как ваше решение дает ошибку, если ввод - просто одно число!=
на a,>
поскольку вход никогда не будет пустым?Haskell ,
777561 байтПопробуйте онлайн!
('[':).(++"]")
берет строку (например"1,2,1,3"
) и заключает ее в скобки ("[1,2,1,3]"
). Затемread
превращает строку в список целых чисел ([1,2,1,3]
).Функция
f
использует этот совет для более короткого условия, если одним из результатов является пустой список.any(/=a!!0+0)a
проверяет,a
содержит ли список какой-либо элемент, который не равен его первому элементуa!!0
. (+0
Требуется так, чтобыread
он знал, что должен искать список чисел.) Если все элементы равны, этот тест завершаетсяFalse
и возвращается пустая строка. В противном случаеshow(maximum a)
это максимум списка, преобразованного в строку, возвращается.источник
Красный, 81 байт
Как и в случае решения R, огромная часть кода обрабатывает входную строку «1,1,2,44,1». Если мы можем иметь это как блок, например:,
x: [1 1 2 44 1]
тогда мы можем сделать это в 41 байте:источник
sort x: unique load replace/all input","" "if 1 <>length? x[last x]
для 67 байтов. К сожалениюinput
, не работает в TIO. Если вы сделаете его функциональным, он будет отлично работать в TIO: 73 байтаAPL (Dyalog Unicode) , 12 байт
Полная программа. Запрашивает строку из стандартного ввода.
Попробуйте онлайн!
⎕
запрашивать и оценивать выражение (запятые объединяют числа в список){
…}
Применить следующую анонимную лямбду (⍵
это аргумент; список чисел):1≠
[если] 1 отличается от ...≢
счет ...∪
уникальные числа в ...⍵
список:
тогда⌈/
вернуть максимум через (макс. уменьшение)…⍵
список[еще: ничего не делать]
источник
⌈/~⌊/
JavaScript (Node.js) , 49/53 байта
Моя оригинальная версия
.every()
, 53 байтаФункция, возвращающая '', считается отсутствием вывода? Конечно, это можно улучшить ...
Попробуйте онлайн!
Улучшенная версия с использованием
Set()
по лохматый , 49 байтПопробуйте онлайн!
источник
Neim , 4 байта
Объяснение:
Попробуйте онлайн!
источник
октава , 28 байт
Возвращает максимум (число, которое является матрицей 1x1) или пустую (1x0) матрицу.
Попробуйте онлайн!
источник
Japt, 16 байт
Это было бы 9, если бы не излишне строгий формат ввода, 7, если выбрасывать ошибку, ничего не выдает.
Предполагается, что строка содержит как минимум 2 целых числа.
Попытайся
источник
Common Lisp, 102 байта
Попробуйте онлайн!
Размер в основном за счет ввода данных; при вводе в качестве обычного списка длина уменьшается до 46 байт:
источник
XPath 3.1, 54 байта
с входной строкой в качестве элемента контекста:
Может быть уменьшен на один символ, если вы позволите контексту связать более короткий префикс, чем "xs", с пространством имен схемы XML.
Объяснение: принимает входную строку, разбивает токены на разделитель ",", применяет
xs:int()
к каждому токену для преобразования в целое число, вычисляет максимум последовательности, выводит максимум при условии, что предикат$t!=$t
истинен. Если A и B являются последовательностями, тогдаA!=B
верно, если существует пара элементов (a из A, b из B), такая чтоa!=b
.Если входные данные могут быть представлены в виде последовательности целых чисел $ s, а не через запятую, то решение сводится к
(15 байтов - что может быть самым коротким решением в языке, который не предназначен специально для краткости)
ПРИМЕЧАНИЕ : это не удовлетворяет требованию «представленному на входе» - если на входе есть целое число с начальными нулями или знак плюс, они будут потеряны. Я подозреваю, что это верно и для многих других решений.
источник
К4 ,
3835 байтТестовые случаи:
Я не очень хорошо разбираюсь в любом из k вариантов, доступных на TiO, так что нет онлайн-примера, я постараюсь найти один, хотя
объяснение
Если вам интересно, почему некоторые операции выполняются раньше других, K4 не имеет приоритета оператора, вместо этого он интерпретирует справа налево (хотя вы можете использовать скобки для приоритета). Выражения, разделенные точкой с запятой.
Вероятно, можно больше играть в гольф, а не фанат того, чтобы в конце использовать эту временную функцию.
РЕДАКТИРОВАТЬ: Если запятые в выходных данных являются проблемой, это может быть исправлено еще двумя байтами:
Возьмем всего
4037, но запятая перед числом просто означает, что это список из одного элемента, а не атома.источник
PHP (<= 5,6)
6474 байтаЗапустите как трубу с
-nR
или проверьте это онлайнsplit
был удален в PHP7, но так как мне пришлось добавить 10, чтобы исправить некоторые проблемы, стоило использовать вместо того,explode
что примерно эквивалентно в этом случае.источник
Also this doesn't work when there are more than one element with the max value
Я missreadIf they are all equal, return/output nothing
бытьIf they are equal, return/output nothing
смысл , если есть более одного на выходе пустой. Добавление==count($a)
исправляет это. Посколькуarray_count_values
подсчитывает, сколько раз он появляется в массиве, если это равно общему количеству элементов в массиве, выведите '', иначе выведите max$argn
его, взяв его из стандартного ввода (это использовалось в нескольких ответах по гольфу). Я могу привести примеры не только моих, но и других пользователей.Japt
-hF
, 8 байтПопытайся
-3
байты, если входные данные могут быть приняты в качестве массива.источник
05AB1E ,
98 байт-1 байт благодаря @Cowabunghole .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
',¡ZsËiõ
, сохранив 1 байтPython 2 , 44 байта
Попробуйте онлайн!
источник
eval
в Python преобразует разделенную запятыми строку в список?k=input()
и получить тот же результат.Ом v2 , 9 байт
Попробуйте онлайн! Объяснение:
источник
Древесный уголь , 15 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Разделите ввод на запятые и приведите каждое значение к целому числу.
Проверьте, больше ли максимальное значение, чем минимальное значение.
Если так, тогда приведите максимальное значение к строке и напечатайте.
источник
Mathematica, 43 байта
Чистая функция. Принимает в качестве входных данных разделенную запятыми строку и возвращает либо число, либо
Null
. Я считаю, что это действительно, так какNull
графически не отображается:источник
C (gcc) , 91 байт
Попробуйте онлайн!
Degolf
источник
M(char*s)
вместоM(s)char*s;
иindex()
вместоstrchr()
Pyth, 7 байт
Попробуйте онлайн!
Все тестовые случаи (немного другой код для лучшего форматирования вывода)
Поскольку Pyth основан на Python, пользовательский ввод всегда интерпретируется как строка, которая затем может быть передана через
Объяснение:eval()
. Все программы Pyth автоматически запускаются вQ=eval(input())
качестве первой инструкции.источник
Java (JDK) , 101 байт
Попробуйте онлайн!
Разъяснения
Бонусное решение!
Несмотря на все мои усилия, я не смог получить это решение с использованием regex и Streams до менее чем 105 байтов, но мне очень понравилась его элегантность, поэтому я должен был упомянуть его;
источник
?
) и регулярного цикла и возврата (вместо потока).MATL ,
159 байтПопробуйте онлайн!
Несколько тестов
Просто стараюсь, чтобы мои отбивные из MATL не становились слишком ржавыми!
редактировать : в конце концов ржавый; спасло 6 байтов, благодаря @LuisMendo.
объяснение
источник
Пип , 13 байт
Попробуйте онлайн!
Использует подход из APL-решения ngn :
Первые 5 байтов
a^:',
разделяют входную строку на запятые.Альтернативные 13-байтовые решения:
источник