pengantar
Bayangkan Anda berada di pesawat kartesius dua dimensi dan ingin menentukan posisi Anda di atasnya. Anda tahu 3 poin di pesawat itu dan jarak Anda ke masing-masing. Meskipun selalu mungkin untuk menghitung posisi Anda dari itu, melakukan hal itu di kepala Anda cukup sulit. Jadi Anda memutuskan untuk menulis program untuk itu.
Tantangan
Diberikan 3 poin dan jarak Anda dengan mereka, output kordinat posisi Anda.
- Input dan output mungkin dalam format apa pun yang nyaman, termasuk menggunakan kompleks bukan bilangan real. Harap jelaskan dalam jawaban Anda format mana yang Anda gunakan.
- Anda akan selalu mendapatkan 3 poin berbeda dengan jarak mereka ke Anda.
- Koordinat dan jarak akan mengapung dengan presisi sewenang-wenang. Output Anda harus benar hingga 3 tempat desimal. Pembulatan terserah Anda. Harap jelaskan jawaban Anda.
- Anda mungkin berasumsi bahwa ketiga poin tersebut bukan collinear, jadi akan selalu ada solusi unik.
- Anda tidak boleh memaksa solusi.
- Anda tidak boleh menggunakan bawaan apa pun yang meremehkan masalah khusus ini. Dibangun untuk norma-norma vektor, dll diperbolehkan.
Petunjuk untuk memulai:
Pikirkan tentang lingkaran di sekitar masing-masing 3 titik dengan jarak mereka kepada Anda sebagai jari-jari.
Aturan
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
Format input untuk satu titik di sini adalah [[x,y],d]
dengan x
dan y
menjadi koordinat dan d
menjadi jarak ke titik ini. 3 poin tersebut diatur dalam daftar. Output akan x
dan kemudian y
dalam daftar.
[[[1, 2], 1.414], [[1, 1], 2.236], [[2, 2], 1.0]] -> [2, 3] [[[24.234, -13.902], 31.46], [[12.3242, 234.12], 229.953], [[23.983, 0.321], 25.572]] -> [-1.234, 4.567] [[[973.23, -123.221], 1398.016], [[-12.123, -98.001], 990.537], [[-176.92, 0], 912.087]] -> [12.345, 892.234]
Anda dapat membuat test case tambahan dengan program Pyth ini . Lokasi berada pada baris pertama input dan 3 poin berada pada 3 baris berikut.
Selamat Coding!
solve
(diberi persamaan tiga lingkaran) meremehkan masalah? Saya pikir itu, tetapi jika Anda baik-baik saja dengan hal-hal seperti itu saya akan pergi dan mempostingnya.Jawaban:
Desmos, 122 byte
Penggunaan online . Salin + rekatkan setiap persamaan ke dalam kotak persamaan, klik "tambahkan semua" untuk setiap kotak, lalu klik pada titik persimpangan, lalu masukkan di setiap nilai yang sesuai. masing-masing
A
,B
danC
adalah jarak untuk poin(a,b)
,(c,d)
dan(E,f)
masing-masing. Untuk mendapatkan akar kuadrat dalam nilai, ketikkansqrt
kemudian nilai dalam kotak.Verifikasi kasus uji pertama .
Atau Anda bisa melihatnya di sini:
sumber
C,
362348345 byteInput diberikan sebagai urutan mengapung ruang-dipisahkan pada stdin:
x1 y1 d1 x2 y2 d2 x3 y3 d3
. Output mirip pada stdout:x y
.C
adalah tipe struktur yang anggotanya adalah koordinat xa
, koordinat yb
, dan jarak (radius)c
. Fungsi inif
mengambil duaC
struktur dan pointer ke float, dan menentukan garis di manaC
(lingkaran) berpotongan. Y-intersep dari garis ini ditempatkan ke float berujung-runcing, dan kemiringan dikembalikan.Program memanggil
f
dua pasang lingkaran, kemudian menentukan persimpangan jalur yang dihasilkan.sumber
f
dihasilkan tidak akan pernah paralel. Tes ini untuk memastikan mereka juga tidak vertikal, karena saya menggunakan bentuk slope-intercept. Dengan cara ini, selalu ada tepat satu jawaban.Python - 172
Mengambil input sebagai daftar tupel formulir (x, y, d). Beritahu saya jika Anda melihat cara untuk bermain golf ini lebih jauh, saya merasa harus ada tetapi saya tidak bisa mengetahuinya!
sumber
-1 if 1 else 1
bisa menjadi-1if 1else 1
contohnya. Ini juga berfungsi dengan tanda kurung. Ada beberapa tempat di mana Anda dapat memanfaatkannya. Juga.5
sama dengan0.5
.