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 Aet Best 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 Adont la distance à l'élément le plus proche de Best maximale, et l'élément Bdont la distance à l'élément le plus proche Aest 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 Atrouve à distance dd'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 Ani B, seulement A, seulement B, ou les deux Aet 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 Aet 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
Asoit très proche de l'un B, mais il y a des éléments de Btrès loin de A(par exemple, si Aest 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.