Ваша цель - вычислить пересечение множества двух списков целых чисел. Пересечение определяется как уникальная неупорядоченная группа целых чисел, найденная хотя бы один раз в обоих входных списках.
вход
Входные данные могут быть в любом желаемом формате (параметр функции, 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 каждый).