Twoim celem jest obliczenie ustawionego przecięcia dwóch list liczb całkowitych. Przecięcie jest zdefiniowane jako unikalna nieporządkowana grupa liczb całkowitych znaleziona co najmniej raz na obu listach wejściowych.
Wejście
Dane wejściowe mogą być w dowolnym pożądanym formacie (parametr funkcji, stdio itp.) I składają się z dwóch list liczb całkowitych. Wielu nie zakłada niczego na temat każdej listy poza tym, że mogą zawierać nieujemną liczbę liczb całkowitych (tzn. Są nieposortowane, prawdopodobnie mogą zawierać duplikaty, mogą mieć różne długości, a nawet mogą być puste). Zakłada się, że każda liczba całkowita będzie pasować do natywnego typu liczb całkowitych w twoim języku, może być dłuższa niż 1 cyfra dziesiętna i są podpisane.
Przykładowe dane wejściowe:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Wynik
Dane wyjściowe są dowolnymi listowymi liczbami całkowitymi reprezentującymi ustawione przecięcie dwóch list do dowolnego pożądanego formatu (zwracana wartość, stdio itp.). Nie ma wymogu sortowania danych wyjściowych, ale można podać implementację, która zawsze jest sortowana. Dane wyjściowe muszą stanowić prawidłowy niez uporządkowany zestaw (np. Nie może zawierać żadnych zduplikowanych wartości).
Przykładowe przypadki testowe (zauważ, że kolejność danych wyjściowych nie jest ważna):
Pierwsze dwa wiersze to listy wejściowe, trzeci wiersz to wynik. (empty)
oznacza pustą listę.
(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)
Punktacja
To jest kod golfowy; najkrótsza odpowiedź w bajtach wygrywa.
Standardowe otwory na pętle są zabronione. Możesz używać dowolnych wbudowanych funkcji nieprzeznaczonych do operacji podobnych do zestawu.
Zabronione wbudowane funkcje:
- ustaw tworzenie / usuwanie duplikatów
- ustaw różnicę / przecięcie / połączenie
- Uogólnione testowanie członkostwa (np. Cokolwiek podobnego do
in
słowa kluczowego w Pythonie,indexOf
funkcje podobne do itp.). Zauważ, że użycie konstrukcji „foreach item in list” jest dozwolone (zakładając, że nie naruszają one żadnych innych ograniczeń), pomimo faktu, że Python ponownie używain
słowa kluczowego do stworzenia tego konstruktu. - Te zabronione wbudowane elementy są „wirusowe”, tzn. Jeśli istnieje większa wbudowana zawierająca którąkolwiek z tych podfunkcji, jest to podobnie zabronione (np. Filtrowanie według członkostwa na liście).
Dozwolone są wszystkie wbudowania niewymienione na powyższej liście (np. Sortowanie, testowanie równości w liczbach całkowitych, dodawanie / usuwanie listy według indeksu, filtrowanie itp.).
Na przykład weźmy następujące dwa przykładowe fragmenty (kod podobny do języka 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)
Możesz sam zaimplementować dowolne z tych zestawów funkcji, które będą się liczyć do twojego wyniku.
Twoje rozwiązanie powinno zakończyć się w rozsądnym czasie (powiedzmy, mniej niż minutę na dowolnym sprzęcie dla dwóch list ~ długość 1000 każda).