El reto
Dada una cantidad arbitraria de rectángulos, genera el recuento total de intersecciones de aquellos cuando se dibuja en un plano 2D.
Una intersección aquí se define como un punto P
que está cruzado por dos líneas que son ortogonales entre sí y ambas no terminan en P
.
Ejemplo
Cada rectángulo aquí se denota por una tupla de 2 con las coordenadas de la esquina superior izquierda primero y las coordenadas de la esquina inferior derecha segundo.
[(-8,6), (- 4, -2)] [(-4,9), (4,3)] [(2,10), (14,4)] [(1,7), (10, -6)] [(7,4), (10,2)] [(5,2), (9, -4)] [(-6, -4), (- 2, -6)]
Esos rectángulos crean 6 intersecciones, que tiene que ser su salida.
- Como puede ver en la imagen de arriba, tocar rectángulos no creará intersecciones aquí y no se cuentan.
- Puede codificar los rectángulos en el formato que desee. Deje en claro qué formato usa.
- Si varios rectángulos se cruzan en el mismo punto, solo cuenta como una intersección.
- Las coordenadas siempre serán enteros.
- No habrá ningún rectángulo duplicado en la entrada.
- Siempre obtendrá al menos un rectángulo como entrada.
- No puede usar ningún componente incorporado que resuelva este problema directamente. Además, no puede usar los componentes integrados que resuelven ecuaciones. Todas las demás construcciones están permitidas.
- La salida debe ser un número entero único que indique el recuento de intersección.
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
Mismo formato que en el ejemplo anterior. Los rectángulos están envueltos en una lista.
[[(-8,6), (- 4, -2)], [(- 4,9), (4,3)], [(2,10), (14,4)], [(1 , 7), (10, -6)], [(7,4), (10,2)], [(5,2), (9, -4)], [(- 6, -4), (-2, -6)]] -> 6 [[(-2,2), (6, -4)]] -> 0 [[(-12,10), (- 8,6)], [(- 14,6), (- 10,2)], [(- 10,6), (- 6,2)]] - > 0 [[(-4,10), (6,2)], [(- 2,8), (4,3)], [(1,6), (8,4)], [(2,11 ), (5,5)]] -> 10 [[(8,2), (12, -2)], [(10,0), (14, -4)]] -> 2 [[(0,2), (2,0)], [(0,1), (3,0)]] -> 1 [[(-10, -2), (- 6, -6)], [(- 6, -2), (- 2, -6)], [(- 8, -4), (- 4, -8)]] -> 3
¡Feliz codificación!
[[(0,0),(1,2)],[(0,0),(2,1)]]
¿tendría 1 intersección?Respuestas:
JavaScript (ES6), 186 bytes
Divide cada rectángulo en sus líneas componentes, luego intersecta las líneas horizontales y verticales, formando una lista de intersecciones para evitar duplicados.
fuente
[[-4,10,6,2],[-2,8,4,3],[1,6,8,4],[2,11,5,5]]
. Como JavaScript no tiene tuplas, si hubiera intentado usar sus ejemplos literalmente, habría activado el operador de coma, invalidando la entrada.Mathematica 138 bytes
¡Sin terminar! Esto funciona para todos los casos excepto
[[(0,0),(1,2)],[(0,0),(2,1)]]
Ejemplo
fuente