introduction
La distance de Hausdorff mesure la différence entre deux sous-ensembles d'un espace métrique. Intuitivement, un espace métrique n'est qu'un ensemble avec une fonction de distance intégrée; dans ce défi, nous utiliserons des nombres naturels avec la distance ordinaire d(a, b) := abs(a - b)
. La distance de Hausdorff entre deux ensembles finis non vides A
et B
est donnée par
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 notation de type Python. La distance de Hausdorff peut être calculée en trouvant l'élément A
dont la distance à l'élément le plus proche de B
est maximale, et l'élément B
dont la distance à l'élément le plus proche A
est maximale, puis en prenant le maximum de ces distances. En d'autres termes, si la distance de Hausdorff est d
, alors chaque élément de se A
trouve à distance d
d'un élément de B
, et vice versa.
Contribution
Votre entrée est une seule liste d'entiers. Il ne contient que les éléments 0,1,2,3
, ce qui signifie si l'index donné de la liste est un élément ni A
ni B
, seulement A
, seulement B
, ou les deux A
et B
. Par exemple, l'entrée [0,1,1,0,2,3]
signifie cela A = {1,2,5}
et B = {4,5}
, si nous utilisons une indexation basée sur 0 (ce qui ne fait aucune différence, car nos métriques sont invariantes par rapport à la traduction).
Production
Votre sortie est la distance de Hausdorff entre A
et B
; dans l'exemple ci-dessus, c'est le cas 3
. Si l'un des ensembles est vide, la distance n'est pas définie et vous reviendrez -1
.
Règles
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
[] -> -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
soit très proche de l'un B
, mais il y a des éléments de B
très loin de A
(par exemple, si A
est un sous-ensemble de B
). Dans ce cas, la formule courte est incorrecte.
max(max(min(d(a, b) for b in B) for a in A))
devrait être suffisant. En effet,d(a,b)
renvoie la valeur absolue, et donc les deux fonctions max renverront le même nombre à chaque fois.