Contexte
Je veux construire une clôture. Pour cela, j'ai rassemblé un tas de poteaux et les ai collés au sol. J'ai également rassemblé beaucoup de planches que je clouerai aux poteaux pour faire la clôture réelle. J'ai tendance à m'emporter lors de la construction de trucs, et je vais probablement continuer à clouer les planches aux poteaux jusqu'à ce qu'il n'y ait plus de place pour les mettre. Je veux que vous énumériez les clôtures possibles avec lesquelles je peux me retrouver.
Contribution
Votre entrée est une liste de coordonnées entières bidimensionnelles représentant les positions des pôles, dans n'importe quel format pratique. Vous pouvez supposer qu'il ne contient aucun doublon, mais vous ne pouvez rien supposer de son ordre.
Les planches sont représentées par des lignes droites entre les pôles, et pour simplifier, nous ne considérons que les planches horizontales et verticales. Deux poteaux peuvent être joints par une planche s'il n'y a pas d'autres poteaux ou planches entre eux, ce qui signifie que les planches ne peuvent pas se croiser. Un arrangement de poteaux et de panneaux est maximal si aucun nouveau panneau ne peut y être ajouté (de manière équivalente, il y a un poteau ou un panneau entre deux poteaux alignés horizontalement ou verticalement).
Production
Votre sortie est le nombre d'arrangements maximaux qui peuvent être construits à l'aide des pôles.
Exemple
Considérez la liste d'entrée
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Vu de dessus, l'agencement correspondant des poteaux ressemble à ceci:
o
o o
o o
o o
o
Il existe exactement trois dispositions maximales qui peuvent être construites à l'aide de ces pôles:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
Ainsi, la sortie correcte est 3
.
Règles
Vous pouvez écrire soit une fonction soit un programme complet. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
[] -> 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)
bonne prise. En train de changer maintenant.