Einführung
Die Hausdorff-Distanz misst die Differenz zwischen zwei Teilmengen eines metrischen Raums. Intuitiv ist ein metrischer Raum nur ein Teil mit einer eingebauten Distanzfunktion. In dieser Herausforderung werden wir natürliche Zahlen mit der gewöhnlichen Distanz verwenden d(a, b) := abs(a - b)
. Der Hausdorff-Abstand zwischen zwei nicht leeren endlichen Mengen A
und B
ist gegeben durch
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 Python-ähnlicher Notation. Die Hausdorff-Distanz kann berechnet werden, indem man das Element findet, A
für das die Distanz zum nächsten Element von B
maximal ist, und das Element, B
für das die Distanz zum nächsten Element von A
maximal ist, und dann das Maximum dieser Distanzen nimmt. Mit anderen Worten, wenn die Hausdorff-Distanz ist d
, dann ist jedes Element von A
innerhalb einer Distanz d
von einem Element von B
und umgekehrt.
Eingang
Ihre Eingabe ist eine einzelne Liste von ganzen Zahlen. Es enthält nur die Elemente 0,1,2,3
, die angeben, ob der angegebene Index der Liste weder A
noch B
, nur A
noch B
oder beide A
und enthält B
. Zum Beispiel [0,1,1,0,2,3]
bedeutet die Eingabe , dass A = {1,2,5}
und B = {4,5}
, wenn wir eine 0-basierte Indizierung verwenden (was keinen Unterschied macht, da unsere Metriken übersetzungsinvariant sind).
Ausgabe
Ihre Ausgabe ist die Hausdorff-Distanz zwischen A
und B
; im obigen Beispiel ist es 3
. Wenn einer der Sätze leer ist, ist die Entfernung nicht definiert, und Sie kehren zurück -1
.
Regeln
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
[] -> -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
sehr nahe an einem von ist B
, aber es gibt Elemente von B
sehr weit entfernt A
(zum Beispiel, wenn A
es eine Teilmenge von ist B
). In diesem Fall ist die Kurzformel falsch.
max(max(min(d(a, b) for b in B) for a in A))
dass es ausreichen sollte. Dies liegt daran, dassd(a,b)
der absolute Wert zurückgegeben wird und daher beide max-Funktionen jedes Mal dieselbe Zahl zurückgeben.