introduzione
La distanza di Hausdorff misura la differenza tra due sottoinsiemi di uno spazio metrico. Intuitivamente, uno spazio metrico è solo un set con una funzione di distanza integrata; in questa sfida, useremo i numeri naturali con la distanza ordinaria d(a, b) := abs(a - b). La distanza di Hausdorff tra due insiemi finiti non vuoti Aed Bè data da
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))
in notazione simile a Python. La distanza di Hausdorff può essere calcolata trovando l'elemento Aper cui la distanza dall'elemento più vicino Bè massima, e l'elemento Bper cui la distanza dall'elemento più vicino Aè massima, e quindi prendendo il massimo di queste distanze. In altre parole, se la distanza di Hausdorff è d, allora ogni elemento di Aè a distanza ddi qualche elemento di Be viceversa.
Ingresso
Il tuo input è un unico elenco di numeri interi. Contiene solo gli elementi 0,1,2,3, che indicano se il dato indice dell'elenco è un elemento di né Ané B, solo A, solo Bo entrambi Ae B. Ad esempio, l'input [0,1,1,0,2,3]significa che A = {1,2,5}e B = {4,5}, se utilizziamo l'indicizzazione basata su 0 (il che non fa alcuna differenza, poiché le nostre metriche sono invarianti per la traduzione).
Produzione
Il risultato è la distanza di Hausdorff tra Ae B; nell'esempio sopra, lo è 3. Se uno dei set è vuoto, la distanza non è definita e si dovrà tornare -1.
Regole
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi 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
Asia molto vicino a uno di B, ma ci sono elementi Bmolto lontani da A(ad esempio, se Aè un sottoinsieme di B). In tal caso, la formula breve non è corretta.
max(max(min(d(a, b) for b in B) for a in A))dovrebbe essere sufficiente. Questo perchéd(a,b)restituisce il valore assoluto e quindi entrambe le funzioni max restituiranno lo stesso numero ogni volta.