Biorąc pod uwagę współrzędne centrów i promienie 2 okręgów, wyprowadzaj prawdziwą wartość, czy się pokrywają, czy nie.
Wkład
Dane wejściowe mogą być pobierane przez STDIN lub równoważne argumenty funkcji, ale nie jako zmienna. Możesz je traktować jako pojedynczą zmienną (listę, łańcuch itp.) Lub jako wiele danych wejściowych / argumentów, w dowolnej kolejności.
Dane wejściowe będą wynosić sześć liczb zmiennoprzecinkowych. Te liczby zmiennoprzecinkowe będą miały maksymalnie 3 miejsca po przecinku. Współrzędne mogą być dodatnie lub ujemne. Promienie będą dodatnie.
Wydajność
Wyjście może być przez STDOUT lub powrót funkcji.
Program musi mieć dokładnie 2 różne wyniki - jeden dla wartości True (koła nakładają się) i jeden dla False (nie nakładają się).
Przypadki testowe
(Dane wejściowe są podawane jako lista krotek [(x1, y1, r1), (x2, y2, r2)]
dla przypadków testowych; dane wejściowe można przyjmować w dowolnym formacie)
Prawdziwe
[(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)]
Fałszywe
[(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)]
To jest Code Golf, wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
Galaretka , 5 bajtów
Traktuje dwie liczby zespolone (centra) jako pierwszy argument i dwie liczby rzeczywiste (promienie) jako drugi argument.
Wypróbuj online!
Jak to działa
źródło
A
byłby uważany za normę wektora „rzędów”? (ÆḊ
sam zawiera błędy ze złożoną treścią)A
oblicza odległości centrów jako normę ich wektora różnicowego.JavaScript (ES6), 38 bajtów
Przyjmuje dane wejściowe jako 6 różnych zmiennych x1 , y1 , r1 , x2 , y2 , r2 .
Przypadki testowe
Pokaż fragment kodu
źródło
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 bajtów
Format wejściowy:
Wypróbuj online
Jak to działa
źródło
MATL , 5 bajtów
Format wejściowy to:
Wypróbuj online!Lub sprawdź wszystkie przypadki testowe .
Jak to działa
źródło
5
bajty (-|
zamiastZP
)-r2
zamiastr2
pomógłby, ponieważ wtedy potrzebowałbyś trzech różnic, zamiast dwóch różnic i dodatku ... Lepiej bym uciekł, zanim wciągnę się zbyt głęboko!R , 39 bajtów
przyjmuje dane wejściowe
k=c(x1,x2,y1,y2)
ir=c(r1,r2)
; zwracaFALSE
dla okręgów stycznych.Wypróbuj online!
27 bajtów:
Pobiera dane wejściowe jako macierz z centrami okręgu podanymi jako rzędy i wektorem promieni.
Wypróbuj online!
źródło
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?Python , 40 bajtów
Wypróbuj online!
Wykorzystuje złożoną arytmetykę Pythona do obliczania odległości między dwoma centrami. Zakładam, że nie możemy traktować punktów wejściowych bezpośrednio jako liczb zespolonych, więc kod wyraża je w ten sposób
x+y*1j
.źródło
Python 3 , 45 bajtów
Wypróbuj online!
źródło
05AB1E , 6 bajtów
Wypróbuj online!
-1 bajt przy użyciu
a - b > 0
zamiast(reverse) b - a < 0
źródło
Python 3 , 45 bajtów
Wypróbuj online!
-8 bajtów dzięki Neil / Step Hen
źródło
APL (Dyalog) , 10 bajtów
Monituje o środki okręgu jako listę dwóch liczb zespolonych, a następnie o promienie jako listę dwóch liczb
Wypróbuj online!
(+/⎕)
[jest] sumą promieni>
Lepszy niż|
wielkość-/⎕
różnica w centrachźródło
Mathematica, 16 bajtów
Wkład:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica ma
RegionIntersection
wbudowaną funkcję , ale sama w sobie ma 18 bajtów ...Wersja wbudowana:
Zabiera 2
Disk
przedmioty.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
.źródło
Haskell ,
3736 bajtówWypróbuj online!
Dzięki @AndersKaseorg za
-1
bajt!źródło
(u!v)r x y s
.Galaretka , 12 bajtów
Wypróbuj online!
-2 bajty dzięki Dennisowi
źródło
ạ/²
tymi samymi bajtami?I
zamiast zmniejszać różnicą bezwzględną.Java (OpenJDK 8) , 38 bajtów
Wypróbuj online!
źródło
Java 8,
4138 bajtówWypróbuj tutaj.
Najwyraźniej Java też ma
Math.hypot
, czyli 3 bajty krócej.EDYCJA: Właśnie zdałem sobie sprawę, że ta odpowiedź jest teraz dokładnie taka sama jak odpowiedź Java 8 autorstwa OlivierGrégoire , więc proszę głosować na niego zamiast mnie, jeśli podoba ci się odpowiedź 38-bajtowa.
Stara odpowiedź (41 bajtów) :
Wypróbuj tutaj.
źródło
Pyth , 15 bajtów
Przyjmuje dane wejściowe w kolejności x1, x2, y1, y2, r1, r2
Zestaw testowy!
źródło
Perl 6 , 13 bajtów
Wypróbuj online!
Pierwsze dwa argumenty to promienie, w dowolnej kolejności. Trzeci i czwarty argument to współrzędne centrów, jako liczby zespolone, w dowolnej kolejności.
źródło
Taxi , 1582 bajtów
Wypróbuj online!
Dane wyjściowe
1
dla nakładających się kręgów.Dane wyjściowe
0
dla niezachodzących na siebie okręgów (w tym okręgów stycznych).Niegolfowane / sformatowane:
źródło
C #,
5041 bajtówZaoszczędź 9 bajtów dzięki @KevinCruijssen.
źródło
(r+R)*2
zamiast(r+R)+(r+R)
?+
na RHS powinno być*
.Scala , 23 bajty
Dzięki @Arnauld za jego prawie poliglotyczną odpowiedź .
Wypróbuj online!
źródło
PostgreSQL, 41 znaków
Przygotowana instrukcja przyjmuje dane wejściowe jako 2 parametry w dowolnej
circle
notacji .Przykładowy przebieg:
źródło
Java,
5038 bajtówźródło
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. Właśnie uświadomiłem sobie, że jest to dokładnie to samo, co odpowiedź JavaScript Arnaulda.Kod maszynowy x86 (z SSE2), 36 bajtów
Powyższa funkcja przyjmuje opisy dwóch okręgów (współrzędne xiy punktu środkowego i promienia) i zwraca wartość logiczną wskazującą, czy się przecinają.
Wykorzystuje konwencję wywoływania wektorów, w której parametry są przekazywane do rejestrów SIMD. W systemach Windows x86-32 i 64-bitowych jest to
__vectorcall
konwencja wywoływania . W 64-bitowych systemów Unix / Linux / GNU, to jest standard wywoływania System V AMD64 konwencja .Zwracana wartość jest pozostawiana w dolnym bajcie
EAX
, co jest standardem we wszystkich konwencjach wywoływania x86.Ten kod działa równie dobrze na 32-bitowych i 64-bitowych procesorach x86, o ile obsługują one zestaw instrukcji SSE2 (którym byłby Intel Pentium 4 i nowsze wersje lub AMD Athlon 64 i nowsze wersje).
Wersja AVX, wciąż 36 bajtów
Jeśli celowałeś w AVX , prawdopodobnie chciałbyś dodać przedrostek VEX do instrukcji. Nie zmienia to liczby bajtów; tylko rzeczywiste bajty użyte do zakodowania instrukcji:
Zalety instrukcji AVX polegają na przyjmowaniu trzech operandów, co pozwala na wykonywanie nieniszczących operacji, ale tak naprawdę nie pomaga nam to tutaj spakować kodu. Jednak mieszanie instrukcji z prefiksami VEX i bez nich może spowodować, że kod nie będzie optymalny, więc na ogół chcesz trzymać się wszystkich instrukcji AVX, jeśli celujesz w AVX, aw tym przypadku nawet nie zaszkodzi to twojej liczbie bajtów.
źródło
05AB1E , 10 bajtów
Wypróbuj online!
źródło
PHP , 66 bajtów
Wypróbuj online!
Runs from the command line, taking input as 6 command-line parameter arguments, and prints 1 if the circles overlap, else 0.
źródło
Julia 0.6.0 (46 bytes)
źródło
Clojure, 68 bytes
Takes six arguments: x1, y1, r1, x2, y2, r2. Returns true or false.
Sadly, Clojure does not have a
pow
function of some sorts. Costs a lot of bytes.źródło
Actually, 8 bytes
Try it online!
Explanation:
źródło
R (+pryr), 31 bytes
Which evaluates to the function
Where
x
are the coordinates of circle 1,y
are the coordinates of circle 2 andz
the radii.Calculates the distance between the two centers using Pythagoras and tests if that distance is smaller than the sum of the radii.
Makes use of R's vectorisation to simultaneously calculate
(x1-x2)^2
and(y1-y2)^2
. These are then summed and squarely rooted.źródło
Go, 93 bytes
Fairly simple algorithm, same as several other answers, except it uses the built-in
complex
type and calls math/cmplx.Abs().Taking the radii as complex numbers doesn't help, because the cast to float64 adds more bytes than the variable declaration saves (can't do
float64 < complex128
).Try it online! Includes the test cases, and uses package main instead of a library.
źródło