Zestaw punktów spełniony w kształcie arbor jest dwuwymiarowym zestawem punktów, w którym dla dowolnego prostokąta wyrównanego do osi, który można utworzyć za pomocą dwóch punktów w zestawie jako przeciwległych narożników, ten prostokąt zawiera lub dotyka co najmniej jednego innego punktu. Oto równoważna definicja z Wikipedii:
Mówi się, że zbiór punktów jest spełniony, jeśli zachowana jest następująca właściwość: dla dowolnej pary punktów, które nie leżą na tej samej linii poziomej lub pionowej, istnieje trzeci punkt, który leży w prostokącie rozciągniętym przez dwa pierwsze punkty ( w środku lub na granicy).
Poniższy obraz ilustruje tworzenie prostokątów. Ten zestaw punktów NIE jest spełniony, ponieważ ten prostokąt musi zawierać co najmniej jeszcze jeden punkt.
W sztuce ASCII ten zestaw punktów można przedstawić jako:
......
....O.
......
.O....
......
Niewielka modyfikacja może sprawić, że będzie to zadowalające:
......
....O.
......
.O..O.
......
Powyżej widać, że wszystkie prostokąty (których jest tylko jeden) zawierają co najmniej trzy punkty.
Oto kolejny przykład bardziej złożonego zestawu punktów, który jest spełniony w arborach:
W przypadku dowolnego prostokąta, który można narysować obejmującego dwa punkty, prostokąt ten zawiera co najmniej jeden inny punkt.
Wyzwanie
Biorąc pod uwagę prostokątną siatkę punktów (którą reprezentuję O
) i pustą przestrzeń (którą reprezentuję .
), wyprowadzaj prawdziwą wartość, jeśli jest zadowalająca, lub wartość falsey, jeśli nie jest. To jest golf golfowy.
Dodatkowe zasady:
- Można zdecydować się na znaki
O
i.
zamieniłem się z żadną inną parą znaków ASCII. Po prostu określ, jakiego mapowania znaków używa Twój program. - Siatka zawsze będzie prostokątna. Dopuszczalny jest końcowy znak nowej linii.
Więcej przykładów
Arborally zadowolony:
.OOO.
OO...
.O.OO
.O..O
....O
..O..
OOOO.
...O.
.O.O.
...OO
O.O.
..O.
OOOO
.O.O
OO..
...
...
...
...
..O
...
O.....
O.O..O
.....O
OOO.OO
Niezadowolony z arborally:
..O..
O....
...O.
.O...
....O
..O..
O.OO.
...O.
.O.O.
...OO
O.....
..O...
.....O
Odpowiedzi:
Ślimaki , 29
30 39bajtówDziała poprzez wykreślenie 2 boków prostokąta, a następnie sprawdzenie, czy jest jakiś kwadrat zawierający O, tak że podróżowanie w linii prostej od kwadratu w 2 głównych kierunkach spowoduje uderzenie w bok prostokąta.
Drukuje maksymalnie 1 i pole siatki, jeśli dane wejściowe są „zadowalające pod względem arborowym”; w przeciwnym razie 0.
źródło
Oracle SQL 11.2,
364344 bajty: g to siatka jako ciąg znaków
: w to szerokość siatki
Nie zwraca wiersza jako prawdziwego, zwraca prostokąty, które nie spełniają kryteriów, jako fałsz
Nie grał w golfa
Widok v oblicza współrzędne każdego punktu O.
Pierwsza część minus zwraca wszystkie prostokąty, klauzula where zapewnia, że punkt nie może być sparowany ze sobą.
Druga część szuka trzeciego punktu w każdym prostokącie. Ten punkt musi mieć jedną współrzędną, x lub y, równą tej współrzędnej dla jednego z dwóch punktów definiujących prostokąt. Druga współrzędna tego trzeciego punktu musi znajdować się w zakresie ograniczonym przez tę współrzędną dla każdego punktu definiującego prostokąt.
Ostatnia część klauzuli where zapewnia, że trzeci punkt nie jest jednym z dwóch punktów definiujących prostokąt.
Jeśli wszystkie prostokąty mają co najmniej trzeci punkt, wówczas pierwsza część minus jest równa drugiej części, a zapytanie nic nie zwraca.
źródło
MATL , 38 bajtów
Wykorzystuje tablicę znaków 2D jako dane wejściowe, z wierszami oddzielonymi przez
;
. Tak więc pierwszym przykładem jestPozostałe przypadki testowe w tym formacie są następujące.
Arborally zadowolony:
Niezadowolony z altanki:
Wypróbuj online! Możesz także zweryfikować wszystkie przypadki testowe jednocześnie .
Wyjaśnienie
Kod najpierw pobiera współrzędne znaków
O
na wejściu. Następnie używa dwóch zagnieżdżonych pętli. Zewnętrzna pętla wybiera każdy punkt P (2-krotność swoich współrzędnych), porównuje ze wszystkimi punktami i utrzymuje punkty, które różnią się od P w dwóch współrzędnych. Są to punkty, które mogą tworzyć prostokąt z P. Nazwij je zbiorem R.Pętla wewnętrzna wybiera każdy punkt T z R i sprawdza, czy prostokąt zdefiniowany przez P i T zawiera co najmniej 3 punkty. Aby to zrobić, odejmuje P od wszystkich punktów; to znaczy przesuwa początek współrzędnych do P. Punkt znajduje się w prostokącie, jeśli każda ze współrzędnych podzielona przez odpowiednią współrzędną T znajduje się w zamkniętym przedziale [0, 1].
źródło
PHP,
1123 bajty,851 bajtów, 657 bajtów(początkujący php)
wyjaśnienie (kod skomentowany):
źródło
C, 289 bajtów
Wymaga końcowego znaku nowej linii, co jest dozwolone (bez nowego wiersza kod byłby o dwa bajty większy). Wyjścia 0 (niezadowolony z arborum) lub 1 (zadowolony z arborum).
źródło