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 A
ed 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 A
per cui la distanza dall'elemento più vicino B
è massima, e l'elemento B
per 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 d
di qualche elemento di B
e 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é A
né B
, solo A
, solo B
o entrambi A
e 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 A
e 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
A
sia molto vicino a uno di B
, ma ci sono elementi B
molto 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.