Antecedentes
Quiero construir una cerca. Para eso, he recogido un montón de postes y los he pegado al suelo. También he reunido muchas tablas que clavaré a los postes para hacer la cerca real. Tiendo a dejarme llevar cuando construyo cosas, y lo más probable es que siga clavando las tablas en los postes hasta que no haya más lugar para colocarlas. Quiero que enumeres las posibles vallas con las que puedo terminar.
Entrada
Su entrada es una lista de coordenadas enteras bidimensionales que representan las posiciones de los polos, en cualquier formato conveniente. Puede suponer que no contiene duplicados, pero no puede suponer nada sobre su orden.
Los tableros están representados por líneas rectas entre los polos, y por simplicidad, solo consideramos tableros horizontales y verticales. Una tabla puede unir dos postes si no hay otros postes o tablas entre ellos, lo que significa que las tablas no pueden cruzarse entre sí. Una disposición de postes y tableros es máxima si no se le pueden agregar nuevos tableros (de manera equivalente, hay un poste o un tablero entre dos postes alineados horizontal o verticalmente).
Salida
Su salida es el número de arreglos máximos que se pueden construir utilizando los polos.
Ejemplo
Considere la lista de entrada
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Visto desde arriba, la disposición correspondiente de los postes se ve así:
o
o o
o o
o o
o
Hay exactamente tres arreglos máximos que se pueden construir utilizando estos 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
Por lo tanto, la salida correcta es 3
.
Reglas
Puede escribir una función o un programa completo. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
[] -> 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)
, buena captura. Cambiando ahora.