Ini satu lagi sederhana:
Tantangan
Diberi dua titik dalam ruang n-dimensi, menghasilkan jarak di antara mereka, juga disebut jarak Euclidean.
- Koordinat akan menjadi bilangan rasional; satu-satunya batasan adalah batasan bahasa Anda.
- Dimensi terendah adalah 1, tertinggi adalah apa pun yang bisa ditangani oleh bahasa Anda
- Anda dapat mengasumsikan bahwa kedua titik tersebut memiliki dimensi yang sama dan tidak akan ada input kosong.
- Jarak harus benar ke setidaknya 3 tempat desimal. Jika bahasa Anda tidak mendukung angka floating point, keluarkan seluruh nomor terdekat.
Aturan
- Seperti biasa, fungsi atau program lengkap diizinkan.
- Masukan dapat diambil dari argumen STDIN, baris perintah atau fungsi.
- Format input terserah Anda, tentukan yang mana yang Anda gunakan dalam jawaban Anda.
- Output dapat diberikan dengan mencetak ke stdout atau mengembalikan nilai.
- Ini adalah kode-golf sehingga byte-count terendah akan menang! Dalam kasus seri, jawaban sebelumnya menang.
Uji kasus
Setiap titik diwakili oleh daftar panjang n.
[1], [3] -> 2
[1,1], [1,1] -> 0
[1,2], [3,4] -> 2.82842712475
[1,2,3,4], [5,6,7,8] -> 8
[1.5,2,-5], [-3.45,-13,145] -> 150.829382085
[13.37,2,6,-7], [1.2,3.4,-5.6,7.89] -> 22.5020221314
Selamat Coding!
code-golf
number
arithmetic
geometry
Denker
sumber
sumber
Jawaban:
MATL , 2 byte
Cobalah online !
The
ZP
function (sesuai dengan MATLABpdist2
) menghitung semua jarak berpasangan antara dua set poin, menggunakan jarak Euclidean secara default. Setiap set poin adalah sebuah matriks, dan setiap titik adalah sebuah baris. Dalam hal ini menghasilkan hasil tunggal, yaitu jarak antara dua titik.sumber
MATL,
3 byte4.0Terima kasih atas -1 oleh @AndrasDeak!
Membaca dua vektor (melalui input implisit yang diminta oleh
-
) lalu mengurangkannya dan menghitung norma perbedaannya denganZn
.Cobalah secara Online!
sumber
Pyth, 2 byte
Secara harfiah fungsi yang melakukan masalah ini
Coba di sini.
sumber
Jelly , 4 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Mathematica, 11 byte
Input sebagai dua daftar, output sebagai angka. Jika input tepat (bilangan bulat, rasional, dll.) Output akan tepat juga. Jika input berisi angka titik-mengambang, output akan menjadi float juga.
sumber
EuclideanDistance
akan bekerja dengan baik juga ... jika namanya tidak terlalu lama! Kalau saja ada "MATL for Mathematica" ini akan menjadi byte tunggal =)Oktaf, 15 byte
Contoh:
sumber
CJam,
118 byteTerima kasih kepada Dennis untuk menghemat 3 byte.
Jalankan semua test case.
Penjelasan
Lihat tip ini untuk alasan mengapa
:mh
berhasil.sumber
:mh
itu memang sangat bagusHaskell, 46 byte
Haskell, 35 byte (By @nimi)
Haskell, 31 byte
<hack>
</hack>
Contoh:
sumber
map
+uncurry
+zip
Jarang terbayar, penggunaanzipWith
:d a=sqrt.sum.zipWith(((^2).).(-))a
.(.)
selalu mengembalikan fungsi yang hanya membutuhkan satu argumen ... Saya pikir Anda dapat melakukan sesuatu seperti (.). (.), Tapi itu tidak terlalu sepadan.APL,
1411 byteIni adalah fungsi kereta diad yang membawa vektor di kiri dan kanan dan mengembalikan norma Euclidean dari perbedaan mereka.
Penjelasan:
Coba di sini
Disimpan 3 byte berkat Dennis!
sumber
.5*⍨(+/-×-)
menghemat beberapa byte.J, 9 byte
Ini adalah fungsi yang mengambil satu set koordinat dari yang lain (
-/>
), dan kemudian melakukan jumlah di+
bawah&.
kuadrat*:
.Input harus dalam format di
x y z;a b c
manax y z
set koordinat pertama Anda dana b c
yang lainnya.sumber
>
dan menentukan input yang harus diberikanx y z,:a b c
.Java,
130117114107105 byteIni adalah solusi yang jelas. Saya biasanya tidak bermain golf di Jawa, tetapi saya ingin tahu apakah Jawa bisa mengalahkan versi Brainfuck. Sepertinya saya tidak melakukan pekerjaan dengan baik .. Mungkin orang bisa menggunakan Map / Reduce baru dari Java 8 untuk menghemat beberapa byte.
Terima kasih kepada @ flawr (13 bytes), @KevinCruijssen (9 bytes) dan @DarrelHoffman (3 bytes)!
Golf:
Tidak Disatukan:
sumber
for
Loop dikompresi kedouble x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);
double[]a,b->{double x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);return Math.sqrt(x);}
dengan total 93 byte.public
di depan metode untuk menyimpan 7 byte, dan Anda juga dapat menempatkan dix+=s*s
luar for-loop sehingga Anda tidak perlu koma (yaitufor(int i=-1;++i<a.length;s=a[i]-b[i])x+=s*s;
) untuk -1 byte.for(int i=0;i<a.length;x+=s*s)s=a[i]-b[i++];
(dan saya juga mengubah-1
ke0
untuk byte tambahan)0
dengan menggunakan aturan prioritas operator! Terima kasih telah menyelamatkan saya banyak byte.Julia, 16 byte
Ini adalah fungsi yang menerima dua array dan mengembalikan norma Euclidean dari perbedaannya sebagai float.
Anda dapat memverifikasi semua kasus uji sekaligus online di sini .
sumber
golflua , 43 karakter
Bekerja dengan menyebutnya sebagai
Setara Lua akan
sumber
Serius, 12 byte
Cobalah online!
Penjelasan:
sumber
Ruby, 52
Dalam program uji
sumber
AppleScript,
241239 byteIni adalah kode golf, tapi saya sudah memasukkan komentar dalam formulir
--
.Ini menggunakan algoritma yang sama dengan sebagian besar program lain di sini.
sumber
Perl 6,
30292624 byte(Terima kasih @ b2gills untuk 2 byte lebih hilang)
pemakaian
sumber
{sqrt [+] ([Z-] $_)»²}
JavaScript
ES7, 45ES6, 37 byteMengharapkan array pasangan koordinat, satu dari setiap vektor, misalnya
[[1, 5], [2, 6], [3, 7], [4, 8]]
. Jika itu tidak dapat diterima, maka untuk 42 byte:Mengharapkan dua array dengan panjang yang sama dengan dua vektor N-dimensi, mis
[1, 2, 3, 4], [5, 6, 7, 8]
. Sunting: Disimpan 3 byte berkat @ l4m2. (Juga, apakah tidak ada yang memperhatikan kesalahan ketik saya?)sumber
a=>b=>Math.hypot(...a.map((t,i)=>t-b[i]))
Python 2, 47 byte
Solusi lurus ke depan. Fungsi mengharapkan 2 poin sebagai urutan angka, dan mengembalikan jarak di antara mereka.
Contoh:
sumber
𝔼𝕊𝕄𝕚𝕟, 6 karakter / 13 byte
Try it here (Firefox only).
Menghitung norma perbedaan array input.
sumber
Scala,
6762 byteMembutuhkan input sebagai
urutan / vektor darivar-arg tupleContoh:
sumber
C #, 72 byte
Solusi sederhana menggunakan Linq.
sumber
Sage, 35 byte
Fungsi ini mengambil 2 daftar sebagai input dan mengembalikan ekspresi simbolik. Jarak dihitung dengan melakukan pengurangan vektor pada daftar dan menghitung norma Euclidean dari vektor yang dihasilkan.
Cobalah online
sumber
TI-Basic (TI-84 Plus CE), 15 byte
TI-Basic adalah bahasa tokenized .
Meminta input sebagai dua daftar, dan mengembalikan jarak Euclidian di antara mereka
Ans
Penjelasan:
sumber
R, 4 byte
Ini adalah fungsi bawaan untuk menghitung matriks jarak dari setiap matriks masukan. Default untuk jarak euclidean.
Contoh penggunaan:
Jika Anda merasa kecewa karena ini built-in, maka ini versi non-built-in (atau setidaknya, ini kurang built-in ...) untuk 22 byte (dengan terima kasih kepada Giuseppe ):
Ini adalah fungsi anonim yang mengambil dua vektor sebagai input.
sumber
function(x,y)norm(x-y,"F")
lebih pendek dari versi kedua Anda.Haskell, 32 byte
sumber
map
dan tanda kurung).sqrt$sum$(^2)<$>zipWith(-)
bukan fungsi anonim yang valid. Aturan yang mendasarinya sebenarnya cukup sederhana: Jika Anda dapat menulisf = <mycode>
danf
setelah itu melakukan tugas yang diperlukan, maka<mycode>
adalah fungsi anonim yang valid. Dalam kasus Anda, Anda perlu menambahkanf p q = <mycode> p q
, jadi<mycode>
itu sendiri tidak valid.Python 3, 70 Karakter
Loop melalui, menemukan kuadrat dari perbedaan dan kemudian akar dari penjumlahan:
sumber
sum([(x-y)**2 for x,y in zip(a,b)])**.5
Mathcad, byte
Menggunakan operator besaran vektor (nilai absolut) bawaan untuk menghitung ukuran perbedaan antara dua titik (dinyatakan sebagai vektor).
Ukuran golf Mathcad ditahan sampai saya mendapatkan (atau orang lain) untuk membuka diskusi tentang meta. Namun, cara terpendek (dengan asumsi bahwa input vektor titik tidak berkontribusi pada skor) adalah 3 "byte", dengan 14 byte untuk versi fungsional.
sumber
Pyke, 7 byte
Coba di sini!
Transpose, terapkan kurangi, map square, sum, sqrt.
sumber
Ruby, 50 byte
Zip, lalu petakan / kurangi. Hampir tidak memunculkan jawaban Ruby lainnya dari @LevelRiverSt dengan 2 byte ...
Cobalah online
sumber