Descrição :
Dados x
e y
posições de dois círculos, juntamente com os deles radii
, produzem a área de interseção dos dois círculos.
Entrada :
Você receberá a seguinte 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
Resultado :
Um número inteiro não negativo (sem decimal) igual à área de interseção de dois círculos.
Uma sequência igual ao número inteiro mencionado acima.
Nota :
- A saída deve ser> = 0, pois a área não pode ser negativa.
- Em caso de decimal arredondar para baixo para o número inteiro mais próximo
Exemplos :
([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
Critérios de vitória:
Este é o código-golfe, pelo que o código mais curto em bytes para cada idioma vence.
Sugestões:
- Forneça um link TIO para que possa ser testado.
- Forneça uma explicação para que outras pessoas possam entender seu código
Estas são apenas sugestões e não são obrigatórias.
code-golf
math
array-manipulation
geometry
Muhammad Salman
fonte
fonte
answer must be positive
paraanswer must be >= 0
- Se os círculos não se cruzam (como nos exemplos 4, 7, 10), a resposta correta é 0, e a última vez que verifiquei não é positiva.Respostas:
Geléia ,
27 25 2422 bytesUm programa completo que aceita uma lista dos dois centros como coordenadas complexas e o raio que imprime o resultado (como um link diádico, ele retorna uma lista de comprimento 1).
Experimente online!
Para levar as duas coordenadas como pares, adicione
Uḅı
o link principal, assim .Quão?
fonte
[[x1,y1],[x2,y2]]
isso, mas custa 3 bytes. (Note-se também que-7+13j
é um número :)) - os[-7+13j,-25+-5j]
corresponde ao exemplo que retorna132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 bytes
Fórmula alternativa sugerida por @ceilingcat
Aceita entrada como 5 parâmetros distintos (x0, y0, x1, y1, r) .
Experimente online!
JavaScript (ES7),
818077 bytesGuardado 3 bytes graças a @Neil
Aceita entrada como 5 parâmetros distintos (x0, y0, x1, y1, r) .
Experimente online!
Quão?
Isso se baseia em uma fórmula genérica do MathWorld para círculos não congruentes:
onde d é a distância entre os dois centros er e R são os raios.
Com R = r , isso é simplificado para:
E com r '= 2r :
Nota : Se d for maior que 2r ,
Math.acos()
retornaráNaN
, que será coagido a 0 quando o deslocamento à direita for aplicado. Este é o resultado esperado, porque d> 2r significa que não há interseção.fonte
d*(r*r-d*d)**.5
salva 3 bytes.with(Math)
e mover a definição ded
salva mais 2 bytes.Mathematica
66 5751 bytesA
Disk[{x,y},r]
refere-se à região circunscrita pelo círculo centrado em{x,y}
com um raio der
.RegionIntersection[a,b]
retorna a intersecção das regiõesa
,b
.Area
toma a área.IntegerPart
arredonda para baixo para o número inteiro mais próximo.fonte
IntegerPart
porFloor
.Floor[ ]
).Linguagem Wolfram (Mathematica) , 50 bytes
Experimente online!
fonte
Floor
. Claro!C (gcc) ,
83 79 7166 bytesExperimente online!
fonte
Haskell , 83 bytes
Apenas a fórmula, realmente. O tipo deve ser declarado como
Int
para o NaN mapear para 0 comfloor
.Experimente online!
fonte
JavaScript (Node.js) , 69 bytes
Experimente online!
Curto, não tenho certeza se ele pode ser jogado mais. Todas as sugestões são bem-vindas
fonte
Perl 6 , 56 bytes
Experimente online!
Toma coordenadas de círculo como números complexos.
fonte
Excel, 119 bytes
Entrada tomada como 5 variáveis separadas:
fonte
Python 2 , 109 bytes
Experimente online!
Bem direto. Obtenha a distância entre os círculos e use
R=2r
como um substituinte na equação.d<R and
curto-circuito se os círculos não se sobrepuserem.fonte
Pitão , 63 bytes
Suíte de teste
Aceita entrada como um triplo, composto por dois duplos e um número.
fonte
T-SQL, 122 bytes
(quebra de linha apenas para legibilidade).
Usa o suporte do MS SQL à geometria espacial .
Por nossos padrões de IO , SQL pode tirar a entrada de uma tabela pré-existente t com
int
campo r evarchar
campos de um e b contendo coordenadas no formato(x y)
.Minha declaração analisa as coordenadas como
POINT
objetos de geometria expandidos pelo raio usando a função eSTBuffer()
, em seguida, obtém oSTIntersection()
seguido peloSTArea()
.Se for permitido inserir os objetos geométricos reais na tabela, meu código se tornará quase trivial (48 bytes):
fonte