Un conjunto de puntos satisfactoriamente arboralmente es un conjunto de puntos 2D de tal manera que, para cualquier rectángulo alineado con un eje que se pueda formar utilizando dos puntos en el conjunto como esquinas opuestas, ese rectángulo contiene o toca al menos otro punto. Aquí hay una definición equivalente de Wikipedia:
Se dice que un conjunto de puntos se satisface arboralmente si se cumple la siguiente propiedad: para cualquier par de puntos que no se encuentren en la misma línea horizontal o vertical, existe un tercer punto que se encuentra en el rectángulo atravesado por los dos primeros puntos ( ya sea dentro o en el límite).
La siguiente imagen ilustra cómo se forman los rectángulos. Este conjunto de puntos NO se satisface arboralmente porque este rectángulo necesita contener al menos un punto más.
En el arte ASCII, este conjunto de puntos se puede representar como:
......
....O.
......
.O....
......
Una ligera modificación puede hacer que esto esté satisfecho:
......
....O.
......
.O..O.
......
Arriba, puede ver que todos los rectángulos (de los cuales solo hay uno) contienen al menos tres puntos.
Aquí hay otro ejemplo de un conjunto de puntos más complejo que se satisface arboralmente:
Para cualquier rectángulo que se pueda dibujar que abarque dos puntos, ese rectángulo contiene al menos otro punto.
El reto
Dada una cuadrícula rectangular de puntos (que represento con O
) y un espacio vacío (con el que represento .
), genera un valor verdadero si se satisface arboralmente, o un valor falsey si no lo es. Este es el código de golf.
Reglas adicionales:
- Puede elegir tener los caracteres
O
e.
intercambiarlos con cualquier otro par de caracteres ASCII imprimibles. Simplemente especifique qué mapeo de caracteres usa su programa. - La cuadrícula siempre será rectangular. Se permite una nueva línea final.
Más ejemplos
Arboralmente satisfecho:
.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
No Arboralmente Satisfecho:
..O..
O....
...O.
.O...
....O
..O..
O.OO.
...O.
.O.O.
...OO
O.....
..O...
.....O
Respuestas:
Caracoles , 29
30 39bytesFunciona trazando 2 lados del rectángulo y luego verificando si hay algún cuadrado que contenga una O tal que viajar en línea recta desde el cuadrado en 2 direcciones cardinales resulte en golpear un lado del rectángulo.
Imprime el máximo de 1 y el área de la cuadrícula si la entrada está "satisfecha de forma arboral"; de lo contrario 0.
fuente
Oracle SQL 11.2,
364344 bytes: g es la cuadrícula como una cadena
: w es el ancho de la cuadrícula
No devuelve ninguna línea como verdadera, devuelve los rectángulos que no coinciden con los criterios como falso
Sin golf
La vista v calcula las coordenadas de cada punto O.
La primera parte del signo menos devuelve todos los rectángulos, la cláusula where asegura que un punto no se puede emparejar consigo mismo.
La segunda parte busca un tercer punto en cada rectángulo. Ese punto debe tener una coordenada, x o y, igual a esa coordenada para uno de los dos puntos que definen el rectángulo. La otra coordenada de ese tercer punto debe estar en el rango delimitado por esa coordenada para cada uno de los puntos que definen el rectángulo.
La última parte de la cláusula where asegura que el tercer punto no es uno de los dos puntos que definen el rectángulo.
Si todos los rectángulos tienen al menos un tercer punto, entonces la primera parte del signo menos es igual a la segunda parte y la consulta no devuelve nada.
fuente
MATL , 38 bytes
Esto utiliza una matriz de caracteres 2D como entrada, con filas separadas por
;
. Entonces el primer ejemplo esEl resto de los casos de prueba en este formato son los siguientes.
Arboralmente satisfecho:
No satisfecho con el arboral:
Pruébalo en línea! También puede verificar todos los casos de prueba a la vez .
Explicación
El código primero obtiene las coordenadas de los caracteres
O
en la entrada. Luego usa dos bucles anidados. El bucle externo selecciona cada punto P (2-tuplas de sus coordenadas), se compara con todos los puntos y mantiene puntos que difieren de P en las dos coordenadas. Esos son los puntos que pueden formar un rectángulo con P. Llámalos conjunto R.El bucle interno selecciona cada punto T de R y verifica si el rectángulo definido por P y T incluye al menos 3 puntos. Para hacer eso, resta P de todos los puntos; es decir, mueve el origen de las coordenadas a P. Un punto está en el rectángulo si cada una de sus coordenadas dividida por la coordenada correspondiente de T está en el intervalo cerrado [0, 1].
fuente
PHP,
1123 bytes,851 bytes, 657 bytes(novato php)
explicación (código comentado):
fuente
C, 289 bytes
Requiere una nueva línea final, que está permitida (sin la nueva línea, el código sería dos bytes más grande). Salidas 0 (no satisfecho con el arboral) o 1 (satisfecho con el arboral)
fuente