Dadas las coordenadas de las esquinas superiores izquierdas de dos cuadrados y sus longitudes laterales, determine si los cuadrados se superponen. Un cuadrado incluye las líneas superior e izquierda, pero no las líneas inferior y derecha. Es decir, un punto (a,b)
está dentro de un cuadrado con longitud lateral k
que comienza en (x,y)
si y solo si x <= a < x+k
y y <= b < y+k
. Un cuadrado con longitud lateral 0 es degenerado y no se considerará aquí, por lo tanto, k
será positivo.
Como de costumbre, se aplican todas las reglas estándar. La entrada y la salida pueden estar en cualquier forma que sea conveniente, siempre que sea legible por humanos y no haya una precomputación. Asegúrese de especificar qué formato de entrada usa. Su código debe tomar seis números y generar una verdad si los cuadrados se superponen y falsa de lo contrario.
Casos de prueba
x1 y1 k1 x2 y2 k2 overlap?
1 1 1 0 1 1 false
0 0 3 1 1 1 true
1 1 1 0 0 3 true
0 0 3 2 1 2 true
0 0 2 1 1 2 true
1 1 2 0 0 2 true
0 1 2 1 0 2 true
1 0 2 0 1 2 true
2 0 2 0 2 2 false
1 0 3 0 1 1 false
0 2 3 0 0 2 false
Todas las entradas serán enteros no negativos. Dicho esto, espero que muchas o la mayoría de las soluciones también puedan manejar negativos y flotadores.
Respuestas:
Python, 33 bytes
Python admite cadenas de desigualdades incluso cuando apuntan en direcciones opuestas.
La coordenada x intervalos
[x,x+k)
y[X,X+K)
se superponen, siempre y cuando ninguno de los dos es totalmente a la derecha de la otra, lo que significa que extremo izquierdo de cada intervalo se deja de punto final derecho del otro intervalo.El puede combinarse en una desigualdad conjunta
-K<X-x<k
. Escribir lo mismo para las coordenadas y y empalmarlas-K
da la expresiónfuente
MATL,
14111054 bytesEsta solución acepta entradas en forma de dos matrices:
[x1, y1; x2, y2]
[k2; k1]
Pruébalo en línea
Versión ligeramente modificada para ejecutar todos los casos de prueba
Explicación
fuente
MATLAB,
3621 bytesCrea una función anónima que se puede evaluar como
ans(a,b)
. Acepta dos entradas del siguiente formato:[x1, y1; x2, y2]
.[k2; k1]
Todos los casos de prueba aquí .
Explicación
Aquí hay una solución comentada sin golf
fuente
JavaScript (ES6), 38 bytes
Si d - a ≥ c, entonces el segundo cuadrado está a la derecha del primero. Del mismo modo, las otras condiciones verifican que no esté a la izquierda, debajo o arriba.
fuente
Jalea , 8 bytes
La entrada es la lista anidada [[x1, y1, k1], [x2, y2, k2]] , la salida es la lista de todas las coordenadas incrementales de puntos con coordenadas enteras que son comunes a ambos cuadrados (falso si está vacío, verdad si no )
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
TI Basic, 36 bytes
fuente
Java, 78 bytes
fuente
Object
tipo de retorno para -1 byteOctava, 17 bytes
La misma lógica que mi respuesta MATLAB anterior, excepto que Octave admite la transmisión automática de dimensiones para que podamos reemplazarlas
[b,b]
simplementeb
.Todos los casos de prueba aquí
fuente
SmileBASIC,
7657 bytesCrea un sprite con el tamaño / posición del primer cuadrado, luego comprueba si colisiona con el segundo cuadrado.
fuente
x86-64 Código de máquina, Windows 22 bytes
Firma C ++:
Devuelve 0 si los cuadrados no se superponen y -1 (0xFFFFFFFF) de lo contrario. Las entradas son vectores de 2 enteros de 64 bits para x, y y k (
_mm_set_epi64x(x1, x2)
etc.).fuente
05AB1E , 5 bytes
Puerto de @Suever respuesta MAT 's , con la conversión adicional a consecuencia Truthy / Falsey-. Por lo tanto, el formato de entrada también es el mismo:
primera entrada como
[[x1,y1],[x2,y2]]
y segunda entrada como[k2,k1]
.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente