Вступ
Відстань Хаусдорфа вимірює різницю між двома підмножинами метричного простору. Інтуїтивно зрозумілий, метричний простір - це лише деякий набір із вбудованою функцією відстані; у цьому виклику ми будемо використовувати натуральні числа зі звичайною відстані 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 повертають однакове число кожного разу.