Ваша цель - вычислить пересечение множества двух списков целых чисел. Пересечение определяется как уникальная неупорядоченная группа целых чисел, найденная хотя бы один раз в обоих входных списках.
вход
Входные данные могут быть в любом желаемом формате (параметр функции, stdio и т. Д.) И состоят из двух списков целых чисел. Многие не предполагают, что в каждом списке есть что-то еще, кроме того, что они могут содержать любое неотрицательное число целых чисел (т.е. они не отсортированы, возможно, могут содержать дубликаты, могут иметь разную длину и даже могут быть пустыми). Предполагается, что каждое целое число будет соответствовать целочисленному типу вашего языка со знаком, может иметь длину более 1 десятичного знака и быть подписанным.
Пример ввода:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Вывод
Выходными данными являются любые списки целых чисел, представляющие пересечение множества двух списков с любым требуемым форматом (возвращаемое значение, stdio и т. Д.). Нет необходимости сортировать выходные данные, хотя вы можете предоставить реализацию, которая всегда сортируется. Выходные данные должны формировать допустимый неупорядоченный набор (например, он не должен содержать повторяющихся значений).
Примеры тестовых случаев (обратите внимание, что порядок вывода не важен):
Первые две строки - это входные списки, третья строка - это выходные данные. (empty)
обозначает пустой список.
(empty)
(empty)
(empty)
1000
(empty)
(empty)
3 1 2 4 3 1 1 1 1 3
3 1 -1 0 8 3 3 1
1 3
1 2 1
3 3 4
(empty)
счет
Это код гольф; кратчайший ответ в байтах побеждает.
Стандартные лазейки запрещены. Вы можете использовать любые встроенные функции, не предназначенные для операций, подобных множеству.
Запрещенные встроенные функции:
- установить создание / удаление дубликатов
- установить разность / пересечение / объединение
- Обобщенное тестирование членства (например, что-либо похожее на
in
ключевое слово в Python, подобныеindexOf
функции и т. Д.). Обратите внимание, что допускается использование конструкций «foreach item in list» (при условии, что они не нарушают никаких других ограничений), несмотря на то, что Python повторно используетin
ключевое слово для создания этой конструкции. - Эти запрещенные встроенные функции являются «вирусными», т. Е. Если имеется более крупный встроенный модуль, содержащий какие-либо из этих подфункций, он также запрещается (например, фильтрация по членству в списке).
Разрешены любые встроенные модули, отсутствующие в приведенном выше списке (например, сортировка, проверка целочисленного равенства, добавление / удаление списка по индексу, фильтрация и т. Д.).
Например, возьмем следующие два примера фрагментов (Python-подобный код):
# prohibited: filters by testing if each value in tmpList is a member of listA
result = tmpList.filter(listA)
# ok: filtering by a lambda which manually iterates over listA and checks for equality
def my_in_func(val, slist):
for a in slist:
if(val == a):
return True
return False
result = filter(lambda v: my_in_func(val, listA), tmpList)
Вы можете самостоятельно реализовать любую из этих функций, подобных множеству, и они будут учитываться при подсчете очков.
Ваше решение должно быть выполнено за разумное время (скажем, менее чем за минуту на любом оборудовании, которое у вас есть для двух списков ~ длина 1000 каждый).
источник
Ответы:
Haskell,
4542 байтаПопробуйте онлайн!
Редактировать: -2 байта благодаря @ Örjan Johansen, -1 байт благодаря @dfeuer.
источник
MATL , 18 байт
Попробуйте онлайн!
Это работает в два этапа. Сначала вычисляется пересечение, возможно, с дубликатами. Это основано на сравнении всех элементов одного массива со всеми элементами другого и сохранении элементов первого, которые присутствуют во втором.
Затем дубликаты удаляются. Для этого сортируется массив из предыдущего шага, и записи сохраняются, если они отличаются от предыдущего.
-inf
Значение предваряется таким образом , что первый (то есть самое низкое) значение не теряется.источник
Желе, 13 байт
Попробуйте онлайн!
Как это работает
источник
Golflua , 68 символов
который называется как
В обычном Lua это было бы
В общем, я перебираю каждый элемент двух таблиц и сохраняю только эквивалентные значения. Используя значение в качестве ключа (
k[w]=w
), я удаляю все дубликаты. Затем мы выводим новую таблицу, перебирая индекс и значениеpairs
источник
JavaScript (ES6), 66 байт
Без использования
indexOf
, так как я не уверен, что это разрешено.источник
Pyth,
1211 байтовдемонстрация
Объяснение:
источник
bash + GNU coreutils, 184 байта
Призвание:
Вывод:
Нет выходных данных, если пересечение пусто. Этот скрипт не сортирует и проверяет работоспособность, если первый набор пуст. Объяснение:
Бонус, чтобы знать: вы можете изменить это,
grep -o .
чтобы сделать это со случайными строками вместо чисел.источник
Perl 6,
2637 байтПрименение
Нахальный неконкурентный ответ
или если вам нравится это в скучной старой
f
функцииисточник
invert
если вы взяли значения вместо этого. 24 байтаСетчатка , 63 байта
Последние две строки удаляют дубликаты. Входные данные представляют собой два списка, разделенных пробелами, разделенных запятой. Выходные данные разделяются пробелами.
Попробуйте онлайн
Если дубликаты в выводе разрешены, моя программа будет 42 байта.
источник
Jq 1,5 , 99 байт
расширенный
Это позволяет избежать использования
{}
объектов и, поскольку jq не имеет битовых операций, это эмулирует их с массивом.Попробуйте онлайн!
источник
Аксиома, 411 байт
разгрызть и проверить
источник
Аксиома, 257 байт
Это без использования binsearch ... Но я не знаю, большой O ... Unglofed и результаты:
Не выполнено много тестов, поэтому может быть прослушан ...
источник
Желе , 12 байт
Попробуйте онлайн!
источник
[3]
вместо3
[]
и элемент для одноэлементных списков. Вы можете перейти на вики-страницу (атомы) и добавить встроенную строку Python Stringify, но это делает мой ответ более длинным, а строгий ввод-вывод - тупымШелуха , 9 байт
Попробуйте онлайн!
Глядя в исходный код Husk на GitHub,
k
("keyon") реализован как композиция сортировки списка и группировки смежных значений, поэтому, хотя я не могу найти реализацию "groupOn", вероятно, можно с уверенностью предположить, что это не так. ничего не делать, поскольку Haskell - это функциональный язык, а группировка смежных равных значений - довольно простая операция сокращения со списком ссылок. (Я могу найти реализациюk
сигнатуры другого типа "keyby", которую я мог бы использовать здесь, изменивI
на=
, но я не знаю Haskell, поэтому не могу сказать, как именно это работает.)Кроме того, хороший ответ Brachylog, который я придумал, прежде чем я понял, что операции над множествами всех видов запрещены:
⟨∋∈⟩ᵘ
источник
Р,
14183 байтаУлучшено Джузеппе
Попробуй онлайн
ВотВотисточник
a
иb
они предварительно определены, вы должны принять входные данные, либо взяв их в качестве аргументов функции, либо из STDIN.Python3, 51 байт
Если входные списки могут содержать дубликаты:
Python3, 67 байт
источник
PHP ,
7877 байтПопробуйте онлайн!
Без излишеств, но в соответствии с правилами (я думаю).
Вывод
источник