Penjelasan Masalah Singkat
Tulis program untuk menemukan jarak minimum antara dua titik yang hanya bepergian dengan sinar yang berasal dari titik asal dan lingkaran yang berpusat di titik asal.
Penjelasan Premis
Sekarang mari kita bayangkan kita berada di pesawat, dan di pesawat ini kita hanya boleh bepergian dengan cara khusus. Kami diizinkan melakukan perjalanan dengan sinar apa pun yang berasal dari asal.
Kita juga bisa bepergian di lingkaran mana saja yang berpusat pada lingkaran
Sekarang tujuan kami adalah melakukan perjalanan dari satu titik di pesawat ini ke yang lain. Namun, kita tidak bisa hanya melakukan perjalanan di jalur Euclidian sederhana, kita hanya bisa melakukan ini jika titik-titik jatuh pada sinar yang berasal dari pusat.
Kita dapat melakukan perjalanan ini karena itu jatuh pada salah satu dari sinar kita.
Kita juga bisa bepergian dengan lingkaran yang berpusat di titik asal.
Contohnya
Sekarang inilah tantangannya:
Kita harus berpindah dari satu titik ke titik lainnya di jalur terpendek; sering kali ini merupakan kombinasi bepergian dengan lingkaran dan sinar.
Ini, bagaimanapun, bisa juga bepergian dengan dua sinar.
Terkadang ada dua jalur yang menempuh jarak minimum.
Masalah
Tantangan Anda adalah menulis sebuah program yang ketika diberi dua poin akan memberi kami jarak minimum di antara mereka jika kami mengikuti aturan ini. Input dapat diberikan dalam bentuk persegi panjang atau kutub dan output harus satu angka, jarak antara.
Uji Kasus
(dengan input persegi panjang)
(1,1) (1,-1) -> ~ 2.22144
(0,0) (1, 1) -> ~ 1.41421
(1,0) (-0.4161 , 0.90929) -> ~ 2
(1,1) (1, 0) -> ~ 1.19961
(1,2) (3, 4) -> ~ 3.16609
sumber
Jawaban:
Haskell,
4948 bytePemakaian:
Terima kasih kepada @Zgarb karena telah menghemat satu byte
sumber
(a!q)c r
alih-alihd a q c r
.JavaScript (ES6), 65 byte
Mengambil koordinat kutub. Menggunakan trik @Angs 'untuk mengurangi sudut antara 0 dan π. Untuk koordinat persegi panjang, sesuatu seperti ini berfungsi:
sumber
MATL , 22 byte
Input adalah array dari dua bilangan kompleks.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Ruby, 64 byte
Pertama, pengajuan saya. Fungsi Lambda dengan argumen
distance 1, angle 1, distance 2, angle2
.Sekarang inilah dua solusi berbeda dari 66 byte (tidak termasuk penugasan
f=
) diikuti oleh kiriman aktual saya lagi pada 64 byte.Pengajuan didasarkan pada solusi 2, tetapi menggunakan identitas
(s-r).abs
=s+r-[s,r].min*2
untuk mempersingkat kode dengan 2 byte, maka di-2
dalam kurung.Fitur penting lainnya adalah ekspresi
?i.to_c.arg*4
= 2 * PI tanpa menggunakaninclude Math
. Jika presisi yang lebih rendah dapat diterima, ini bisa diganti dengan literal.Solusi 2 dikomentari dalam program uji
Keluaran
sumber
Mathematica 66 Bytes
Ini membutuhkan koordinat persegi panjang dan dapat menghasilkan solusi simbolik yang tepat
Pemakaian:
hasil:
N @% hasil:
{2.221441469, 1.414213562, 1.999934259, 1.199611726, 3.166096674}
sumber
Python 2,
164126125132 byte:Saya saat ini melihat ke golf ini lagi. Menerima koordinat kutub. Harus dipanggil dalam format
A(r1,θ1,r2,θ2)
. Menghasilkan nilai floating point yang akurat hingga12
angka signifikan.Cobalah secara Online! (Ideone)
Implementasi sederhana, langsung yang menghitung dan menghasilkan untuk STDOUT nilai minimum dari array paling banyak 3 nilai yang mengandung:
r1+r2
) atau panjang busur yang menghubungkan dua titik iffr1==r2
;abs(r1-r2)
) IFFθ1==θ2
(yaitu dua poin collinear);''
) seperti yang tampak dalam Python string lebih besar dari integer apa pun;sumber
math.pi
?Bahasa Wolfram (Mathematica) , 47 byte
Cobalah online!
(mengalahkan jawaban 66 byte saat ini)
Ambil input sebagai 2 angka kompleks.
Mungkin memiliki beberapa masalah jika inputnya simbolis. (misalnya,
Cos@2 + I Sin@2
)sumber