Dadas las coordenadas de los centros y los radios de 2 círculos, genera un valor verdadero de si se superponen o no.
Entrada
La entrada se puede tomar a través de STDIN o equivalente, argumentos de función, pero no como una variable. Puede tomarlos como una sola variable (lista, cadena, etc.) o como múltiples entradas / argumentos, en el orden que desee.
La entrada será de seis flotadores. Estas carrozas serán de hasta 3 decimales. Las coordenadas pueden ser positivas o negativas. Los radios serán positivos.
Salida
La salida puede ser a través de STDOUT o retorno de función.
El programa debe tener exactamente 2 salidas distintas: una para un valor Verdadero (los círculos se superponen) y otra para una salida Falsa (no se superponen).
Casos de prueba
(La entrada se proporciona como una lista de tuplas [(x1, y1, r1), (x2, y2, r2)]
para los casos de prueba; puede tomar la entrada en cualquier formato)
Cierto
[(5.86, 3.92, 1.670), (11.8, 2.98, 4.571)]
[(8.26, -2.72, 2.488), (4.59, -2.97, 1.345)]
[(9.32, -7.77, 2.8), (6.21, -8.51, 0.4)]
Falso
[(4.59, -2.97, 1.345), (11.8, 2.98, 4.571)]
[(9.32, -7.77, 2.8), (4.59, -2.97, 1.345)]
[(5.86, 3.92, 1.670), (6.21, -8.51, 0.4)]
Este es Code Golf, la respuesta más corta en bytes gana.
Respuestas:
Jalea , 5 bytes
Toma dos números complejos (centros) como primer argumento y dos números reales (radios) como segundo argumento.
Pruébalo en línea!
Cómo funciona
fuente
A
aquí la norma de los "centros" del vector fila? (ÆḊ
errores en sí mismos con contenido complejo.)A
calcula las distancias de los centros como la norma de su vector de diferencia.JavaScript (ES6), 38 bytes
Toma la entrada como 6 variables distintas x1 , y1 , r1 , x2 , y2 , r2 .
Casos de prueba
Mostrar fragmento de código
fuente
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 bytes
Formato de entrada:
Pruébalo en línea
Cómo funciona
fuente
MATL , 5 bytes
El formato de entrada es:
Pruébalo en línea! O verificar todos los casos de prueba .
Cómo funciona
fuente
5
bytes (en-|
lugar deZP
)-r2
lugar der2
ayudaría porque entonces necesitaría tres diferencias, en lugar de 2 diferencias y una adición ... ¡Será mejor que corra antes de que me hunda demasiado!R , 39 bytes
toma entrada
k=c(x1,x2,y1,y2)
yr=c(r1,r2)
; vuelveFALSE
para círculos tangentes.Pruébalo en línea!
27 bytes:
Toma la entrada como una matriz con los centros del círculo dados como filas y un vector de radios.
Pruébalo en línea!
fuente
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?Python , 40 bytes
Pruébalo en línea!
Utiliza la aritmética compleja de Python para calcular la distancia entre los dos centros. Supongo que no podemos tomar los puntos de entrada directamente como números complejos, por lo que el código los expresa como
x+y*1j
.fuente
Python 3 , 45 bytes
Pruébalo en línea!
fuente
05AB1E , 6 bytes
Pruébalo en línea!
-1 byte usando en
a - b > 0
lugar de(reverse) b - a < 0
fuente
Python 3 , 45 bytes
Pruébalo en línea!
-8 bytes gracias a Neil / Step Hen
fuente
APL (Dyalog) , 10 bytes
Solicita centros de círculo como lista de dos números complejos, luego radios como lista de dos números
Pruébalo en línea!
(+/⎕)
[es] la suma de los radios>
mas grande que|
la magnitud de-/⎕
la diferencia en centrosfuente
Mathematica, 16 bytes
Entrada:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica tiene una función
RegionIntersection
incorporada, pero solo tiene 18 bytes de longitud ...Versión incorporada:
Toma 2
Disk
objetos.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
.fuente
Haskell ,
3736 bytesPruébalo en línea!
¡Gracias @AndersKaseorg por el
-1
byte!fuente
(u!v)r x y s
.Jalea , 12 bytes
Pruébalo en línea!
-2 bytes gracias a Dennis
fuente
ạ/²
mismos bytes?I
lugar de reducir por diferencia absoluta.Java (OpenJDK 8) , 38 bytes
Pruébalo en línea!
fuente
Java 8,
4138 bytesPruébalo aquí
Aparentemente, Java también tiene
Math.hypot
, que es 3 bytes más corto.EDITAR: Acabo de darme cuenta de que esta respuesta ahora es exactamente la misma que la respuesta de Java 8 de @ OlivierGrégoire , así que por favor, vota a él en lugar de a mí si te gusta la respuesta de 38 bytes.
Respuesta anterior (41 bytes) :
Pruébalo aquí
fuente
Pyth , 15 bytes
Toma entrada en el orden x1, x2, y1, y2, r1, r2
¡Banco de pruebas!
fuente
Perl 6 , 13 bytes
Pruébalo en línea!
Los dos primeros argumentos son los radios, en cualquier orden. Los argumentos tercero y cuarto son las coordenadas de los centros, como números complejos, en cualquier orden.
fuente
Taxi , 1582 bytes
Pruébalo en línea!
Salidas
1
para círculos superpuestos.Salidas
0
para círculos no superpuestos (incluidos círculos tangenciales).Sin golf / formateado:
fuente
C #,
5041 bytesGuardado 9 bytes gracias a @KevinCruijssen.
fuente
(r+R)*2
lugar de(r+R)+(r+R)
?+
en el RHS debería haber sido un*
.Scala , 23 bytes
Gracias @Arnauld por su respuesta casi políglota .
Pruébalo en línea!
fuente
PostgreSQL, 41 caracteres
Declaración preparada, toma la entrada como 2 parámetros en cualquier
circle
notación .Ejecución de muestra:
fuente
Java,
5038 bytesfuente
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. De hecho, me acabo de dar cuenta de que esto es exactamente lo mismo que la respuesta de JavaScript de Arnauld.Código de máquina x86 (con SSE2), 36 bytes
La función anterior acepta descripciones de dos círculos (coordenadas x e y del punto central y un radio) y devuelve un valor booleano que indica si se cruzan o no.
Utiliza una convención de llamada vectorial, donde los parámetros se pasan en registros SIMD. En x86-32 y Windows de 64 bits, esta es la
__vectorcall
convención de llamada . En Unix / Linux / Gnu de 64 bits, esta es la convención de llamadas estándar de System V AMD64 .El valor de retorno se deja en el byte bajo de
EAX
, como es estándar con todas las convenciones de llamadas x86.Este código funciona igualmente bien en procesadores x86 de 32 bits y 64 bits, siempre que sean compatibles con el conjunto de instrucciones SSE2 (que sería Intel Pentium 4 y posterior, o AMD Athlon 64 y posterior).
Versión AVX, todavía 36 bytes
Si estaba apuntando a AVX , probablemente desee agregar un prefijo VEX a las instrucciones. Esto no cambia el recuento de bytes; solo los bytes reales utilizados para codificar las instrucciones:
Las instrucciones AVX tienen la ventaja de tomar tres operandos, lo que le permite realizar operaciones no destructivas, pero eso realmente no nos ayuda a compactar el código aquí. Sin embargo, mezclar instrucciones con y sin prefijos VEX puede resultar en un código subóptimo, por lo que generalmente desea seguir todas las instrucciones AVX si está apuntando a AVX, y en este caso, ni siquiera daña su conteo de bytes.
fuente
05AB1E , 10 bytes
Pruébalo en línea!
fuente
PHP , 66 bytes
Pruébalo en línea!
Se ejecuta desde la línea de comando, tomando la entrada como 6 argumentos de parámetros de línea de comando, e imprime 1 si los círculos se superponen, de lo contrario 0.
fuente
Julia 0.6.0 (46 bytes)
fuente
Clojure, 68 bytes
Toma seis argumentos: x1, y1, r1, x2, y2, r2. Devuelve verdadero o falso.
Lamentablemente, Clojure no tiene una
pow
función de algún tipo. Cuesta muchos bytes.fuente
En realidad , 8 bytes
Pruébalo en línea!
Explicación:
fuente
R (+ pryr), 31 bytes
Que evalúa la función
Donde
x
están las coordenadas del círculo 1,y
son las coordenadas del círculo 2 yz
los radios.Calcula la distancia entre los dos centros usando Pitágoras y comprueba si esa distancia es menor que la suma de los radios.
Utiliza la vectorización de R para calcular simultáneamente
(x1-x2)^2
y(y1-y2)^2
. Estos se suman y se enraizan.fuente
Go , 93 bytes
Algoritmo bastante simple, igual que varias otras respuestas, excepto que usa el tipo incorporado
complex
y llama a math / cmplx.Abs ().Tomar los radios como números complejos no ayuda, porque la conversión a float64 agrega más bytes de los que la declaración de variables guarda (no puede hacer
float64 < complex128
).Pruébalo en línea! Incluye los casos de prueba y utiliza el paquete principal en lugar de una biblioteca.
fuente