Mengingat koordinat pusat dan jari-jari 2 lingkaran, menghasilkan nilai kebenaran apakah mereka tumpang tindih atau tidak.
Memasukkan
Input dapat diambil melalui STDIN atau argumen fungsi yang setara, tetapi tidak sebagai variabel. Anda dapat mengambilnya sebagai variabel tunggal (daftar, string, dll) atau sebagai beberapa input / argumen, dalam urutan apa pun yang Anda inginkan.
Input akan menjadi enam float. Pelampung ini akan mencapai 3 desimal. Koordinat bisa positif atau negatif. Jari-jari akan positif.
Keluaran
Output bisa melalui STDOUT atau fungsi kembali.
Program harus memiliki tepat 2 output berbeda - satu untuk nilai True (lingkaran melakukan tumpang tindih) dan satu untuk output False (mereka tidak tumpang tindih).
Uji kasus
(Input diberikan sebagai daftar tupel [(x1, y1, r1), (x2, y2, r2)]
untuk kasus uji; Anda dapat mengambil input dalam format apa pun)
Benar
[(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)]
Salah
[(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)]
Ini adalah Code Golf, jawaban terpendek dalam byte yang menang.
Jawaban:
Jelly , 5 byte
Membawa dua bilangan kompleks (tengah) sebagai argumen pertama, dan dua bilangan real (jari-jari) sebagai argumen kedua.
Cobalah online!
Bagaimana itu bekerja
sumber
A
sini akan dianggap sebagai norma dari vektor baris "tengah"? (ÆḊ
Kesalahan itu sendiri dengan konten yang kompleks.)A
menghitung jarak pusat sebagai norma dari vektor perbedaan mereka.JavaScript (ES6), 38 byte
Mengambil input sebagai 6 variabel berbeda x1 , y1 , r1 , x2 , y2 , r2 .
Uji kasus
Tampilkan cuplikan kode
sumber
a:Double,x:Double,b:Double,y:Double,r:Double,q:Double
.Pyth, 5 byte
Masukkan format:
Cobalah online
Bagaimana itu bekerja
sumber
MATL , 5 byte
Format input adalah:
Cobalah online! Atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
5
byte (-|
bukanZP
)-r2
bukannyar2
akan membantu karena Anda akan memerlukan tiga perbedaan, bukan 2 perbedaan dan tambahan ... Saya lebih baik menjalankan sebelum saya ditarik terlalu dalam!R , 39 byte
membutuhkan input
k=c(x1,x2,y1,y2)
danr=c(r1,r2)
; kembaliFALSE
untuk lingkaran singgung.Cobalah online!
27 byte:
Mengambil input sebagai matriks dengan pusat lingkaran diberikan sebagai baris dan vektor jari-jari.
Cobalah online!
sumber
function(k,r)dist(matrix(k,2))<sum(r)
dist(matrix(scan(),2))<sum(scan())
?Python , 40 byte
Cobalah online!
Menggunakan aritmatika Python yang rumit untuk menghitung jarak antara dua pusat. Saya berasumsi kita tidak bisa mengambil titik input langsung sebagai angka kompleks, jadi kodenya seperti itu
x+y*1j
.sumber
Python 3 , 45 byte
Cobalah online!
sumber
05AB1E , 6 byte
Cobalah online!
-1 byte dengan menggunakan
a - b > 0
daripada(reverse) b - a < 0
sumber
Python 3 , 45 byte
Cobalah online!
-8 byte terima kasih kepada Neil / Step Hen
sumber
APL (Dyalog) , 10 byte
Meminta pusat lingkaran sebagai daftar dua bilangan kompleks, lalu untuk jari-jari sebagai daftar dua bilangan
Cobalah online!
(+/⎕)
Adalah jumlah jari-jari>
lebih besar dari|
besarnya-/⎕
perbedaan pusatsumber
Mathematica, 16 byte
Memasukkan:
[{x1, y1}, {x2, y2}, r1, r2]
Mathematica memiliki
RegionIntersection
builtin, tapi itu saja panjangnya 18 byte ...Versi bawaan:
Membawa 2
Disk
objek.[Disk[{x1, y1}, r1], Disk[{x2, y2}, r2]]
.sumber
Haskell ,
3736 byteCobalah online!
Terima kasih @AndersKaseorg untuk
-1
byte!sumber
(u!v)r x y s
.Jelly , 12 byte
Cobalah online!
-2 byte terima kasih kepada Dennis
sumber
ạ/²
byte yang sama?I
bukannya mengurangi dengan perbedaan absolut.Java (OpenJDK 8) , 38 byte
Cobalah online!
sumber
Java 8,
4138 byteCoba di sini.
Rupanya, Java juga memiliki
Math.hypot
, yaitu 3 byte lebih pendek.EDIT: Baru menyadari jawaban ini sekarang persis sama dengan jawaban Java 8 @ OlivierGrégoire , jadi harap balas dia daripada saya jika Anda suka jawaban 38 byte.
Jawaban lama (41 byte) :
Coba di sini.
sumber
Pyth , 15 byte
Mengambil input dalam urutan x1, x2, y1, y2, r1, r2
Suite uji!
sumber
Perl 6 , 13 byte
Cobalah online!
Dua argumen pertama adalah jari-jari, dalam urutan mana pun. Argumen ketiga dan keempat adalah koordinat pusat, sebagai bilangan kompleks, dalam urutan apa pun.
sumber
Taksi , 1582 byte
Cobalah online!
Output
1
untuk lingkaran yang tumpang tindih.Output
0
untuk lingkaran yang tidak tumpang tindih (termasuk lingkaran tangensial).Tidak diikat / diformat:
sumber
C #,
5041 byteDisimpan 9 byte berkat @KevinCruijssen.
sumber
(r+R)*2
alih-alih(r+R)+(r+R)
?+
pada RHS seharusnya menjadi*
.Scala , 23 byte
Terima kasih @Arnauld untuk nya hampir polyglot jawabannya .
Cobalah online!
sumber
PostgreSQL, 41 karakter
Pernyataan siap, mengambil input sebagai 2 parameter dalam
circle
notasi apa pun .Contoh dijalankan:
sumber
Java,
5038 bytesumber
(x,y,r,X,Y,R)->Math.hypot(x-X,y-Y)<r+R
. Faktanya, baru menyadari ini sama persis dengan jawaban JavaScript Arnauld.Kode Mesin x86 (dengan SSE2), 36 byte
Fungsi di atas menerima deskripsi dua lingkaran (koordinat x dan y dari titik pusat dan jari-jari), dan mengembalikan nilai Boolean yang menunjukkan apakah mereka berpotongan atau tidak.
Menggunakan konvensi pemanggilan vektor, di mana parameter dilewatkan dalam register SIMD. Pada x86-32 dan 64-bit Windows, ini adalah
__vectorcall
konvensi pemanggilan . Pada Unix / Linux / Gnu 64-bit, ini adalah konvensi pemanggilan Sistem V AMD64 standar .Nilai kembali dibiarkan dalam byte rendah
EAX
, seperti standar dengan semua konvensi pemanggilan x86.Kode ini berfungsi dengan baik pada prosesor x86 32-bit dan 64-bit, selama mereka mendukung set instruksi SSE2 (yang akan menjadi Intel Pentium 4 dan yang lebih baru, atau AMD Athlon 64 dan yang lebih baru).
Versi AVX, masih 36 byte
Jika Anda menargetkan AVX , Anda mungkin ingin menambahkan awalan VEX ke instruksi. Ini tidak mengubah jumlah byte; hanya byte aktual yang digunakan untuk menyandikan instruksi:
Instruksi AVX memiliki keuntungan dengan mengambil tiga operan, memungkinkan Anda untuk melakukan operasi yang tidak merusak, tetapi itu tidak benar-benar membantu kami untuk memadatkan kode di sini. Namun, mencampur instruksi dengan dan tanpa awalan VEX dapat menghasilkan kode yang kurang optimal, jadi Anda biasanya ingin tetap menggunakan semua instruksi AVX jika Anda menargetkan AVX, dan dalam hal ini, bahkan tidak akan mengganggu jumlah byte Anda.
sumber
05AB1E , 10 byte
Cobalah online!
sumber
PHP , 66 byte
Cobalah online!
Berjalan dari baris perintah, mengambil input sebagai 6 argumen parameter baris perintah, dan mencetak 1 jika lingkaran tumpang tindih, atau 0.
sumber
Julia 0.6.0 (46 bytes)
sumber
Clojure, 68 byte
Membawa enam argumen: x1, y1, r1, x2, y2, r2. Mengembalikan nilai true atau false.
Sedihnya, Clojure tidak memiliki
pow
fungsi semacam itu. Biaya banyak byte.sumber
Sebenarnya , 8 byte
Cobalah online!
Penjelasan:
sumber
R (+ pryr), 31 byte
Yang mengevaluasi fungsi
Di mana
x
koordinat lingkaran 1,y
adalah koordinat lingkaran 2 danz
jari-jari.Hitung jarak antara dua pusat menggunakan Pythagoras dan uji apakah jarak itu lebih kecil dari jumlah jari-jari.
Memanfaatkan vektorisasi R untuk menghitung
(x1-x2)^2
dan(y1-y2)^2
. Ini kemudian dijumlahkan dan berakar tepat.sumber
Pergi , 93 byte
Algoritma yang cukup sederhana, sama dengan beberapa jawaban lain, kecuali ia menggunakan
complex
tipe bawaan dan memanggil math / cmplx.Abs ().Mengambil jari-jari sebagai bilangan kompleks tidak membantu, karena para pemain ke float64 menambahkan lebih banyak byte daripada yang disimpan oleh deklarasi variabel (tidak bisa dilakukan
float64 < complex128
).Cobalah online! Termasuk kasus uji, dan menggunakan paket utama bukan perpustakaan.
sumber