Descripción:
Dadas x
y las y
posiciones de dos círculos junto con su radii
salida del área de intersección de los dos círculos.
Entrada:
Se le dará la siguiente entrada:
array 1 = x and y positions of circle a
array 2 = x and y positions of circle b
radius = radii of the two congruent circles
Método de entrada :
([12 , 20] , [20 , 18] , 12) ---> two array and number
([12 , 20 , 20 , 18] , 12) ---> array and a number
(12 , 20 , 20 , 18 , 12) ---> all five numbers
('12 20' , '20 18' , 12) ---> 2 strings and a number
('12 20 20 18' , 12) ---> string and a number
('12 20 20 18 12') ---> one string
Salida:
Un entero no negativo (sin decimal) igual al área de intersección de dos círculos.
Una cadena igual al entero antes mencionado.
Nota :
- La salida debe ser> = 0, ya que el área no puede ser negativa.
- En caso de redondeo decimal hacia abajo al entero más cercano
Ejemplos:
([0, 0], [7, 0], 5) ---> 14
([0, 0], [0, 10], 10) ---> 122
([5, 6], [5, 6], 3) ---> 28
([-5, 0], [5, 0], 3) ---> 0
([10, 20], [-5, -15], 20) ---> 15
([-7, 13], [-25, -5], 17) ---> 132
([-12, 20], [43, -49], 23) ---> 0
Criterios ganadores:
Este es el código de golf, por lo que gana el código más corto en bytes para cada idioma.
Sugerencias:
- Proporcione un enlace TIO para que pueda probarse.
- Proporcione una explicación para que otros puedan entender su código.
Estas son solo sugerencias y no son obligatorias.
code-golf
math
array-manipulation
geometry
Muhammad Salman
fuente
fuente
answer must be positive
aanswer must be >= 0
: si los círculos no se cruzan (como en los ejemplos 4, 7, 10), la respuesta correcta es 0, lo último que comprobé no es positivo.Respuestas:
Gelatina ,
27 25 2422 bytesUn programa completo que acepta una lista de los dos centros como coordenadas complejas y el radio que imprime el resultado (como un enlace diádico devuelve una lista de longitud 1).
Pruébalo en línea!
Para tomar las dos coordenadas como pares, agregue
Uḅı
al enlace principal, de esta manera .¿Cómo?
fuente
[[x1,y1],[x2,y2]]
pero cuesta 3 bytes. (Tenga en cuenta también que-7+13j
es un número :)) -[-7+13j,-25+-5j]
corresponde al ejemplo que devuelve132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 bytes
Fórmula alternativa sugerida por @ceilingcat
Toma la entrada como 5 parámetros distintos (x0, y0, x1, y1, r) .
Pruébalo en línea!
JavaScript (ES7),
818077 bytesGuardado 3 bytes gracias a @Neil
Toma la entrada como 5 parámetros distintos (x0, y0, x1, y1, r) .
Pruébalo en línea!
¿Cómo?
Esto se basa en una fórmula genérica de MathWorld para círculos no congruentes:
donde d es la distancia entre los dos centros y r y R son los radios.
Con R = r , esto se simplifica a:
Y con r '= 2r :
Nota : Si d es mayor que 2r ,
Math.acos()
volveráNaN
, lo que se convierte en 0 cuando se aplica el desplazamiento a la derecha. Este es el resultado esperado, porque d> 2r significa que no hay intersección en absoluto.fuente
d*(r*r-d*d)**.5
ahorra 3 bytes.with(Math)
y mover la definición ded
ahorra 2 bytes más.Mathematica
66 5751 bytesA se
Disk[{x,y},r]
refiere a la región circunscrita por el círculo centrado{x,y}
con un radio der
.RegionIntersection[a,b]
devuelve la intersección de las regionesa
,b
.Area
Toma el área.IntegerPart
Redondea hacia abajo al entero más cercano.fuente
IntegerPart
conFloor
.Floor[ ]
)Wolfram Language (Mathematica) , 50 bytes
Pruébalo en línea!
fuente
Floor
. ¡Por supuesto!C (gcc) ,
83 79 7166 bytesPruébalo en línea!
fuente
Haskell , 83 bytes
Solo la fórmula, de verdad. El tipo debe declararse como
Int
para que NaN se asigne a 0 confloor
.Pruébalo en línea!
fuente
JavaScript (Node.js) , 69 bytes
Pruébalo en línea!
Short no está seguro si se puede jugar más al golf. Cualquier sugerencia es bienvenida
fuente
Perl 6 , 56 bytes
Pruébalo en línea!
Toma coordenadas de círculo como números complejos.
fuente
Excel, 119 bytes
Entrada tomada como 5 variables separadas:
fuente
Python 2 , 109 bytes
Pruébalo en línea!
Muy claro. Obtenga la distancia entre círculos y úsela
R=2r
como un sustituto en la ecuación.d<R and
a cortocircuito si los círculos no se superponen.fuente
Pyth , 63 bytes
Banco de pruebas
Toma la entrada como un triple que consta de dos dobles y un número.
fuente
T-SQL, 122 bytes
(salto de línea solo para legibilidad).
Utiliza el soporte de MS SQL de geometría espacial .
Según nuestros estándares IO , SQL puede tomar datos de una tabla t preexistente con el
int
campo r y losvarchar
campos a y b que contienen coordenadas en el formato(x y)
.Mi declaración analiza las coordenadas como
POINT
objetos de geometría expandidos por el radio usando la funciónSTBuffer()
, luego toma elSTIntersection()
seguido por elSTArea()
.Si se me permite ingresar los objetos de geometría reales en la tabla, entonces mi código se vuelve casi trivial (48 bytes):
fuente