Introdução
A distância de Hausdorff mede a diferença entre dois subconjuntos de um espaço métrico. Intuitivamente, um espaço métrico é apenas um conjunto com uma função de distância integrada; neste desafio, usaremos números naturais com a distância comum d(a, b) := abs(a - b)
. A distância de Hausdorff entre dois conjuntos finitos não vazios A
e B
é dada por
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))
em notação semelhante a Python. A distância de Hausdorff pode ser calculada encontrando-se o elemento A
para o qual a distância até o elemento mais próximo B
é máxima e o elemento B
para o qual a distância até o elemento mais próximo A
é máxima e, em seguida, aproveitando o máximo dessas distâncias. Em outras palavras, se a distância de Hausdorff é d
, então todo elemento de A
está dentro da distância d
de algum elemento de B
e vice-versa.
Entrada
Sua entrada é uma lista única de números inteiros. Ele contém apenas os elementos 0,1,2,3
, o que significa se o índice especificado da lista é um elemento de nem A
nem B
, somente A
, apenas B
ou ambos A
e B
. Por exemplo, a entrada [0,1,1,0,2,3]
significa isso A = {1,2,5}
e B = {4,5}
, se usarmos a indexação baseada em 0 (o que não faz diferença, pois nossas métricas são invariantes à conversão).
Saída
Sua saída é a distância de Hausdorff entre A
e B
; no exemplo acima, é 3
. Se um dos conjuntos estiver vazio, a distância não será definida e você retornará -1
.
Regras
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
[] -> -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
A
esteja muito próximo de um de B
, mas há elementos B
muito distantes A
(por exemplo, se A
for um subconjunto de B
). Nesse caso, a fórmula curta está incorreta.
max(max(min(d(a, b) for b in B) for a in A))
deveria ser suficiente. Isso ocorre porqued(a,b)
retorna o valor absoluto e, portanto, ambas as funções max retornam o mesmo número todas as vezes.