Hintergrund
Ich möchte einen Zaun bauen. Dafür habe ich ein paar Stangen gesammelt und auf den Boden geklebt. Ich habe auch viele Bretter gesammelt, die ich an die Stangen nageln werde, um den eigentlichen Zaun herzustellen. Ich neige dazu, mich beim Bauen mitreißen zu lassen, und höchstwahrscheinlich werde ich die Bretter so lange an die Stangen nageln, bis es keinen Platz mehr gibt, an dem ich sie platzieren kann. Ich möchte, dass Sie die möglichen Zäune aufzählen, mit denen ich enden kann.
Eingang
Ihre Eingabe ist eine Liste zweidimensionaler ganzzahliger Koordinaten, die die Positionen der Pole in einem beliebigen geeigneten Format darstellen. Sie können davon ausgehen, dass es keine Duplikate enthält, aber Sie können nichts über die Reihenfolge annehmen.
Die Bretter werden durch gerade Linien zwischen den Polen dargestellt, und der Einfachheit halber betrachten wir nur horizontale und vertikale Bretter. Zwei Pole können durch ein Brett verbunden werden, wenn sich keine anderen Pole oder Bretter zwischen ihnen befinden, was bedeutet, dass sich die Bretter nicht kreuzen können. Eine Anordnung von Polen und Brettern ist maximal, wenn keine neuen Bretter hinzugefügt werden können (äquivalent dazu befindet sich zwischen zwei horizontal oder vertikal ausgerichteten Polen entweder ein Pol oder ein Brett).
Ausgabe
Ihre Ausgabe ist die Anzahl der maximalen Anordnungen, die unter Verwendung der Pole konstruiert werden können.
Beispiel
Betrachten Sie die Eingabeliste
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Von oben gesehen sieht die entsprechende Anordnung der Pole ungefähr so aus:
o
o o
o o
o o
o
Es gibt genau drei maximale Anordnungen, die unter Verwendung dieser Pole konstruiert werden können:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
Somit ist die korrekte Ausgabe 3
.
Regeln
Sie können entweder eine Funktion oder ein vollständiges Programm schreiben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Testfälle
[] -> 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)
, guter Fang. Jetzt ändern.