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 Ae 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 Apara o qual a distância até o elemento mais próximo Bé máxima e o elemento Bpara 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 Aestá dentro da distância dde algum elemento de Be 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 Anem B, somente A, apenas Bou ambos Ae 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 Ae 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
Aesteja muito próximo de um de B, mas há elementos Bmuito distantes A(por exemplo, se Afor 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.