Ausgehend von den Koordinaten der Zentren und den Radien von 2 Kreisen wird ein wahrer Wert ausgegeben, der angibt, ob sie sich überlappen oder nicht.
Eingang
Die Eingabe kann über STDIN oder äquivalente Funktionsargumente erfolgen, jedoch nicht als Variable. Sie können sie als einzelne Variable (Liste, Zeichenfolge usw.) oder als mehrere Eingaben / Argumente in beliebiger Reihenfolge verwenden.
Der Eingang wird sechs Floats sein. Diese Gleitkommazahlen haben bis zu 3 Dezimalstellen. Die Koordinaten können positiv oder negativ sein. Die Radien sind positiv.
Ausgabe
Die Ausgabe kann über STDOUT oder Funktionsrückgabe erfolgen.
Das Programm muss genau 2 verschiedene Ausgaben haben - eine für einen True-Wert (die Kreise überlappen sich) und eine für eine False-Ausgabe (sie überlappen sich nicht).
Testfälle
(Die Eingabe erfolgt als Tupelliste [(x1, y1, r1), (x2, y2, r2)]
für die Testfälle; Sie können Eingaben in jedem Format vornehmen.)
Wahr
[(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)]
Falsch
[(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)]
Dies ist Code Golf, die kürzeste Antwort in Bytes gewinnt.
Antworten:
Gelee , 5 Bytes
Nimmt zwei komplexe Zahlen (Zentren) als erstes Argument und zwei reelle Zahlen (Radien) als zweites Argument.
Probieren Sie es online!
Wie es funktioniert
quelle
A
hier aus Interesse als die Norm des Zeilenvektors "Zentren" angesehen? (ÆḊ
selbst Fehler mit komplexen Inhalten.)A
berechnet die Abstände der Zentren als Norm für ihren Differenzvektor.JavaScript (ES6), 38 Byte
Nimmt die Eingabe als 6 verschiedene Variablen x1 , y1 , r1 , x2 , y2 , r2 .
Testfälle
Code-Snippet anzeigen
quelle
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 Bytes
Eingabeformat:
Probieren Sie es online aus
Wie es funktioniert
quelle
MATL , 5 Bytes
Eingabeformat ist:
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
5
Bytes (-|
anstelle vonZP
)-r2
anstatt"r2
helfen würde, weil dann drei Unterschiede anstelle von zwei Unterschieden und einer Ergänzung benötigt würden ... Ich sollte besser laufen, bevor ich zu tief hineingezogen werde!R , 39 Bytes
nimmt Eingabe
k=c(x1,x2,y1,y2)
undr=c(r1,r2)
; GibtFALSE
für tangentiale Kreise zurück.Probieren Sie es online!
27 Bytes:
Nimmt die Eingabe als Matrix mit den als Zeilen angegebenen Kreismitten und einem Radienvektor.
Probieren Sie es online!
quelle
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?Python , 40 Bytes
Probieren Sie es online!
Verwendet Pythons komplexe Arithmetik, um den Abstand zwischen den beiden Zentren zu berechnen. Ich gehe davon aus, dass wir die Eingabepunkte nicht direkt als komplexe Zahlen interpretieren können
x+y*1j
. Der Code drückt sie also so aus .quelle
Python 3 , 45 Bytes
Probieren Sie es online!
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
-1 Byte mit
a - b > 0
anstatt(reverse) b - a < 0
quelle
Python 3 , 45 Bytes
Probieren Sie es online!
-8 Bytes dank Neil / Step Hen
quelle
APL (Dyalog) , 10 Bytes
Fordert zur Eingabe von Kreismittelpunkten als Liste mit zwei komplexen Zahlen auf, dann zur Eingabe von Radien als Liste mit zwei Zahlen
Probieren Sie es online!
(+/⎕)
[ist] die Summe der Radien>
größer als|
die Größe von-/⎕
der Unterschied in den Zentrenquelle
Mathematica, 16 Bytes
Eingang:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica hat eine
RegionIntersection
eingebaute, aber das allein ist 18 Bytes lang ...Eingebaute Version:
Nimmt 2
Disk
Gegenstände.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
.quelle
Haskell ,
3736 BytesProbieren Sie es online!
Danke @AndersKaseorg für das
-1
Byte!quelle
(u!v)r x y s
.Gelee , 12 Bytes
Probieren Sie es online!
-2 Bytes dank Dennis
quelle
ạ/²
denselben Bytes zu erstellen ?I
anstatt um absolute Differenz zu reduzieren.Java (OpenJDK 8) , 38 Byte
Probieren Sie es online!
quelle
Java 8,
4138 BytesProbieren Sie es hier aus.
Anscheinend hat Java auch das
Math.hypot
, was 3 Bytes kürzer ist.BEARBEITEN: Ich habe gerade festgestellt, dass diese Antwort jetzt genau der Antwort von @ OlivierGrégoire in Java 8 entspricht. Bitte stimmen Sie ihm statt mir zu, wenn Sie die 38-Byte-Antwort mögen.
Alte Antwort (41 Bytes) :
Probieren Sie es hier aus.
quelle
Pyth , 15 Bytes
Nimmt Eingaben in der Reihenfolge x1, x2, y1, y2, r1, r2 vor
Testsuite!
quelle
Perl 6 , 13 Bytes
Probieren Sie es online!
Die ersten beiden Argumente sind die Radien in beliebiger Reihenfolge. Das dritte und vierte Argument sind die Koordinaten der Zentren als komplexe Zahlen in beliebiger Reihenfolge.
quelle
Taxi , 1582 Bytes
Probieren Sie es online!
Ausgaben
1
für überlappende Kreise.Ausgaben
0
für nicht überlappende Kreise (einschließlich Tangentialkreise).Ungolfed / formatiert:
quelle
C #,
5041 Bytes9 Bytes dank @KevinCruijssen gespeichert.
quelle
(r+R)*2
statt(r+R)+(r+R)
?+
auf der rechten Seite hätte sein sollen*
.Scala , 23 Bytes
Vielen Dank an @Arnauld für seine fast polyglotte Antwort .
Probieren Sie es online!
quelle
PostgreSQL, 41 Zeichen
Prepared-Anweisung, nimmt die Eingabe als 2 Parameter in einer beliebigen
circle
Notation an .Probelauf:
quelle
Java,
5038 Bytesquelle
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. Tatsächlich wurde mir gerade klar, dass dies genau dasselbe ist wie Arnauld's JavaScript-Antwort.x86-Maschinencode (mit SSE2), 36 Byte
Die obige Funktion akzeptiert Beschreibungen von zwei Kreisen (x- und y-Koordinaten des Mittelpunkts und eines Radius) und gibt einen Booleschen Wert zurück, der angibt, ob sie sich schneiden oder nicht.
Es wird eine Vektoraufrufkonvention verwendet, bei der die Parameter in SIMD-Registern übergeben werden. Bei x86-32- und 64-Bit-Windows ist dies die
__vectorcall
Aufrufkonvention . Auf 64-Bit - Unix / Linux / Gnu, ist dies der Standard System V AMD64 - Aufrufkonvention .Der Rückgabewert bleibt im Low-Byte von
EAX
, wie es bei allen x86-Aufrufkonventionen üblich ist.Dieser Code funktioniert auf 32-Bit- und 64-Bit-x86-Prozessoren gleichermaßen gut, sofern sie den SSE2-Befehlssatz (Intel Pentium 4 und höher oder AMD Athlon 64 und höher) unterstützen.
AVX-Version, noch 36 Bytes
Wenn Sie auf AVX abzielen , möchten Sie den Anweisungen wahrscheinlich ein VEX-Präfix hinzufügen. Die Anzahl der Bytes wird dadurch nicht geändert. Nur die tatsächlichen Bytes, die zum Codieren der Anweisungen verwendet werden:
AVX-Anweisungen haben den Vorteil, drei Operanden zu verwenden, sodass Sie zerstörungsfreie Operationen ausführen können. Dies hilft uns jedoch nicht wirklich, den Code hier zu komprimieren. Das Mischen von Anweisungen mit und ohne VEX-Präfixen kann jedoch zu suboptimalem Code führen. Wenn Sie also auf AVX abzielen, möchten Sie im Allgemeinen alle AVX-Anweisungen einhalten.
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
quelle
PHP , 66 Bytes
Probieren Sie es online!
Wird über die Befehlszeile ausgeführt, wobei die Eingabe als 6 Befehlszeilenparameterargumente verwendet wird, und gibt 1 aus, wenn sich die Kreise überlappen, andernfalls 0.
quelle
Julia 0.6.0 (46 Bytes)
quelle
Clojure, 68 Bytes
Nimmt sechs Argumente an: x1, y1, r1, x2, y2, r2. Gibt true oder false zurück.
Leider hat Clojure keine bestimmte
pow
Funktion. Kostet eine Menge Bytes.quelle
Eigentlich 8 Bytes
Probieren Sie es online!
Erläuterung:
quelle
R (+ Pryr), 31 Bytes
Welches zur Funktion auswertet
Wo
x
sind die Koordinaten von Kreis 1,y
sind die Koordinaten von Kreis 2 undz
die Radien.Berechnet den Abstand zwischen den beiden Zentren mit Pythagoras und testet, ob dieser Abstand kleiner ist als die Summe der Radien.
Nutzt die Vektorisierung von R, um gleichzeitig
(x1-x2)^2
und zu berechnen(y1-y2)^2
. Diese werden dann summiert und genau verwurzelt.quelle
Los , 93 Bytes
Ziemlich einfacher Algorithmus, der mit mehreren anderen Antworten identisch ist, außer dass er den integrierten
complex
Typ verwendet und math / cmplx.Abs () aufruft.Es hilft nicht, die Radien als komplexe Zahlen zu betrachten, da die Umwandlung in float64 mehr Bytes hinzufügt, als die Variablendeklaration speichert (was nicht möglich ist
float64 < complex128
).Probieren Sie es online! Schließt die Testfälle ein und verwendet package main anstelle einer Bibliothek.
quelle