Étant donné les coordonnées des centres et les rayons de 2 cercles, affichez une valeur vraie de s'ils se chevauchent ou non.
Contribution
L'entrée peut être prise via STDIN ou équivalent, des arguments de fonction, mais pas sous forme de variable. Vous pouvez les prendre comme une seule variable (liste, chaîne, etc.) ou comme plusieurs entrées / arguments, dans l'ordre que vous souhaitez.
L'entrée sera six flottants. Ces flottants auront jusqu'à 3 décimales. Les coordonnées peuvent être positives ou négatives. Les rayons seront positifs.
Production
La sortie peut être via STDOUT ou retour de fonction.
Le programme doit avoir exactement 2 sorties distinctes - une pour une valeur vraie (les cercles se chevauchent) et une pour une sortie fausse (elles ne se chevauchent pas).
Cas de test
(L'entrée est donnée sous forme de liste de tuples [(x1, y1, r1), (x2, y2, r2)]
pour les cas de test; vous pouvez prendre l'entrée dans n'importe quel format)
Vrai
[(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)]
Faux
[(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)]
C'est Code Golf, la réponse la plus courte en victoires en octets.
Réponses:
Gelée , 5 octets
Prend deux nombres complexes (centres) comme premier argument et deux nombres réels (rayons) comme deuxième argument.
Essayez-le en ligne!
Comment ça marche
la source
A
serait-il considéré comme la norme du vecteur ligne "centres"? (ÆḊ
lui - même des erreurs avec un contenu complexe.)A
calcule les distances des centres comme la norme de leur vecteur de différence.JavaScript (ES6), 38 octets
Prend l'entrée comme 6 variables distinctes x1 , y1 , r1 , x2 , y2 , r2 .
Cas de test
Afficher l'extrait de code
la source
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 octets
Format d'entrée:
Essayez-le en ligne
Comment ça marche
la source
MATL , 5 octets
Le format d'entrée est:
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Comment ça marche
la source
5
octets (-|
au lieu deZP
)-r2
au lieu der2
serait utile, car alors vous auriez besoin de trois différences, au lieu de 2 différences et d'un ajout ... Je ferais mieux de courir avant de m'imprégner trop profondément!R , 39 octets
prend l'entrée
k=c(x1,x2,y1,y2)
etr=c(r1,r2)
; renvoieFALSE
pour les cercles tangents.Essayez-le en ligne!
27 octets:
Prend l'entrée sous forme de matrice avec les centres du cercle donnés en lignes et un vecteur de rayons.
Essayez-le en ligne!
la source
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?Python , 40 octets
Essayez-le en ligne!
Utilise l'arithmétique complexe de Python pour calculer la distance entre les deux centres. Je suppose que nous ne pouvons pas prendre les points d'entrée directement comme des nombres complexes, donc le code les exprime comme
x+y*1j
.la source
Python 3 , 45 octets
Essayez-le en ligne!
la source
05AB1E , 6 octets
Essayez-le en ligne!
-1 octet en utilisant
a - b > 0
plutôt que(reverse) b - a < 0
la source
Python 3 , 45 octets
Essayez-le en ligne!
-8 octets grâce à Neil / Step Hen
la source
APL (Dyalog) , 10 octets
Demande les centres du cercle comme liste de deux nombres complexes, puis les rayons comme liste de deux nombres
Essayez-le en ligne!
(+/⎕)
[est] la somme des rayons>
plus grand que|
l'ampleur de-/⎕
la différence dans les centresla source
Mathematica, 16 octets
Contribution:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica a une fonction
RegionIntersection
intégrée, mais cela à elle seule fait 18 octets ...Version intégrée:
Prend 2
Disk
objets.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
.la source
Haskell ,
3736 octetsEssayez-le en ligne!
Merci @AndersKaseorg pour l'
-1
octet!la source
(u!v)r x y s
.Gelée , 12 octets
Essayez-le en ligne!
-2 octets grâce à Dennis
la source
ạ/²
les mêmes octets ne serait-elle pas possible ?I
au lieu de réduire par différence absolue.Java (OpenJDK 8) , 38 octets
Essayez-le en ligne!
la source
Java 8,
4138 octetsEssayez-le ici.
Apparemment, Java a également
Math.hypot
, ce qui est 3 octets plus court.EDIT: Je viens de réaliser que cette réponse est maintenant exactement la même que @ OlivierGrégoire réponse Java , alors s'il vous plaît, votez pour lui à la place de moi si vous aimez la réponse de 38 octets.
Ancienne réponse (41 octets) :
Essayez-le ici.
la source
Pyth , 15 octets
Prend les entrées dans l'ordre x1, x2, y1, y2, r1, r2
Suite de tests!
la source
Perl 6 , 13 octets
Essayez-le en ligne!
Les deux premiers arguments sont les rayons, dans l'un ou l'autre ordre. Les troisième et quatrième arguments sont les coordonnées des centres, sous forme de nombres complexes, dans l'un ou l'autre ordre.
la source
Taxi , 1582 octets
Essayez-le en ligne!
Sorties
1
pour les cercles qui se chevauchent.Sorties
0
pour les cercles non superposés (y compris les cercles tangentiels).Non golfé / formaté:
la source
C #,
5041 octets9 octets enregistrés grâce à @KevinCruijssen.
la source
(r+R)*2
place de(r+R)+(r+R)
?+
le RHS aurait dû être un*
.Scala , 23 octets
Merci @Arnauld pour sa réponse presque polyglotte .
Essayez-le en ligne!
la source
PostgreSQL, 41 caractères
Instruction préparée, prend l'entrée comme 2 paramètres dans n'importe quelle
circle
notation .Exemple d'exécution:
la source
Java,
5038 octetsla source
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. En fait, je viens de réaliser que c'est exactement la même chose que la réponse JavaScript d'Arnauld.Code machine x86 (avec SSE2), 36 octets
La fonction ci-dessus accepte les descriptions de deux cercles (coordonnées x et y du point central et un rayon) et renvoie une valeur booléenne indiquant si elles se croisent ou non.
Il utilise une convention d'appel vectoriel, où les paramètres sont passés dans les registres SIMD. Sous Windows x86-32 et 64 bits, il s'agit de la
__vectorcall
convention d'appel . Sur Unix / Linux / Gnu 64 bits, il s'agit de la convention d'appel AMD64 System V standard .La valeur de retour est laissée dans l'octet bas de
EAX
, comme c'est le cas avec toutes les conventions d'appel x86.Ce code fonctionne aussi bien sur les processeurs x86 32 bits et 64 bits, tant qu'ils prennent en charge le jeu d'instructions SSE2 (qui serait Intel Pentium 4 et versions ultérieures, ou AMD Athlon 64 et versions ultérieures).
Version AVX, toujours 36 octets
Si vous visiez AVX , vous souhaiterez probablement ajouter un préfixe VEX aux instructions. Cela ne change pas le nombre d'octets; juste les octets réels utilisés pour coder les instructions:
Les instructions AVX ont l'avantage de prendre trois opérandes, vous permettant d'effectuer des opérations non destructives, mais cela ne nous aide pas vraiment à compacter le code ici. Cependant, le mélange d'instructions avec et sans préfixes VEX peut entraîner un code sous-optimal, vous devez donc généralement respecter toutes les instructions AVX si vous ciblez AVX, et dans ce cas, cela ne nuit même pas à votre nombre d'octets.
la source
05AB1E , 10 octets
Essayez-le en ligne!
la source
PHP , 66 octets
Essayez-le en ligne!
S'exécute à partir de la ligne de commande, en prenant l'entrée comme 6 arguments de paramètre de ligne de commande et affiche 1 si les cercles se chevauchent, sinon 0.
la source
Julia 0.6.0 (46 octets)
la source
Clojure, 68 octets
Prend six arguments: x1, y1, r1, x2, y2, r2. Renvoie vrai ou faux.
Malheureusement, Clojure n'a aucune
pow
fonction. Coûte beaucoup d'octets.la source
En fait , 8 octets
Essayez-le en ligne!
Explication:
la source
R (+ pryr), 31 octets
Qui évalue à la fonction
Où
x
sont les coordonnées du cercle 1,y
sont les coordonnées du cercle 2 etz
les rayons.Calcule la distance entre les deux centres à l'aide de Pythagore et teste si cette distance est inférieure à la somme des rayons.
Utilise la vectorisation de R pour calculer
(x1-x2)^2
et(y1-y2)^2
. Ceux-ci sont ensuite additionnés et carrément enracinés.la source
Aller , 93 octets
Algorithme assez simple, identique à plusieurs autres réponses, sauf qu'il utilise le type intégré
complex
et appelle math / cmplx.Abs ().Prendre les rayons comme des nombres complexes n'aide pas, car le transtypage en float64 ajoute plus d'octets que la déclaration de variable n'en économise (impossible
float64 < complex128
).Essayez-le en ligne! Inclut les cas de test et utilise le package main au lieu d'une bibliothèque.
la source