Introducción
La distancia de Hausdorff mide la diferencia entre dos subconjuntos de un espacio métrico. Intuitivamente, un espacio métrico es solo un conjunto con una función de distancia incorporada; En este desafío, utilizaremos números naturales con la distancia ordinaria d(a, b) := abs(a - b). La distancia de Hausdorff entre dos conjuntos finitos no vacíos Ay Bestá 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))
en notación similar a Python. La distancia de Hausdorff se puede calcular encontrando el elemento Acuya distancia al elemento más cercano Bes máxima, y el elemento Bcuya distancia al elemento más cercano Aes máxima, y luego tomando el máximo de estas distancias. En otras palabras, si la distancia de Hausdorff es d, entonces cada elemento de Aestá dentro de la distancia dde algún elemento de B, y viceversa.
Entrada
Su entrada es una lista única de enteros. Solo contiene los elementos 0,1,2,3, que significan si el índice dado de la lista es un elemento de ni Atampoco B, solo A, solo Bo ambos Ay B. Por ejemplo, la entrada [0,1,1,0,2,3]significa eso A = {1,2,5}y B = {4,5}, si usamos indexación basada en 0 (lo que no hace ninguna diferencia, ya que nuestras métricas son invariables en la traducción).
Salida
Su salida es la distancia de Hausdorff entre Ay B; en el ejemplo anterior, lo es 3. Si cualquiera de los conjuntos está vacío, la distancia no está definida y usted deberá regresar -1.
Reglas
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
[] -> -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
Aesté muy cerca de uno de ellos B, pero hay elementos Bmuy alejados de A(por ejemplo, si Aes un subconjunto de B). En ese caso, la fórmula corta es incorrecta.
max(max(min(d(a, b) for b in B) for a in A))debería ser suficiente. Esto se debe a qued(a,b)devuelve el valor absoluto y, por lo tanto, ambas funciones max devolverán el mismo número cada vez.