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 Aund Bist 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, Afür das die Distanz zum nächsten Element von Bmaximal ist, und das Element, Bfür das die Distanz zum nächsten Element von Amaximal ist, und dann das Maximum dieser Distanzen nimmt. Mit anderen Worten, wenn die Hausdorff-Distanz ist d, dann ist jedes Element von Ainnerhalb einer Distanz dvon einem Element von Bund 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 Anoch B, nur Anoch Boder beide Aund 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 Aund 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
Asehr nahe an einem von ist B, aber es gibt Elemente von Bsehr weit entfernt A(zum Beispiel, wenn Aes 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.