Вступ
Відстань Хаусдорфа вимірює різницю між двома підмножинами метричного простору. Інтуїтивно зрозумілий, метричний простір - це лише деякий набір із вбудованою функцією відстані; у цьому виклику ми будемо використовувати натуральні числа зі звичайною відстані d(a, b) := abs(a - b)
. Відстань Хаусдорфа між двома не порожніми кінцевими множинами A
і B
задається числом
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))
в Python-подібних позначеннях. Відстань Хаусдорфа можна обчислити, знайшовши елемент, A
для якого відстань до найближчого елемента B
максимум, і елемент, B
для якого відстань до найближчого елемента A
максимум, і потім взяти максимум цих відстаней. Іншими словами, якщо відстань Хаусдорфа є d
, то кожен елемент елемента A
знаходиться в межах відстані d
якогось елемента B
, і навпаки.
Вхідні дані
Ваш вхід - це єдиний список цілих чисел. Він містить лише елементи 0,1,2,3
, які означають, чи даний індекс списку є елементом ні, A
ні B
, тільки A
, тільки B
, або і те A
і інше B
. Наприклад, введення [0,1,1,0,2,3]
означає, що, A = {1,2,5}
і B = {4,5}
якщо ми використовуємо індексацію на основі 0 (це не має значення, оскільки наші показники є інваріантними перекладами).
Вихідні дані
Ваш вихід - відстань Хаусдорфа між A
і B
; у наведеному прикладі це так 3
. Якщо будь-який набір порожній, то відстань не визначається, і ви повернетесь -1
.
Правила
Ви можете написати повну програму або функцію. Виграє найменший кількість байтів, а стандартні лазівки заборонені.
Випробування
[] -> -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
дуже близький до одного з B
, але є елементи, B
дуже далекі від A
(наприклад, якщо A
це підмножина B
). У цьому випадку коротка формула є неправильною.
max(max(min(d(a, b) for b in B) for a in A))
повинно бути достатньо. Це тому, щоd(a,b)
повертає абсолютне значення, і тому обидві функції max повертають однакове число кожного разу.