tło
Chcę zbudować ogrodzenie. W tym celu zebrałem kilka tyczek i przyłożyłem je do ziemi. Zebrałem też wiele desek, które przykleję do słupów, aby zrobić prawdziwe ogrodzenie. Podczas budowania przedmiotów mam tendencję do uniesienia się i najprawdopodobniej po prostu przybijam deski do tyczek, dopóki nie będzie już miejsca na ich ułożenie. Chcę, żebyś wyliczył możliwe ogrodzenia, z którymi mogę skończyć.
Wejście
Twoje dane wejściowe to lista dwuwymiarowych współrzędnych całkowitych reprezentujących pozycje biegunów, w dowolnym dogodnym formacie. Możesz założyć, że nie zawiera duplikatów, ale nie możesz zakładać niczego o jego kolejności.
Deski są reprezentowane przez proste linie między biegunami, a dla uproszczenia rozważamy tylko poziome i pionowe deski. Deska może być połączona z dwoma biegunami, jeśli nie ma między nimi innych biegunów lub desek, co oznacza, że deski nie mogą się przecinać. Rozmieszczenie biegunów i desek jest maksymalne, jeśli nie można do niego dodać żadnych nowych desek (równoważnie, między dowolnymi dwoma biegunami ustawionymi poziomo lub pionowo jest słup lub deska).
Wynik
Twój wynik to liczba maksymalnych układów, które można zbudować za pomocą biegunów.
Przykład
Rozważ listę danych wejściowych
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
Patrząc z góry odpowiedni układ biegunów wygląda mniej więcej tak:
o
o o
o o
o o
o
Istnieją dokładnie trzy maksymalne układy, które można zbudować za pomocą tych biegunów:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
Zatem prawidłowe wyjście to 3
.
Zasady
Możesz napisać funkcję lub pełny program. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
[] -> 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)
dobry połów. Zmieniam się teraz.