วงกลมซ้อนกันหรือไม่


21

เมื่อกำหนดพิกัดของจุดศูนย์กลางและรัศมี 2 วงกลมให้ส่งค่าความจริงว่าพวกมันทำหรือไม่ทับซ้อนกัน

อินพุต

  • อินพุตอาจถูกใช้ผ่าน STDIN หรืออาร์กิวเมนต์ฟังก์ชันที่เทียบเท่า แต่ไม่สามารถใช้เป็นตัวแปรได้ คุณสามารถใช้มันเป็นตัวแปรเดียว (รายการสตริง ฯลฯ ) หรือเป็นอินพุต / อาร์กิวเมนต์หลายรายการตามลำดับที่คุณต้องการ

  • อินพุตจะเป็นหกลอย ทุ่นเหล่านี้จะมีทศนิยมสูงสุด 3 ตำแหน่ง พิกัดอาจเป็นบวกหรือลบ รัศมีจะเป็นค่าบวก

เอาท์พุต

  • เอาต์พุตสามารถผ่าน STDOUT หรือฟังก์ชันส่งคืน

  • โปรแกรมจะต้องมีเอาต์พุตที่แตกต่างกัน 2 รายการ - หนึ่งรายการสำหรับค่า True (วงกลมซ้อนทับกัน) และอีกรายการหนึ่งสำหรับเอาต์พุตเท็จ (พวกเขาไม่ทับซ้อนกัน)

กรณีทดสอบ

(อินพุตถูกระบุเป็นรายการของ tuples [(x1, y1, r1), (x2, y2, r2)]สำหรับกรณีทดสอบคุณสามารถรับอินพุตในรูปแบบใดก็ได้)

จริง

[(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)]

เท็จ

[(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)]

นี่คือ Code Golf คำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ


4
เราต้องกลับมาอีกถ้าวงกลมสองวงสัมผัสกันจากภายนอก
JungHwan Min Min

6
คำศัพท์ทางเทคนิคสำหรับ "การสัมผัส แต่ไม่ทับซ้อนกัน" คือ "แทนเจนต์" และเป็นสิ่งที่อยู่ในรูปทรงเรขาคณิตหากไม่มีที่อื่น
dmckee

2
การลอยดูเหมือนความต้องการที่เข้มงวดมาก คุณช่วยผ่อนคลายมันให้เป็นตัวแทนทั่วไปมากขึ้นได้ไหม? ฉันต้องการแก้ปัญหานี้ใน Brain-Flak แต่ฉันไม่น่าจะใช้เวลาในการติดตั้ง IEEE float และถ้าฉันทำมันจะเป็น 90% ของจำนวนไบต์ต่อไปดังนั้นฉันจะเล่นกอล์ฟแบบลอยตัว
ข้าวสาลีตัวช่วยสร้าง

4
ฉันอยากจะชี้ให้เห็นว่าการลอยนั้นไม่ถูกต้องถึง "ทศนิยมสามตำแหน่ง" ในหลายกรณี ฉันไม่แน่ใจว่าสิ่งที่คุณต้องการคำตอบที่จะจัดการ แต่มันสับสนเล็กน้อยในขณะนี้
ตัวช่วยสร้างข้าวสาลี

2
ฉันคิดว่าคุณอาจมีความเข้าใจผิดขั้นพื้นฐานเกี่ยวกับวิธีการทำงานของลอย เนื่องจากมีขนาดคงที่เนื่องจากค่ามีขนาดใหญ่ขึ้นความแม่นยำจึงลดลง มีจุดที่ลอยไม่สามารถแสดงค่าทั้งหมดได้อย่างถูกต้องภายในทศนิยม 3 ตำแหน่ง นอกจากนี้การแก้ไขความท้าทายเพื่อลบข้อ จำกัด ที่ไม่จำเป็นออกไปนั้นไม่ได้เกิดขึ้น
Mego

คำตอบ:


18

เยลลี่ 5 ไบต์

IA<S}

รับจำนวนเชิงซ้อนสองตัว (กลาง) เป็นอาร์กิวเมนต์ตัวแรกและตัวเลขจริงสองตัว (รัศมี) เป็นอาร์กิวเมนต์ตัวที่สอง

ลองออนไลน์!

มันทำงานอย่างไร

IA<S}  Main link.
       Left argument:  [x1 + iy1, x2 + iy2]
       Right argument: [r1, r2]

I      Increments; yield (x2 - x1) + i(y2 - y1).
 A     Absolute value; yield √((x2 - x1)² + (y2 - y1)²).
   S}  Take the sum of the right argument, yielding r1 + r2.
  <    Compare the results.

ประณามฉันลืมเกี่ยวกับการใช้ตัวเลขที่ซับซ้อนสำหรับพิกัด สิ่งที่ดี! : D
HyperNeutrino

ผลลัพธ์ของAที่นี่น่าจะถือว่าเป็นบรรทัดฐานของ "ศูนย์" ของเวกเตอร์แถวหรือไม่? ( ÆḊมีข้อผิดพลาดกับเนื้อหาที่ซับซ้อน)
Jonathan Allan

1
@JanathanAllan ใช่Aคำนวณระยะทางของศูนย์เป็นบรรทัดฐานของเวกเตอร์ที่ต่างกัน
Dennis

11

JavaScript (ES6), 38 ไบต์

จะเข้าเป็นตัวแปรที่แตกต่างกัน 6 x1 , y1 , r1 , x2 , y2 , r2

(x,y,r,X,Y,R)=>Math.hypot(x-X,y-Y)<r+R

กรณีทดสอบ


สำหรับใครที่ไม่เคยใช้Math.hypotมาก่อน
Pureferret


@ V.Courtois วิธีที่คุณผ่านพารามิเตอร์ไม่ตรงกับการประกาศวิธีการ a:Double,x:Double,b:Double,y:Double,r:Double,q:Doubleมันควรจะเป็น
Arnauld

1
@Arnauld ooh ~ ขอบคุณ! ฉันควรโพสต์แยกต่างหากหรือไม่
V. Courtois

@ V. ขอให้แน่ใจว่า ไปเลย!
Arnauld


7

MATL , 5 ไบต์

ZPis<

รูปแบบอินพุตคือ:

[x1, y1]
[x2, y2]
[r1, r2]

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

ZP   % Take two vectors as input. Push their Euclidean distance
i    % Input the vector of radii
s    % Sum of vector
<    % Less than?

ไม่แน่ใจว่าเป็นฉันหรือไม่ แต่เมื่อฉันใช้ลิงค์ทดลองของคุณและกดรันฉันจะได้รับ 'ข้อผิดพลาดการตอบสนองของเซิร์ฟเวอร์ไม่สามารถถอดรหัสได้' - นอกจากนี้ยังไม่แน่ใจว่ามันช่วยได้หรือไม่ ในคำตอบของ Jelly?
Dennis Jaheruddin

@DennisJaheruddin เฮ้ดีใจที่ได้พบคุณอีกครั้งที่นี่! (1) ตำหนิการแคชน่าจะเป็น คุณลองรีเฟรชอย่างหนักหรือเปล่า? (2) ฉันทำ แต่ฉันคิดว่ามันเป็น5ไบต์ ( -|แทนZP)
Luis Mendo

ฉันคิดว่ามันเป็นไฟร์วอลล์ ตอนนี้ฉันสงสัยว่ารูปแบบอินพุตที่มีบางอย่าง-r2แทนr2จะช่วยได้หรือไม่เพราะคุณจะต้องการความแตกต่างสามประการแทนที่จะเป็น 2 ความแตกต่างและนอกจากนี้ ...
Dennis Jaheruddin

ฉันไม่คิดว่าการคัดค้านอินพุตหนึ่งรายการจะยอมรับได้ในรูปแบบอินพุต หากคุณพบปัญหาใด ๆ กับบริการ Try It Online คุณช่วยรายงานที่นี่ได้ไหม
Luis Mendo

6

R , 39 ไบต์

function(k,r)dist(matrix(k,2,2))<sum(r)

รับอินพุตk=c(x1,x2,y1,y2)และr=c(r1,r2); ส่งคืนFALSEวงกลมแทนเจนต์

ลองออนไลน์!

27 ไบต์:

function(m,r)dist(m)<sum(r)

รับอินพุตเป็นเมทริกซ์โดยมีศูนย์กลางวงกลมเป็นแถวและเวกเตอร์ของรัศมี

ลองออนไลน์!


-2 bytesfunction(k,r)dist(matrix(k,2))<sum(r)
djhurio

เกี่ยวกับdist(matrix(scan(),2))<sum(scan())อะไร
djhurio

6

Pythonขนาด 40 ไบต์

lambda x,y,r,X,Y,R:abs(x-X+(y-Y)*1j)<r+R

ลองออนไลน์!

ใช้เลขคณิตที่ซับซ้อนของ Python เพื่อคำนวณระยะห่างระหว่างจุดศูนย์กลางสองจุด ฉันสมมติว่าเราไม่สามารถรับค่าอินพุทโดยตรงเป็นจำนวนเชิงซ้อนx+y*1jได้





4

APL (Dyalog)ขนาด 10 ไบต์

แจ้งให้ศูนย์กลางวงกลมเป็นรายการของจำนวนเชิงซ้อนสองค่าจากนั้นให้รัศมีเป็นรายการของตัวเลขสองตัว

(+/⎕)>|-/

ลองออนไลน์!

(+/⎕) [คือ] ผลรวมของรัศมี

> มากกว่า

| ขนาดของ

-/⎕ ความแตกต่างในศูนย์


3

Mathematica ขนาด 16 ไบต์

Norm[#-#2]<+##3&

การป้อนข้อมูล: [{x1, y1}, {x2, y2}, r1, r2]


Mathematica มีRegionIntersectionbuiltin แต่เพียงอย่างเดียวคือ 18 ไบต์ยาว ...

เวอร์ชั่นในตัว:

RegionIntersection@##==EmptyRegion@2&

รับDiskวัตถุ2 ชิ้น [Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]].



3

เยลลี่ 12 ไบต์

I²+⁴I²¤<⁵S²¤

ลองออนไลน์!

-2 ไบต์ขอบคุณเดนนิส


จะไม่สร้างลิงค์ใหม่ด้วยạ/²ไบต์เดียวกันหรือไม่
caird coinheringaahing

@cairdcoinheringaahing?
HyperNeutrino

ไม่เป็นไรฉันได้ 14 ไบต์โดยทำสิ่งนี้
caird coinheringaahing

คุณสามารถใช้Iแทนการลดลงโดยความแตกต่างแน่นอน
Dennis

@Dennis Ooh ขอบคุณ
HyperNeutrino


3

Java 8, 41 38 ไบต์

(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R

ลองที่นี่

เห็นได้ชัดว่า Java ยังมีMath.hypotซึ่งสั้นลง 3 ไบต์

แก้ไข: เพิ่งรู้ว่าคำตอบนี้ตอนนี้เหมือนกับคำตอบ Java 8 ของ@ OlivierGrégoireดังนั้นโปรดโหวตให้เขาแทนฉันถ้าคุณชอบคำตอบขนาด 38 ไบต์

คำตอบเก่า (41 ไบต์) :

(x,y,r,X,Y,R)->(x-=X)*x+(y-=Y)*y<(r+=R)*r

ลองที่นี่


1
Oh! นั่นคือเหตุผลที่ฉันได้รับ 3 upvote วันนี้ แต่ 0 เมื่อมีการโพสต์ความท้าทาย? ^^ ฉันสงสัยว่าสิ่งใดที่กระตุ้นพฤติกรรมแปลก ๆ นี้) เนื่องจากฉันชอบคำตอบของฉันและคุณโพสต์สิ่งเดียวกันคุณจะได้รับ +1 ด้วย! : p
Olivier Grégoire


2

Perl 6 , 13 ไบต์

*+*>(*-*).abs

ลองออนไลน์!

ข้อโต้แย้งสองข้อแรกคือรัศมีในลำดับใดก็ได้ อาร์กิวเมนต์ที่สามและสี่คือพิกัดของศูนย์เป็นจำนวนเชิงซ้อนในลำดับใดก็ได้


2

แท็กซี่ 1582 ไบต์

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Pickup a passenger going to Tom's Trims.Pickup a passenger going to Tom's Trims.Go to Tom's Trims:n.[a]Go to Post Office:s.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to What's The Difference.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 5 l.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 r.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to Addition Alley.Go to Tom's Trims:s 1 r 3 r.Pickup a passenger going to The Babelfishery.Switch to plan "b" if no one is waiting.Switch to plan "a".[b]Go to Addition Alley:n 1 r 1 l 3 l 1 l.Pickup a passenger going to Magic Eight.Go to Post Office:n 1 r 1 r 3 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Addition Alley.Pickup a passenger going to Addition Alley.Go to Addition Alley:n 5 l 1 l.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l.Pickup a passenger going to Multiplication Station.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to Magic Eight.Go to Magic Eight:s 1 r.Switch to plan "c" if no one is waiting.'1' is waiting at Writer's Depot.[c]'0' is waiting at Writer's Depot.Go to Writer's Depot:w 1 l 2 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.

ลองออนไลน์!

เอาต์พุต1สำหรับวงกลมที่ทับซ้อนกัน
เอาต์พุต0สำหรับวงกลมที่ไม่ทับซ้อนกัน (รวมถึงวงกลมแทนเจนต์)

Ungolfed / จัดรูปแบบ:

Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Pickup a passenger going to Tom's Trims.
Pickup a passenger going to Tom's Trims.
Go to Tom's Trims: north.
[a]
Go to Post Office: south.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: north 5th left.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st right.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station: south 1st left 2nd right 4th left.
Pickup a passenger going to Addition Alley.
Go to Tom's Trims: south 1st right 3rd right.
Pickup a passenger going to The Babelfishery.
Switch to plan "b" if no one is waiting.
Switch to plan "a".
[b]
Go to Addition Alley: north 1st right 1st left 3rd left 1st left.
Pickup a passenger going to Magic Eight.
Go to Post Office: north 1st right 1st right 3rd right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to Addition Alley.
Go to Addition Alley: north 5th left 1st left.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left 1st left.
Pickup a passenger going to Multiplication Station.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station: south 1st left 2nd right 4th left.
Pickup a passenger going to Magic Eight.
Go to Magic Eight: south 1st right.
Switch to plan "c" if no one is waiting.
'1' is waiting at Writer's Depot.
[c]
'0' is waiting at Writer's Depot.
Go to Writer's Depot: west 1st left 2nd left.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st right 2nd right 1st left.

2

C #, 50 41 ไบต์

(x,y,r,X,Y,R)=>(x-=X)*x+(y-=Y)*y<(r+=R)*r

บันทึกแล้ว 9 ไบต์ขอบคุณ @KevinCruijssen


คุณไม่สามารถบันทึกไม่กี่ไบต์โดยเขียน(r+R)*2แทน(r+R)+(r+R)?
Ian H.

@IanH ใช่ไม่รู้ว่าฉันพลาดมันไปได้อย่างไร
TheLethalCoder

ฉันทำบางสิ่งบางอย่างขาดหายไปหรือไม่ได้ผล ?
Ian H.

@IanH ผมพิมพ์ผิดที่+เกี่ยวกับ RHS *ควรจะได้รับ
TheLethalCoder

และความคิดเห็นของฉันก็ยิ่งทำให้แย่ลง ทำได้ดีในการแก้ปัญหาแม้ว่า!
Ian H.


1

PostgreSQL 41 ตัวอักษร

prepare f(circle,circle)as select $1&&$2;

งบที่เตรียมจะเข้าเป็น 2 พารามิเตอร์ในสัญกรณ์circle

วิ่งตัวอย่าง:

Tuples only is on.
Output format is unaligned.
psql (9.6.3, server 9.4.8)
Type "help" for help.

psql=# prepare f(circle,circle)as select $1&&$2;
PREPARE

psql=# execute f('5.86, 3.92, 1.670', '11.8, 2.98, 4.571');
t

psql=# execute f('8.26, -2.72, 2.488', '4.59, -2.97, 1.345');
t

psql=# execute f('9.32, -7.77, 2.8', '6.21, -8.51, 0.4');
t

psql=# execute f('4.59, -2.97, 1.345', '11.8, 2.98, 4.571');
f

psql=# execute f('9.32, -7.77, 2.8', '4.59, -2.97, 1.345');
f

psql=# execute f('5.86, 3.92, 1.670', '6.21, -8.51, 0.4');
f

1

Java, 50 38 ไบต์

(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R

ใช้ความคิดในคำตอบอื่น ๆ นี้จะสั้นลงถึง 38 (x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+Rชอบโดย: ที่จริงแล้วเพิ่งรู้ว่านี่เป็นคำตอบเดียวกับ JavaScript ของ Arnauld
laszlok

ขอบคุณ ... คำตอบนี้ไม่ได้ตั้งใจจะ golfed ... ฉันคิดว่ามันเป็นความท้าทายที่เรียบง่ายไม่มีอะไรที่จะสามารถเล่นกอล์ฟได้ ...
Roman Gräf

ฉันเกรงว่าคำตอบของคุณจะเหมือนกับคำตอบที่โพสต์แล้วโดย@ OlivierGrégoire ..
Kevin Cruijssen

1

x86 รหัสเครื่อง (พร้อม SSE2), 36 ไบต์

; bool CirclesOverlap(double x1, double y1, double r1,
;                     double x2, double y2, double r2);
F2 0F 5C C3        subsd   xmm0, xmm3      ; x1 - x2
F2 0F 5C CC        subsd   xmm1, xmm4      ; y1 - y2
F2 0F 58 D5        addsd   xmm2, xmm5      ; r1 + r2
F2 0F 59 C0        mulsd   xmm0, xmm0      ; (x1 - x2)^2
F2 0F 59 C9        mulsd   xmm1, xmm1      ; (y1 - y2)^2
F2 0F 59 D2        mulsd   xmm2, xmm2      ; (r1 + r2)^2
F2 0F 58 C1        addsd   xmm0, xmm1      ; (x1 - x2)^2 + (y1 - y2)^2
66 0F 2F D0        comisd  xmm2, xmm0
0F 97 C0           seta    al              ; ((r1 + r2)^2) > ((x1 - x2)^2 + (y1 - y2)^2)
C3                 ret

ฟังก์ชั่นด้านบนยอมรับคำอธิบายของวงกลมสองวง (x- และ y- พิกัดของจุดกึ่งกลางและรัศมี) และส่งกลับค่าบูลีนที่ระบุว่าพวกเขาตัดกันหรือไม่

มันใช้หลักการเรียกเวกเตอร์โดยที่พารามิเตอร์ถูกส่งผ่านในการลงทะเบียน SIMD บน x86-32 และ Windows 64-bit นี้เป็นเรียกประชุม__vectorcall เมื่อวันที่ 64 บิต Unix / Linux / Gnu นี้เป็นมาตรฐานระบบวี AMD64 เรียกประชุม

ค่าส่งคืนจะเหลืออยู่ในไบต์ต่ำEAXเช่นเดียวกับมาตรฐานที่มีการเรียกการประชุม x86 ทั้งหมด

รหัสนี้ทำงานได้ดีเท่าเทียมกันในโปรเซสเซอร์ 32- บิตและ 64- บิต x86 ตราบใดที่พวกเขาสนับสนุนชุดคำสั่ง SSE2 (ซึ่งจะเป็น Intel Pentium 4 และใหม่กว่าหรือ AMD Athlon 64 และใหม่กว่า)

รุ่น AVX ขนาด 36 ไบต์

หากคุณกำหนดเป้าหมายเป็นAVXคุณอาจต้องการเพิ่มคำนำหน้า VEX ลงในคำแนะนำ สิ่งนี้จะไม่เปลี่ยนจำนวนไบต์ เพียงไบต์จริงที่ใช้ในการเข้ารหัสคำแนะนำ:

; bool CirclesOverlap(double x1, double y1, double r1,
;                     double x2, double y2, double r2);
C5 FB 5C C3      vsubsd   xmm0, xmm0, xmm3   ; x1 - x2
C5 F3 5C CC      vsubsd   xmm1, xmm1, xmm4   ; y1 - y2
C5 EB 58 D5      vaddsd   xmm2, xmm2, xmm5   ; r1 + r2
C5 FB 59 C0      vmulsd   xmm0, xmm0, xmm0   ; (x1 - x2)^2
C5 F3 59 C9      vmulsd   xmm1, xmm1, xmm1   ; (y1 - y2)^2
C5 EB 59 D2      vmulsd   xmm2, xmm2, xmm2   ; (r1 + r2)^2
C5 FB 58 C1      vaddsd   xmm0, xmm0, xmm1   ; (x1 - x2)^2 + (y1 - y2)^2
C5 F9 2F D0      vcomisd  xmm2, xmm0
0F 97 C0         seta     al                 ; ((r1 + r2)^2) > ((x1 - x2)^2 + (y1 - y2)^2)
C3               ret

คำแนะนำ AVX มีข้อได้เปรียบในการใช้งานตัวถูกดำเนินการสามตัวซึ่งช่วยให้คุณสามารถดำเนินการแบบไม่ทำลายได้ แต่นั่นไม่ได้ช่วยให้เราบีบอัดรหัสที่นี่ได้จริงๆ อย่างไรก็ตามการผสมคำสั่งที่มีและไม่มีคำนำหน้า VEX อาจส่งผลให้เกิดโค้ดย่อยที่ดีที่สุดดังนั้นโดยทั่วไปคุณต้องการที่จะยึดคำสั่ง AVX ทั้งหมดหากคุณกำหนดเป้าหมายเป็น AVX และในกรณีนี้มันไม่ได้ทำให้จำนวนไบต์ของคุณเสียหาย



1

PHP , 66 ไบต์

<?php $i=$argv;echo hypot($i[1]-$i[4],$i[2]-$i[5])<$i[3]+$i[6]?:0;

ลองออนไลน์!

เรียกใช้จากบรรทัดคำสั่งโดยรับอินพุตเป็นอาร์กิวเมนต์พารามิเตอร์บรรทัดคำสั่ง 6 รายการและพิมพ์ 1 หากวงกลมทับซ้อนมิฉะนั้น 0



0

Clojure, 68 ไบต์

#(<(+(*(- %4 %)(- %4 %))(*(- %5 %2)(- %5 %2)))(*(+ %6 %3)(+ %6 %3)))

รับหกอาร์กิวเมนต์: x1, y1, r1, x2, y2, r2 ส่งคืนจริงหรือเท็จ

น่าเศร้าที่ Clojure ไม่มีpowฟังก์ชั่นบางประเภท ค่าใช้จ่ายจำนวนมากไบต์



0

R (+ pryr) 31 ไบต์

pryr::f(sum((x-y)^2)^.5<sum(r))

ซึ่งประเมินผลการทำงาน

function (x, y, z) 
sum((x - y)^2)^0.5 < sum(z)

xพิกัดของวงกลม 1 อยู่ที่ไหนyพิกัดของวงกลม 2 และzรัศมี

คำนวณระยะทางระหว่างจุดศูนย์กลางสองจุดด้วย Pythagoras และการทดสอบว่าระยะทางนั้นน้อยกว่าผลรวมของรัศมีหรือไม่

ทำให้การใช้ vectorisation อาร์เอสไปพร้อม ๆ กันการคำนวณและ(x1-x2)^2 (y1-y2)^2สิ่งเหล่านี้จะถูกสรุปและหยั่งรากอย่างเต็มที่


0

ไป 93 ไบต์

package q
import c "math/cmplx"
func o(a,b complex128,r,R float64)bool{return c.Abs(b-a)<r+R}

อัลกอริธึมที่ค่อนข้างง่ายเหมือนกับคำตอบอื่น ๆ ยกเว้นว่าใช้ในตัว complexชนิดและใช้คำสั่ง math / cmplx.Abs ()

การใช้รัศมีเป็นตัวเลขที่ซับซ้อนนั้นไม่ได้ช่วยเพราะการร่ายไปยัง float64 เพิ่มจำนวนไบต์มากกว่าการประกาศตัวแปรที่บันทึก (ไม่สามารถทำได้ float64 < complex128 )

ลองออนไลน์! รวมถึงกรณีทดสอบและใช้แพคเกจหลักแทนห้องสมุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.