Неожиданно у нас не было просто «найти самую высокую цифру» вызов, но я думаю , что это немного слишком тривиальным.
Если введено неотрицательное целое число, вернуть наибольшую уникальную (т.е. не повторяющуюся) цифру, найденную в целом числе. Если нет уникальных цифр, ваша программа может делать все что угодно (неопределенное поведение).
Входные данные могут быть приняты как одно целое число, строка или список цифр.
Контрольные примеры
12 -> 2
0 -> 0
485902 -> 9
495902 -> 5
999999 -> Anything
999099 -> 0
1948710498 -> 7
Это код-гольф, поэтому побеждает меньшее количество байтов на каждом языке !
Ответы:
05AB1E ,
43 байтаСохранено 1 байт благодаря г-ну Xcoder, уведомляющему, что список цифр является допустимым вводом.
Попробуйте онлайн!
объяснение
источник
2
это не правда; только1
? : oPython 3 , 40 байт
Сохранено 2 байта благодаря movatica .
Попробуйте онлайн!
42 байта
Работает как для параметров типа String, так и для списка цифр. Выдает ошибку, если нет уникальных цифр.
Попробуйте онлайн!
объяснение
lambda i:
- Объявляет лямбда-функцию с параметром строки или списка цифр i.max(...)
- Находит максимальное значение генератора.x for x in i
- Перебирает символы / цифрыi
.if i.count(x)<2
- Проверяет, является ли цифра уникальной.источник
lambda i:max(x*(i.count(x)<2)for x in i)
Алиса , 15 байт
Попробуйте онлайн!
объяснение
Это простая структура для линейного кода, которая работает полностью в обычном режиме (то есть эта программа работает полностью через обработку строк). Развернутый линейный код тогда просто:
Что оно делает:
источник
Сетчатка , 16 байт
Попробуйте онлайн!
объяснение
Сортировать цифры.
Удалить повторяющиеся цифры.
Получить последнюю (максимальную) цифру.
источник
Древесный уголь ,
1812 байтПопробуйте онлайн! (Ссылка на подробную версию)
Ничего не печатает, если решение не найдено. Хитрость заключается в том, что
for
цикл печатает каждое уникальное число во входной строке, но без перемещения курсора, поэтому значение продолжает самопечатываться до тех пор, пока не будет найдено окончательное решение.Предыдущая версия печатала символы от A до Z, когда решение не было найдено, поэтому комментарии:
Попробуйте онлайн! (Ссылка на подробную версию)
источник
Шелуха , 7 байт
Попробуйте онлайн! (Набор тестов, вылетает в последнем тестовом примере, поскольку он не имеет уникальных цифр)
Это композиция функций в стиле без точек (аргументы нигде явно не упоминаются). Принимает ввод и возвращает вывод в виде строки, которая в Husk эквивалентна списку символов.
объяснение
* Проверка длины 1 выполняется путем взятия заголовка списка (все элементы, кроме последнего) и его отрицания (пустые списки ложные, непустые списки правдивые).
источник
Haskell, 37 байт
Попробуйте онлайн!
Как это работает:
источник
R , 41 байт
Анонимная функция, которая принимает список цифр в виде целых чисел или строк из одного символа. Он предварительно вычисляется
y
как необязательный аргумент, чтобы избежать использования фигурных скобок для тела функции. Возвращает цифру в виде строки. Этот подход немного отличается от другого ответа R и в конечном итоге оказывается чуть-чуть короче! похоже мой комментарий там был не прав в конце концов ...table
вычисляет вхождения каждого элемента в списке,names(table(x))
используя уникальные значенияx
(в виде строк). Так как цифры, к счастью, упорядочены так же, как и численно, мы можем их использоватьmax
.Попробуйте онлайн!
источник
table
то будет короче (плюс я никогда не могу вспомнить, как приступитьnames
к работе).<2
для другого байта. Там никогда не должно быть ноль в счетах.y=table(scan());max(names(y[y<2]))
на несколько байтов короче.JavaScript (ES6),
464140 байтПринимает ввод в виде строки. Возвращает RangeError, если нет уникальных цифр.
-7 байт благодаря Рику Хичкоку
-1 байт благодаря Shaggy
Контрольные примеры
Показать фрагмент кода
источник
(s,i=9)=>s.split(i).length-2?f(s,--i):i
. Вы можете избежать переполнения стека 42 байт:(s,i=9)=>s.split(i).length-2?i&&f(s,--i):i
.s=>g=(i=9)=>s.split(i).length-2?g(--i):i
а затем назовите егоf("12")()
Python 3, 40 байт
Работает только для списков цифр. Кромка '990' отлично работает :)
Попробуйте онлайн!
источник
Брахилог , 8 байт
Попробуйте онлайн!
объяснение
источник
Шелуха ,
98 байтСпасибо Лео за то, что он предложил немного более аккуратное решение с тем же количеством байтов.
Попробуйте онлайн!
объяснение
источник
¬←
может быть проще=1
, то же самое bytecount :)Mathematica, 41 байт
спасибо @Martin Ender
вот подход Мартина к моему ответу
Mathematica, 35 байт
источник
R,
4543 байтаfunction(x)max(setdiff(x,x[duplicated(x)]))
Попробуйте онлайн!
Принимает ввод как вектор целых чисел. Находит дублированные элементы, удаляет их и берет максимум. (Возвращается
-Inf
с предупреждением, если не существует уникального максимума.)Отредактировано в анонимную функцию за комментарий
источник
max(x[!duplicated(x)])
немного короче, но это отличный ответ. Я знал, как я собираюсь сделать это не было так хорошо. Также вы можете удалитьf=
с самого начала, так как анонимные функции являются совершенно корректными ответами. Кроме того, вы можете использовать TIO для проверки своих функций, если вы используете этот формат: попробуйте онлайн!duplicated
но на самом деле я придумал другой, более короткий ответ!Рубин , 42 байта
Попробуйте онлайн!
источник
->x{x.chars.select{|r|x.count(r)<2}.max}
APL (Dyalog Unicode) , 10 символов = 19 байтов
Метод: умножить элементы, которые встречаются несколько раз, на ноль, а затем наложить самый высокий элемент.
⌸
для каждого уникального элемента и его индексов в аргументе:×
умножить уникальный элемент∘(
...)
с:1=
логическое значение, равное ли≢
подсчет индексов (сколько раз встречается уникальный элемент)⌈/
максимум этогоПопробуйте онлайн!
APL (Dyalog Classic) , 15 байтов
Попробуйте онлайн!
Идентично вышесказанному, но использует
⎕U2338
вместо⌸
.источник
Bash + coreutils,
3028 байт-2 байта благодаря цифровой травме
Попробуйте онлайн!
Bash + coreutils, 20 байт
Попробуйте онлайн!
Если входные данные представлены в виде списка цифр, по одной на строку, мы можем пропустить этап сгиба. Это похоже на обман, хотя.
источник
grep -o .
на,fold -1
чтобы сохранить 2 байта. Я согласен, что входное целое число, представленное в виде списка цифр, слишком сильно расширяет правила.Python 2 , 39 байт
Попробуйте онлайн!
источник
C # (.NET Core) ,
279786585775 байтПопробуйте онлайн!
Спасибо @CarlosAlejo
источник
using System.Linq;
к числу байтов.OrderBy(...).Last()
вместо.OrderByDescending(...).First()
, например. Или, что еще лучше, измените свою последнюю часть.Max(i=>i.Key)
послеWhere
пункта.JavaScript (ES6),
5250 байтВводит в виде списка цифр. Возвращает,
0
если нет уникальных цифр.Контрольные примеры
Показать фрагмент кода
источник
Japt ,
121110 байтПринимает ввод в виде массива цифр.
Попробуй это
объяснение
источник
Java (OpenJDK 8) ,
898579 байтовПопробуйте онлайн!
-6 байт благодаря пониманию @ KevinCruijssen!
источник
return i>0?i:0;
наreturn i;
. Выходные данные будут -1 для тестового примера[9,9,9,9,9,9]
, но это хорошо для задачи: « Если нет уникальных цифр, ваша программа может делать все что угодно (неопределенное поведение). ».0
. Это то, что я наблюдал в предыдущем гольфе! :)APL (Dyalog) , 14 байтов
-2 благодаря TwiNight.
⌈/
самый большой из⊢
аргументы×
умножается на1=(
...)
логическое значение для каждого, где один равен+/
строки суммы∘.=⍨
их таблица равенстваПопробуйте онлайн!
источник
0
никогда не бывает самой высокой уникальной цифры, кроме0
самой себя, вы можете сохранить 1 байт, используя×
вместо/⍨
, а затем сохранить другой байт, преобразовав его в поездPHP , 40 байт
Попробуйте онлайн!
PHP , 42 байта
Попробуйте онлайн!
источник
<?=array_flip(count_chars($argn))[1]-48;
Java (JDK) , 67 байт
Попробуйте онлайн!
источник
Mathematica, 42 байта
источник
F # , 88 байт
Попробуйте онлайн!
Улучшенный подход с моей первой попытки приводит к меньшему количеству байтов.
Интересные места:
fst
иsnd
верните первый и второй элементы кортежа соответственно.источник
Желе , 9 байт
Попробуйте онлайн!
источник
Pyth, 6 байт
Тестирование
Объяснение:
источник
Perl 5 , 59 байт
Попробуйте онлайн!
источник
-F
флаг на perlrun )