Это предназначено, чтобы быть простым, размером с укус размером с клюшку для гольфа.
MEX (минимальное количество исключены) из конечного набора чисел является наименьшим неотрицательным целым числом , 0, 1, 2, 3, 4, ...
что вовсе не в коллекции. Другими словами, это минимум дополнения. Операция mex занимает центральное место в анализе беспристрастных игр в теории комбинаторных игр .
Ваша цель - написать программу или именованную функцию для вычисления mex, используя как можно меньше байтов.
Входные данные:
Список неотрицательных целых чисел в любом порядке. Может содержать повторы. Для конкретности длина списка и допустимый диапазон элементов будут как между, так 0
и 20
включительно.
Определение «список» здесь является гибким. Любая структура, представляющая коллекцию чисел, хороша, если она имеет фиксированный порядок элементов и допускает повторы. Он может не содержать никакой вспомогательной информации, кроме его длины.
Ввод может быть принят в качестве аргумента функции или через STDIN.
Выход
Наименьшее исключенное число. Выведите или распечатайте его.
Контрольные примеры
[1]
0
[0]
1
[2, 0]
1
[3, 1, 0, 1, 3, 3]
2
[]
0
[1, 2, 3]
0
[5, 4, 1, 5, 4, 8, 2, 1, 5, 4, 0, 7, 7]
3
[3, 2, 1, 0]
4
[0, 0, 1, 1, 2, 2, 3]
4
[1, 0, 7, 6, 3, 11, 15, 1, 9, 2, 3, 1, 5, 2, 3, 4, 6, 8, 1, 18]
10
0
для20
, правильный вывод - 21. Я добавлю тестовый пример. Да, фиксированный диапазон определенно делает это легче, хотя можно все еще использоватьsys.maxint
или,2**64
если бы я не указал это.Ответы:
Pyth , 6 байт
Пример запуска
Как это устроено
источник
range(21)
), который упорядочен. (Это также означает, что объяснение не совсем точное. Pyth и Python 3 оба довольно новы для меня.)-
в Pyth на самом деле есть фильтр - он фильтрует первый аргумент для отсутствия из второго аргумента, а затем преобразует его в форму первого аргумента (строка, список или набор).h-U22Q
так, чтобы он выдавал правильное значение 21 на входе, содержащем полный допустимый диапазон.CJam,
118 байтовКак это устроено:
Пример ввода:
Выход:
Попробуйте онлайн здесь
источник
J - 13 символов
Очень простые действия в J, и поэтому очень трудно сделать меньше.
i.@21
создает список от 0 до 20 включительно.-.
выполняет set-вычитает входные данные из этого списка.0{
берет первый элемент того, что осталось, то есть наименьшее число.f=:
определяет именованную функцию. На REPL:Начиная с выпуска J806 в ноябре 2017 года, существует новый синтаксис, который экономит нам один байт, позволяя нам использовать
i.@21
старое(i.21)
в этом контексте.источник
f=:
?i.@21-.]
сэкономил бы 1 байт.Golfscript 7
Еще одна версия ответа Питера Тейлора. Сообщество вики, так как у меня нет представителя, чтобы комментировать его пост.
Разница заключается в использовании известного максимального размера списка из вопроса вместо длины +1 для сохранения символа и отбрасывания ненужного $.
Попробуйте онлайн
источник
Бурлеск - 9 байт
Принимает ввод от стандартного ввода в формате {7 6 5 5 1 2 2 4 2 0}
Разъяснение:
Попробуйте несколько примеров:
{1 0 7 6 3 11 15 1 9 2 3 1 5 2 3 4 6 8 1 18} 20rzj \\ <]
{5 4 1 5 4 8 2 1 5 4 0 7 7} 20rzj \\ <]
источник
{0 1 2}
, потому что вам нужно наrz
единицу больше, чем наибольшее число. Просто попробуйте исправить20rzj\\<]
это и сохраните символ.Bash + coreutils, 23 байта
Это предполагает ввод в виде
|
разделенного (конвейерного) списка. Например:источник
"(...)"
во всем$1
.Рубин, 32 байта
Определяет функцию
f
для вызова с массивом.источник
f[[0, 1]]
(где внешние скобки представляют собой синтаксис вызова, а внутренние скобки определяют массив).f=
?GolfScript (
109 байт)Принимает ввод от стандартного ввода в формате
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Онлайн демо
источник
;
ли считать входную строку перед самой программой?Xojo, 55 байтов
источник
Руби, 22
объяснение
Array
отInteger
с.[0,1,2..20]
.Array
[0,1,2..20]
сортируется, первый элемент должен быть мекс.источник
20
вместо21
, потому что вход может содержать только 20 элементов.Хаскелл, 30
Это работает для списков всех размеров и списков за пределами 20. Это может быть сделано 15 байт, если импортирован Data.List:
источник
Схема - 219
Не очень конкурентоспособный. Но мне нравится писать схемы :),
Вот незагрязненный код:
источник
Python, 37 символов
источник
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
на один символ длиннее, а итеративное решениеi=0;l=input()\nwhile i in l:i+=1\nprint i
на два символа длиннее (отсутствие сохранения входных данных делает его повторным).20
Я думаю, что без ограничений эти подходы будут преобладать.C # - 64 символа
Не всегдалучший язык для игры в гольф, но его легко написать и понять :)источник
Скала, 18 байт
l
это список Int.источник
Java , 91 байт
Попробуйте онлайн!
источник
Java 7,
6966 байт-3 байта благодаря @LeakyNun
Объяснение:
Поддерживает не только 0-20, но и 0-2147483647 (что на самом деле экономит байты).
Тестовый код:
Попробуй это здесь.
Выход:
источник
APL (Дьялог) , 19 байт
Попробуйте онлайн!
Я, наверное, упускаю что-то важное здесь. Гольф в прогрессе ...
источник
TI-BASIC, 24 байта
Если
Prompt X
вместо одного номера указан список, он автоматически создаст список с именем, кX
которому можно получить доступʟX
.источник
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax , 6 байт
Запустите и отладьте его
объяснение
источник
APL (Dyalog Classic) , 11 байт
Попробуйте онлайн!
источник
Желе , 7 байт
Другой подход. Может использоваться в цепочке с любой арностью и не нуждается в разделителе цепей или чем-либо еще.
Поскольку гарантированный ответ будет меньше 256, это также работает:
Желе , 5 байт
Попробуйте онлайн!
источник
Powershell, 28 байт
Тестовый скрипт:
Выход:
Объяснение:
$i
пока$args
массив содержит целочисленное значение+$i
.+$i
.источник
MathGolf ,
54 байтаПопробуйте онлайн!
Это решение ограничено только диапазоном от 0 до 20, хотя его можно легко расширить, увеличив начальный диапазон.
Объяснение:
В качестве альтернативы 5-байтовое решение для всех чисел:
Попробуйте онлайн!
Объяснение:
источник
Z
вместо того,J
потому что я был ленивым).Perl - 34
Вот подпрограмма.
Тест с:
источник
Ява, 93
Ungolfed:
источник
-1
для тестового случая[]
.Кобра - 50
источник
Javascript, 74
Красиво и просто! Обратите внимание на пустой цикл while.
источник
JavaScript (E6) 35
Рекурсивная функция, параметр массива при вводе и возврате
mex
. Не ограничено 20Тест в консоли FireFox / FireBug
Выход
источник
PHP, 38 байт
PHP, 39 байт
источник