fundo
Eu quero construir uma cerca. Para isso, coletei vários postes e os colei no chão. Também colecionei muitas pranchas que pregarei nos bastões para fazer a cerca. Costumo me empolgar ao construir coisas, e provavelmente continuarei pregando as tábuas nos postes até que não haja mais lugar para colocá-las. Eu quero que você enumere as possíveis cercas que eu possa acabar.
Entrada
Sua entrada é uma lista de coordenadas inteiras bidimensionais que representam as posições dos polos, em qualquer formato conveniente. Você pode assumir que ele não contém duplicatas, mas não pode assumir nada sobre sua ordem.
As placas são representadas por linhas retas entre os pólos e, por simplicidade, consideramos apenas placas horizontais e verticais. Dois pólos podem ser unidos por uma placa se não houver outros pólos ou placas entre eles, o que significa que as placas não podem se cruzar. Um arranjo de postes e placas é máximo se nenhuma nova placa puder ser adicionada a ela (equivalentemente, existe um poste ou uma placa entre dois postes alinhados horizontal ou verticalmente).
Resultado
Sua saída é o número de arranjos máximos que podem ser construídos usando os pólos.
Exemplo
Considere a lista de entrada
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Visto de cima, o arranjo correspondente dos pólos é mais ou menos assim:
o
o o
o o
o o
o
Existem exatamente três disposições máximas que podem ser construídas usando esses polos:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
Assim, a saída correta é 3
.
Regras
Você pode escrever uma função ou um programa completo. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
[] -> 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)
, boa captura. Mudando agora.