Wprowadzenie
Odległość Hausdorffa mierzy różnicę między dwóch podzbiorów przestrzeni metrycznej. Intuicyjnie przestrzeń metryczna to tylko pewien zestaw z wbudowaną funkcją odległości; w tym wyzwaniu wykorzystamy liczby naturalne ze zwykłym dystansem d(a, b) := abs(a - b). Odległość pomiędzy dwoma Hausdorff niepusty zestawów ograniczonych Ai Bjest przez
max(max(min(d(a, b) for b in B) for a in A),
max(min(d(a, b) for a in A) for b in B))
w notacji podobnej do Pythona. Odległość Hausdorffa można obliczyć, znajdując element, Adla którego odległość do najbliższego elementu Bjest maksymalna, i element, Bdla którego odległość do najbliższego elementu Ajest maksymalna, a następnie biorąc maksimum tych odległości. Innymi słowy, jeśli odległość Hausdorffa jest d, to każdy element Ajest w odległości djakiegoś elementu Bi odwrotnie.
Wkład
Twoje dane wejściowe to pojedyncza lista liczb całkowitych. Zawiera tylko elementy 0,1,2,3, które wskazują, czy dany indeks listy nie jest elementem ani, Aani Btylko A, ani też Bi jednocześnie Aoraz B. Na przykład dane wejściowe [0,1,1,0,2,3]oznaczają, że A = {1,2,5}i B = {4,5}jeśli korzystamy z indeksowania opartego na 0 (co nie ma znaczenia, ponieważ nasze wskaźniki są niezmienne w tłumaczeniu).
Wydajność
Twój wynik to odległość Hausdorffa między Ai B; w powyższym przykładzie jest to 3. Jeśli któryś z zestawów jest pusty, odległość nie jest zdefiniowana i powrócisz -1.
Zasady
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
[] -> -1
[0] -> -1
[0,1,0] -> -1
[2,0,0,2] -> -1
[0,1,2,3] -> 1
[0,3,3,0,0,0,0,3] -> 0
[1,0,0,1,0,0,1,3,1] -> 7
[1,0,0,0,0,3,0,0,0,0,2] -> 5
[0,1,1,3,1,3,2,1,1,3,0,3] -> 2
[2,2,2,1,2,0,3,1,3,1,0,3] -> 3
[1,3,0,2,0,2,2,1,0,3,2,1,1,2,2] -> 2
[1,0,1,1,2,0,1,2,3,1,0,0,0,1,2,0] -> 4
Ajest bardzo zbliżony do jednego B, ale istnieją elementy Bbardzo dalekie A(na przykład, jeśli Ajest podzbiorem B). W takim przypadku krótka formuła jest niepoprawna.
max(max(min(d(a, b) for b in B) for a in A))powinno wystarczyć. Jest tak, ponieważd(a,b)zwraca wartość bezwzględną, a zatem obie funkcje maksymalne zwracają tę samą liczbę za każdym razem.