Um conjunto de pontos satisfeito de forma arborizada é um conjunto de pontos 2D de modo que, para qualquer retângulo alinhado ao eixo que possa ser formado usando dois pontos no conjunto como cantos opostos, esse retângulo contenha ou toque em pelo menos um outro ponto. Aqui está uma definição equivalente da Wikipedia:
Diz-se que um conjunto de pontos é satisfeito de forma arborizada se a seguinte propriedade for válida: para qualquer par de pontos que não estejam na mesma linha horizontal ou vertical, existe um terceiro ponto que fica no retângulo estendido pelos dois primeiros pontos ( dentro ou no limite).
A imagem a seguir ilustra como os retângulos são formados. Esse conjunto de pontos NÃO é satisfeito de forma arborizada porque esse retângulo precisa conter pelo menos mais um ponto.
Na arte ASCII, esse conjunto de pontos pode ser representado como:
......
....O.
......
.O....
......
Uma leve modificação pode fazer com que isso seja satisfeito de forma arborizada:
......
....O.
......
.O..O.
......
Acima, você pode ver que todos os retângulos (dos quais existe apenas um) contêm pelo menos três pontos.
Aqui está outro exemplo de um conjunto de pontos mais complexo que é satisfeito de forma arborizada:
Para qualquer retângulo que possa ser desenhado com dois pontos, esse retângulo contém pelo menos um outro ponto.
O desafio
Dada uma grade retangular de pontos (que represento com O
) e do espaço vazio (que represento com .
), a saída de um truthy valor se for arborally satisfeito, ou um Falsey valor se ele não é. Isso é código-golfe.
Regras adicionais:
- Você pode optar por ter os caracteres
O
e.
trocá-los por qualquer outro par de caracteres ASCII imprimíveis. Simplesmente especifique qual mapeamento de caracteres seu programa usa. - A grade sempre será retangular. Uma nova linha à direita é permitida.
Mais exemplos
Arborally satisfeito:
.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
Não está satisfeito de forma arborizada:
..O..
O....
...O.
.O...
....O
..O..
O.OO.
...O.
.O.O.
...OO
O.....
..O...
.....O