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