Фон
Я хочу побудувати паркан. Для цього я зібрав купу жердин і приклеїв їх до землі. Я також зібрав багато дощок, які я прибиваю до стовпів, щоб зробити фактичний паркан. Я, як правило, захоплююсь будівельними матеріалами, і, швидше за все, я просто продовжуватиму прибивати дошки до стовпів, поки не знайдеться більше місця для їх розміщення. Я хочу, щоб ви перерахували можливі огорожі, якими я можу закінчитись.
Вхідні дані
Ваш вхід - це перелік двовимірних цілих координат, що представляють положення полюсів, у будь-якому зручному форматі. Ви можете припустити, що він не містить дублікатів, але ви не можете припустити нічого про його порядок.
Дошки представлені прямими лініями між стовпами, а для простоти ми вважаємо лише горизонтальні та вертикальні дошки. Дві полюси можуть бути з'єднані дошкою, якщо між ними немає інших стовпів або дощок, тобто дошки не можуть перетинатися один з одним. Розташування стовпів і дощок є максимальним, якщо до нього не можна додавати нових дощок (рівно, що між будь-якими двома полюсами з горизонтальним або вертикальним рівнем є або жердина, або дошка).
Вихідні дані
Ваш вихід - це кількість максимальних розташувань, які можна побудувати за допомогою полюсів.
Приклад
Розглянемо список вводу
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Якщо зверху подивитися, відповідне розташування жердин виглядає приблизно так:
o
o o
o o
o o
o
Існує рівно три максимальних розташування, які можна побудувати за допомогою цих полюсів:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
Таким чином, правильний вихід 3
.
Правила
Ви можете написати або функцію, або повну програму. Виграє найменший байт, а стандартні лазівки заборонені.
Випробування
[] -> 1
[(0,0),(1,1),(2,2)] -> 1
[(0,0),(1,0),(2,0)] -> 1
[(0,0),(0,1),(1,0),(1,1)] -> 1
[(1,0),(0,1),(-1,0),(0,-1)] -> 2
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1)] -> 4
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(0,-1),(2,2)] -> 5
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1),(2,2)] -> 8
(0,-2)
, хороший улов. Зараз змінюється.