La description :
Étant donné x
et les y
positions de deux cercles avec leur radii
, affichez la zone d'intersection des deux cercles.
Contribution :
Vous recevrez les informations suivantes:
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
Procédé d'entrée :
([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
Production :
Un entier non négatif (sans décimale) égal à la zone d'intersection de deux cercles.
Une chaîne égale à l'entier mentionné ci-dessus.
Remarque :
- La sortie doit être> = 0, car la zone ne peut pas être négative.
- En cas d'arrondi décimal à l'entier le plus proche
Exemples :
([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ères gagnants:
C'est le code-golf donc le code le plus court en octets pour chaque langue gagne.
Suggestions :
- Fournissez un lien TIO afin qu'il puisse être testé.
- Fournissez une explication pour que les autres puissent comprendre votre code
Ce ne sont que des suggestions et ne sont pas obligatoires.
code-golf
math
array-manipulation
geometry
Muhammad Salman
la source
la source
answer must be positive
àanswer must be >= 0
- Si les cercles ne pas recoupé (comme dans les exemples 4, 7, 10), la réponse est 0, ce qui est la dernière que j'ai vérifié pas positif.Réponses:
Gelée ,
27 25 2422 octetsUn programme complet acceptant une liste des deux centres comme coordonnées complexes et le rayon qui imprime le résultat (sous forme de lien dyadique, il renvoie une liste de longueur 1).
Essayez-le en ligne!
Pour prendre les deux coordonnées en paires, ajoutez
Uḅı
au lien principal, comme ceci .Comment?
la source
[[x1,y1],[x2,y2]]
place mais cela coûte 3 octets. (Notez également que-7+13j
c'est un nombre :)) - le[-7+13j,-25+-5j]
correspond à l'exemple qui revient132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 octets
Formule alternative suggérée par @ceilingcat
Prend l'entrée comme 5 paramètres distincts (x0, y0, x1, y1, r) .
Essayez-le en ligne!
JavaScript (ES7),
818077 octetsSauvegardé 3 octets grâce à @Neil
Prend l'entrée comme 5 paramètres distincts (x0, y0, x1, y1, r) .
Essayez-le en ligne!
Comment?
Ceci est basé sur une formule générique de MathWorld pour les cercles non congruents:
où d est la distance entre les deux centres et r et R sont les rayons.
Avec R = r , cela se simplifie pour:
Et avec r '= 2r :
Remarque : Si d est supérieur à 2r ,
Math.acos()
sera renvoyéNaN
, qui est contraint à 0 lorsque le décalage à droite est appliqué. C'est le résultat attendu, car d> 2r signifie qu'il n'y a pas du tout d'intersection.la source
d*(r*r-d*d)**.5
enregistre 3 octets.with(Math)
et le déplacement de la définition ded
permet d' économiser 2 octets supplémentaires.Mathematica
66 5751 octetsA
Disk[{x,y},r]
désigne la région circonscrite par le cercle centré à{x,y}
avec un rayon der
.RegionIntersection[a,b]
renvoie l'intersection des régionsa
,b
.Area
prend la région.IntegerPart
arrondit à l'entier le plus proche.la source
IntegerPart
parFloor
.Floor[ ]
).Wolfram Language (Mathematica) , 50 octets
Essayez-le en ligne!
la source
Floor
. Bien sûr!C (gcc) ,
83 79 7166 octetsEssayez-le en ligne!
la source
Haskell , 83 octets
Juste la formule, vraiment. Le type doit être déclaré comme
Int
pour NaN à mapper à 0 avecfloor
.Essayez-le en ligne!
la source
JavaScript (Node.js) , 69 octets
Essayez-le en ligne!
Bref, je ne sais pas s'il peut être joué plus loin. Toutes les suggestions sont les bienvenues
la source
Perl 6 , 56 octets
Essayez-le en ligne!
Prend les coordonnées du cercle comme des nombres complexes.
la source
Excel, 119 octets
Entrée prise comme 5 variables distinctes:
la source
Python 2 , 109 octets
Essayez-le en ligne!
Assez simple. Obtenez la distance entre les cercles et utilisez-le
R=2r
comme substituant dans l'équation.d<R and
court-circuiter si les cercles ne se chevauchent pas.la source
Pyth , 63 octets
Suite de tests
Prend l'entrée comme un triple composé de deux doubles et d'un nombre.
la source
T-SQL, 122 octets
(saut de ligne pour la lisibilité uniquement).
Utilise la prise en charge de la géométrie spatiale par MS SQL .
Conformément à nos normes d'E / S , SQL peut recevoir des données d'une table préexistante t avec le
int
champ r et lesvarchar
champs a et b contenant des coordonnées au format(x y)
.Mon instruction analyse les coordonnées comme des
POINT
objets géométriques développés par le rayon à l'aide de la fonctionSTBuffer()
, puis en prenant laSTIntersection()
suivi duSTArea()
.Si je suis autorisé à saisir les objets géométriques réels dans le tableau à la place, mon code devient presque trivial (48 octets):
la source