Фон
Я хочу построить забор. Для этого я собрал несколько столбов и прикрепил их к земле. Я также собрал много досок, которые я прибил к полюсам, чтобы сделать настоящий забор. Я склонен увлекаться сборкой вещей, и, скорее всего, я просто буду прибивать доски к столбам, пока не останется места для их размещения. Я хочу, чтобы вы перечислили возможные заборы, которые я могу закончить.
вход
Ваш ввод представляет собой список двумерных целочисленных координат, представляющих положения полюсов, в любом удобном формате. Вы можете предположить, что он не содержит дубликатов, но вы не можете ничего сказать о его порядке.
Доски представлены прямыми линиями между полюсами, и для простоты мы рассмотрим только горизонтальные и вертикальные доски. Два полюса могут быть соединены доской, если между ними нет других полюсов или досок, то есть доски не могут пересекать друг друга. Расположение столбов и досок является максимальным, если к нему нельзя добавить новые доски (эквивалентно, между любыми двумя горизонтально или вертикально выровненными полюсами есть либо столб, либо доска.
Вывод
Ваш вывод - это количество максимальных аранжировок, которые могут быть построены с использованием полюсов.
пример
Рассмотрим список ввода
[(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)
, хороший улов. Меняется сейчас.