Beschreibung :
Gegeben x
und y
Positionen von zwei Kreisen zusammen mit deren radii
, geben Sie den Schnittbereich der beiden Kreise aus.
Eingabe:
Sie erhalten folgende Eingabe:
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
Eingabe Methode :
([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
Ausgabe :
Eine nicht negative ganze Zahl (keine Dezimalzahl), die der Schnittfläche zweier Kreise entspricht.
Eine Zeichenfolge, die der oben genannten Ganzzahl entspricht.
Hinweis :
- Der Ausgang muss> = 0 sein, da der Bereich nicht negativ sein kann.
- Bei Dezimalstellen auf nächste Ganzzahl abrunden
Beispiele:
([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
Gewinnkriterien:
Dies ist Code-Golf, so dass der kürzeste Code in Bytes für jede Sprache gewinnt.
Vorschläge :
- Stellen Sie eine TIO-Verbindung bereit, damit diese getestet werden kann.
- Geben Sie eine Erklärung an, damit andere Ihren Code verstehen können
Dies sind nur Vorschläge und sind nicht obligatorisch.
code-golf
math
array-manipulation
geometry
Muhammad Salman
quelle
quelle
answer must be positive
zuanswer must be >= 0
- Wenn sich die Kreise nicht schneiden (wie in den Beispielen 4, 7, 10), ist die richtige Antwort 0, was ich zuletzt überprüft habe, ist nicht positiv.Antworten:
Jelly ,
27 25 2422 BytesEin vollständiges Programm, das eine Liste der beiden Zentren als komplexe Koordinaten und den Radius, der das Ergebnis ausgibt, akzeptiert (als dyadische Verknüpfung gibt es eine Liste der Länge 1 zurück).
Probieren Sie es online!
Nehmen die beiden Koordinaten als Paare hinzufügen ,
Uḅı
um die Hauptverbindung, wie diese .Wie?
quelle
[[x1,y1],[x2,y2]]
stattdessen tun, aber es kostet 3 Bytes. (Beachten Sie auch, dass-7+13j
das eine Zahl ist :)) - das[-7+13j,-25+-5j]
entspricht dem Beispiel, das zurückgibt132
,[-7, 13], [-25, -5], 17
JavaScript (ES6), 72 Byte
Alternative Formel vorgeschlagen von @ceilingcat
Übernimmt die Eingabe als 5 verschiedene Parameter (x0, y0, x1, y1, r) .
Probieren Sie es online!
JavaScript (ES7),
818077 Byte3 Bytes dank @Neil gespart
Übernimmt die Eingabe als 5 verschiedene Parameter (x0, y0, x1, y1, r) .
Probieren Sie es online!
Wie?
Dies basiert auf einer generischen Formel von MathWorld für nicht kongruente Kreise:
wo d der Abstand zwischen den beiden Zentren ist und r und R die Radien sind.
Mit R = r vereinfacht sich dies zu:
Und mit r '= 2r :
Hinweis : Wenn d größer als 2r ist ,
Math.acos()
wird zurückgegebenNaN
, was auf 0 erzwungen wird, wenn die Rechtsverschiebung angewendet wird. Dies ist das erwartete Ergebnis, da d> 2r bedeutet, dass es überhaupt keine Kreuzung gibt.quelle
d*(r*r-d*d)**.5
Spart 3 Bytes.with(Math)
und Verschieben der Definition von werdend
2 weitere Bytes gespeichert.Mathematica
66 5751 BytesA
Disk[{x,y},r]
bezieht sich auf die Region, die von dem Kreis umschrieben wird, der um zentriert ist{x,y}
mit einem Radius vonr
.RegionIntersection[a,b]
gibt den Schnittpunkt der Regionena
,b
.Area
nimmt den Bereich.IntegerPart
Rundet auf die nächste Ganzzahl ab.quelle
IntegerPart
mitFloor
.Floor[ ]
).Wolfram Language (Mathematica) , 50 Byte
Probieren Sie es online!
quelle
Floor
. Natürlich!C (gcc) ,
83 79 7166 BytesProbieren Sie es online!
quelle
Haskell , 83 Bytes
Wirklich nur die Formel. Typ muss als deklariert werden
Int
für NaN , um mit 0 zuzuordnenfloor
.Probieren Sie es online!
quelle
JavaScript (Node.js) , 69 Byte
Probieren Sie es online!
Kurz nicht sicher, ob es weiter golfen werden kann. Anregungen sind willkommen
quelle
Perl 6 , 56 Bytes
Probieren Sie es online!
Nimmt Kreiskoordinaten als komplexe Zahlen.
quelle
Excel, 119 Bytes
Eingabe als 5 separate Variablen:
quelle
Python 2 , 109 Bytes
Probieren Sie es online!
Ziemlich einfach. Ermitteln Sie den Abstand zwischen den Kreisen und verwenden Sie ihn
R=2r
als Substituenten in der Gleichung.d<R and
kurzschließen, wenn sich Kreise nicht überlappen.quelle
Pyth , 63 Bytes
Testsuite
Nimmt die Eingabe als Triple, bestehend aus zwei Doppel- und einer Zahl.
quelle
T-SQL, 122 Bytes
(Zeilenumbruch nur zur besseren Lesbarkeit).
Verwendet die Unterstützung der räumlichen Geometrie von MS SQL .
Gemäß unseren E / A-Standards kann SQL Eingaben aus einer bereits vorhandenen Tabelle t mit
int
Feld r undvarchar
Feldern a und b übernehmen, die Koordinaten im Format enthalten(x y)
.Meine Anweisung analysiert die Koordinaten als
POINT
Geometrieobjekte, die mit der Funktion um den Radius erweitert wurdenSTBuffer()
, und verwendet dannSTIntersection()
dasSTArea()
.Wenn ich stattdessen die tatsächlichen Geometrieobjekte in die Tabelle eingeben darf , wird mein Code fast trivial (48 Byte):
quelle