Opis:
Dane x
i y
pozycje dwóch okręgów wraz z nimi radii
, przedstawiają obszar przecięcia się dwóch okręgów.
Wejście :
Otrzymasz następujące dane wejściowe:
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
Metoda wprowadzania :
([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
Wynik :
Nieujemna liczba całkowita (bez miejsc dziesiętnych) równa powierzchni przecięcia dwóch kół.
Ciąg równy wyżej wymienionej liczbie całkowitej.
Uwaga :
- Wyjście musi wynosić> = 0, ponieważ obszar nie może być ujemny.
- W przypadku liczby dziesiętnej zaokrąglić w dół do najbliższej liczby całkowitej
Przykłady:
([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
Kryteria wygranej:
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach dla każdego języka.
Propozycje :
- Podaj link TIO, aby można go było przetestować.
- Podaj wyjaśnienie, aby inni mogli zrozumieć Twój kod
Są to tylko sugestie i nie są obowiązkowe.
code-golf
math
array-manipulation
geometry
Muhammad Salman
źródło
źródło
answer must be positive
naanswer must be >= 0
- Jeśli koła nie przecinają się (jak w przykładach 4, 7, 10), poprawna odpowiedź to 0, która ostatnio sprawdzona nie jest pozytywna.Odpowiedzi:
Galaretka ,
27 25 2422 bajtówPełny program akceptujący listę dwóch centrów jako złożone współrzędne i promień, w którym wypisywany jest wynik (jako diademowe łącze zwraca listę o długości 1).
Wypróbuj online!
Aby wziąć dwie współrzędne jako pary, dodaj
Uḅı
do głównego łącza, tak jak to .W jaki sposób?
źródło
[[x1,y1],[x2,y2]]
ale kosztuje 3 bajty. (Zauważ też, że-7+13j
jest to liczba :)) -[-7+13j,-25+-5j]
odpowiada przykładowi, który powraca132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 bajty
Alternatywna formuła sugerowana przez @ceilingcat
Pobiera dane wejściowe jako 5 różnych parametrów (x0, y0, x1, y1, r) .
Wypróbuj online!
JavaScript (ES7),
818077 bajtówZaoszczędź 3 bajty dzięki @Neil
Pobiera dane wejściowe jako 5 różnych parametrów (x0, y0, x1, y1, r) .
Wypróbuj online!
W jaki sposób?
Opiera się to na ogólnej formule MathWorld dla kręgów niezgodnych:
gdzie d jest odległością między dwoma środkami ir oraz R oznaczają promienie.
O R = R , to uprościć:
A dla r '= 2r :
Uwaga : Jeśli d jest większe niż 2r ,
Math.acos()
powróciNaN
, co jest wymuszone na 0, gdy zastosowano przesunięcie w prawo. Jest to oczekiwany wynik, ponieważ d> 2r oznacza, że w ogóle nie ma przecięcia.źródło
d*(r*r-d*d)**.5
oszczędza 3 bajty.with(Math)
i przenoszenie definicjid
zapisuje 2 kolejne bajty.Mathematica
66 5751 bajtówA
Disk[{x,y},r]
odnosi się do regionu ograniczonego okręgiem, którego środek znajduje się w{x,y}
promieniur
.RegionIntersection[a,b]
Zwraca przecięcie obszarówa
,b
.Area
zajmuje obszar.IntegerPart
zaokrągla w dół do najbliższej liczby całkowitej.źródło
IntegerPart
zFloor
.Floor[ ]
).Wolfram Language (Mathematica) , 50 bajtów
Wypróbuj online!
źródło
Floor
. Oczywiście!C (gcc) ,
83 79 7166 bajtówWypróbuj online!
źródło
Haskell , 83 bajty
Tylko formuła, naprawdę. Typ musi być zadeklarowany jak
Int
dla NaN, aby zamapować na 0 za pomocąfloor
.Wypróbuj online!
źródło
JavaScript (Node.js) , 69 bajtów
Wypróbuj online!
Krótko nie jestem pewien, czy można dalej grać w golfa. Wszelkie sugestie są mile widziane
źródło
Perl 6 , 56 bajtów
Wypróbuj online!
Przyjmuje współrzędne okręgu jako liczby zespolone.
źródło
Excel, 119 bajtów
Dane wejściowe przyjęte jako 5 oddzielnych zmiennych:
źródło
Python 2 , 109 bajtów
Wypróbuj online!
Całkiem proste. Uzyskaj odległość między okręgami i użyj
R=2r
jako podstawnika w równaniu.d<R and
do zwarcia, jeśli koła się nie nakładają.źródło
Pyth , 63 bajty
Zestaw testowy
Pobiera dane wejściowe jako potrójny składający się z dwóch podwójnych i jednej liczby.
źródło
T-SQL, 122 bajty
(podział linii tylko dla czytelności).
Wykorzystuje obsługę MS SQL w geometrii przestrzennej .
Zgodnie z naszymi standardami IO , SQL może pobierać dane z uprzednio istniejącej tabeli T z
int
pola R ivarchar
pól i b zawierających współrzędne w formacie(x y)
.Moje oświadczenie analizuje współrzędne jako
POINT
obiekty geometryczne rozszerzone o promień za pomocą funkcjiSTBuffer()
, a następnie przyjmujeSTIntersection()
znakSTArea()
.Jeśli zamiast tego mogę wprowadzić rzeczywiste obiekty geometrii do tabeli, mój kod stanie się prawie trywialny (48 bajtów):
źródło