Spesifikasi
- Anda memiliki ruang 3D kubik unit integer
x,y,z
ukuranS
, seperti0 <= x,y,z <= S
. - Anda dapatkan dari metode input default array poin
P
direpresentasikan sebagaix,y,z
koordinat integer, dalam format yang wajar yang Anda inginkan, misalnya:[x1,y1,z1],[x2,y2,z2],[x3,y3,z3] ... [xn,yn,zn]
. - Semua
P
nilai akan berada di ruang 3D kubik yang disebutkan di atas, seperti0 <= x,y,z <= S
. - Jumlah total yang mungkin
P
adalah .1 <= P <= S3
- Anda juga mendapatkan input
x,y,z
koordinat integer dari titik dasarB
dan ukuran kubus 3DS
.
Tugas
Tujuan Anda adalah untuk menghasilkan, dalam format pilihan Anda, titik-titik yang P
diurutkan berdasarkan jarak linear (Euclidean) dari titik dasar B
.
Aturan
- Jika Anda menemukan lebih dari satu titik
P
yang berjarak sama dariB
Anda, Anda harus menampilkan semua titik yang samaP
dalam urutan pilihan Anda. - Ada kemungkinan bahwa suatu titik
P
akan bertepatanB
, sehingga jarak mereka0
, Anda harus menampilkan titik itu. - Ini adalah tantangan kode-golf , sehingga kode terpendek menang.
- Celah standar dilarang.
- Penjelasan kode dihargai.
Uji kasus
Input:
S (size), [B (base point x,y,z)], [P1 (x,y,z)], [P2], [P3], [P4], [P5], [...], [Pn]
10, [5,5,5], [0,0,0], [10,10,10], [2,0,8], [10,3,1], [4,4,5], [5,5,5], [5,5,4]
Output:
[5,5,5], [5,5,4], [4,4,5], [2,0,8], [10,3,1], [0,0,0], [10,10,10]
- - -
Input:
5, [2, 3, 3], [3, 0, 4], [5, 0, 3], [0, 2, 4], [0, 3, 5], [4, 2, 1], [2, 2, 2], [3, 1, 2], [3, 1, 0], [1, 3, 2], [2, 3, 1], [3, 1, 5], [4, 0, 0], [4, 3, 1], [0, 5, 5], [1, 5, 1], [3, 1, 4], [2, 2, 2], [0, 2, 5], [3, 3, 5], [3, 3, 0], [5, 4, 5], [4, 1, 3], [5, 1, 1], [3, 5, 3], [1, 5, 3], [0, 5, 2], [4, 3, 3], [2, 1, 1], [3, 3, 0], [5, 0, 4], [1, 5, 2], [4, 2, 3], [4, 2, 1], [2, 5, 5], [3, 4, 0], [3, 0, 2], [2, 3, 2], [3, 5, 1], [5, 1, 0], [2, 4, 3], [1, 0, 5], [0, 2, 5], [3, 4, 4], [2, 4, 0], [0, 1, 5], [0, 5, 4], [1, 5, 1], [2, 1, 0], [1, 3, 4], [2, 2, 2], [4, 2, 4], [5, 5, 4], [4, 4, 0], [0, 4, 1], [2, 0, 3], [3, 1, 5], [4, 4, 0], [2, 5, 1], [1, 2, 4], [4, 3, 1], [0, 2, 4], [4, 5, 2], [2, 0, 1], [0, 0, 2], [4, 1, 0], [5, 4, 3], [2, 5, 2], [5, 4, 4], [4, 4, 3], [5, 5, 1], [4, 0, 2], [1, 3, 5], [4, 2, 0], [0, 3, 1], [2, 2, 0], [0, 4, 5], [3, 2, 0], [0, 2, 1], [1, 2, 2], [2, 5, 3], [5, 5, 2], [5, 2, 4], [4, 5, 5], [2, 1, 2], [5, 4, 3], [4, 5, 4], [2, 3, 1], [4, 4, 4], [3, 0, 0], [2, 4, 5], [4, 3, 3], [3, 5, 3], [4, 0, 0], [1, 1, 1], [3, 1, 3], [2, 5, 5], [0, 0, 5], [2, 0, 2], [1, 0, 3], [3, 1, 4], [1, 2, 5], [4, 1, 3], [1, 4, 5], [3, 1, 4], [3, 5, 1], [5, 1, 4], [1, 0, 4], [2, 2, 0], [5, 2, 1], [0, 5, 3], [2, 1, 1], [0, 3, 0], [4, 5, 5], [3, 4, 2], [5, 3, 3], [3, 1, 1], [4, 0, 1], [5, 0, 5], [5, 0, 4], [1, 4, 3], [5, 4, 2], [5, 4, 0], [5, 1, 0], [0, 0, 1], [5, 3, 0]
Output:
[2, 4, 3], [2, 3, 2], [1, 3, 4], [1, 3, 2], [2, 2, 2], [1, 4, 3], [2, 2, 2], [2, 2, 2], [1, 2, 2], [3, 4, 2], [1, 2, 4], [3, 4, 4], [2, 5, 3], [4, 3, 3], [2, 3, 1], [4, 3, 3], [2, 3, 1], [1, 3, 5], [4, 4, 3], [2, 5, 2], [3, 1, 3], [1, 5, 3], [4, 2, 3], [2, 1, 2], [3, 5, 3], [2, 4, 5], [3, 3, 5], [3, 5, 3], [3, 1, 4], [0, 2, 4], [0, 2, 4], [1, 2, 5], [3, 1, 2], [3, 1, 4], [3, 1, 4], [4, 2, 4], [1, 4, 5], [4, 4, 4], [1, 5, 2], [4, 3, 1], [0, 5, 3], [2, 1, 1], [4, 1, 3], [4, 3, 1], [2, 5, 5], [0, 3, 5], [4, 1, 3], [2, 5, 1], [2, 1, 1], [0, 3, 1], [2, 5, 5], [1, 1, 1], [0, 4, 5], [4, 5, 4], [4, 5, 2], [0, 2, 1], [1, 5, 1], [5, 3, 3], [0, 5, 2], [3, 5, 1], [3, 5, 1], [0, 2, 5], [1, 5, 1], [4, 2, 1], [3, 1, 5], [3, 1, 1], [0, 2, 5], [4, 2, 1], [0, 5, 4], [0, 4, 1], [2, 0, 3], [3, 1, 5], [2, 4, 0], [2, 2, 0], [2, 0, 2], [3, 3, 0], [3, 3, 0], [5, 4, 3], [1, 0, 3], [5, 4, 3], [2, 2, 0], [3, 0, 2], [5, 4, 4], [5, 4, 2], [1, 0, 4], [3, 0, 4], [5, 2, 4], [3, 2, 0], [3, 4, 0], [0, 1, 5], [0, 5, 5], [4, 5, 5], [4, 5, 5], [0, 3, 0], [2, 0, 1], [2, 1, 0], [4, 4, 0], [5, 1, 4], [5, 5, 4], [5, 2, 1], [3, 1, 0], [5, 4, 5], [4, 4, 0], [1, 0, 5], [4, 2, 0], [0, 0, 2], [4, 0, 2], [5, 5, 2], [4, 1, 0], [5, 5, 1], [0, 0, 1], [5, 1, 1], [4, 0, 1], [0, 0, 5], [5, 0, 3], [5, 3, 0], [5, 4, 0], [3, 0, 0], [5, 0, 4], [5, 0, 4], [5, 1, 0], [4, 0, 0], [4, 0, 0], [5, 0, 5], [5, 1, 0]
- - -
Input:
10, [1, 9, 4], [4, 6, 2], [7, 5, 3], [10, 5, 2], [9, 8, 9], [10, 5, 10], [1, 5, 4], [8, 1, 1], [8, 6, 9], [10, 4, 1], [3, 4, 10], [4, 7, 0], [7, 10, 9], [5, 7, 3], [6, 7, 9], [5, 1, 4], [4, 3, 8], [4, 4, 9], [6, 9, 3], [8, 2, 6], [3, 5, 1], [0, 9, 0], [8, 4, 3], [0, 1, 1], [6, 7, 6], [4, 6, 10], [3, 9, 10], [8, 3, 1], [10, 1, 1], [9, 10, 6], [2, 3, 9], [10, 5, 0], [3, 2, 1], [10, 2, 7], [8, 4, 9], [5, 2, 4], [0, 8, 9], [10, 1, 6], [0, 8, 10], [5, 10, 1], [7, 4, 5], [4, 5, 2], [0, 2, 0], [8, 3, 3], [6, 6, 6], [3, 0, 2], [0, 1, 1], [10, 10, 8], [6, 2, 8], [8, 8, 6], [5, 4, 7], [10, 7, 4], [0, 9, 2], [1, 6, 6], [8, 5, 9], [3, 7, 4], [5, 6, 6], [3, 1, 1], [10, 4, 5], [1, 5, 7], [8, 6, 6], [4, 3, 7], [2, 1, 0], [6, 4, 2], [0, 7, 8], [8, 3, 6], [9, 2, 0], [1, 3, 8], [4, 4, 6], [5, 8, 9], [9, 4, 4], [0, 7, 3], [8, 3, 4], [6, 7, 9], [8, 7, 0], [0, 7, 7], [8, 10, 10], [10, 2, 5], [6, 9, 5], [6, 2, 7], [0, 9, 6], [1, 4, 1], [4, 3, 1], [5, 7, 3], [9, 6, 8], [4, 1, 7], [4, 0, 8], [3, 4, 7], [2, 3, 6], [0, 0, 7], [5, 3, 6], [7, 3, 4], [6, 7, 8], [3, 7, 9], [1, 9, 10], [2, 1, 2], [2, 8, 2], [0, 3, 0], [1, 1, 9], [3, 5, 2], [10, 5, 3], [5, 2, 9], [6, 9, 0], [9, 5, 0], [7, 1, 10], [3, 3, 8], [2, 5, 1], [3, 10, 10], [6, 2, 2], [10, 7, 2], [4, 3, 1], [4, 2, 1], [4, 2, 8], [6, 8, 5], [3, 10, 0], [1, 1, 7], [6, 9, 6], [6, 2, 4], [5, 5, 7], [5, 4, 5], [9, 8, 1], [9, 8, 1], [0, 10, 6], [1, 1, 9], [3, 8, 8], [3, 1, 5], [5, 7, 4], [4, 3, 6], [5, 4, 7], [6, 0, 8], [7, 8, 1], [9, 8, 4], [2, 10, 0], [3, 4, 5], [9, 3, 10], [7, 4, 1], [2, 1, 9], [10, 8, 1], [10, 3, 7], [2, 0, 6], [3, 8, 4], [10, 0, 2], [9, 9, 10], [8, 9, 5], [4, 10, 2], [8, 3, 4], [4, 2, 10], [9, 1, 6], [6, 1, 3], [4, 1, 3], [2, 9, 0], [5, 6, 5], [8, 8, 3], [5, 5, 0], [7, 6, 9], [1, 1, 5], [3, 0, 4], [1, 10, 6], [8, 0, 2], [0, 7, 3], [8, 9, 8], [2, 1, 8], [3, 1, 10], [4, 5, 9], [7, 6, 10], [3, 6, 10], [5, 9, 8], [9, 3, 3], [2, 2, 3], [9, 9, 0], [7, 2, 2], [0, 0, 9], [8, 7, 4], [9, 2, 9], [0, 6, 4], [9, 4, 3], [10, 1, 3], [5, 9, 10], [5, 10, 6], [6, 3, 10],
Output:
[1, 10, 6], [3, 8, 4], [0, 9, 6], [0, 9, 2], [2, 8, 2], [0, 7, 3], [0, 7, 3], [0, 10, 6], [3, 7, 4], [0, 6, 4], [1, 6, 6], [0, 7, 7], [4, 10, 2], [1, 5, 4], [0, 9, 0], [2, 9, 0], [2, 10, 0], [5, 7, 4], [5, 7, 3], [5, 10, 6], [5, 7, 3], [0, 7, 8], [3, 10, 0], [3, 8, 8], [4, 6, 2], [3, 5, 2], [1, 5, 7], [5, 10, 1], [6, 9, 3], [6, 9, 5], [5, 6, 5], [2, 5, 1], [0, 8, 9], [6, 8, 5], [5, 6, 6], [6, 9, 6], [4, 5, 2], [4, 7, 0], [3, 5, 1], [3, 4, 5], [5, 9, 8], [6, 7, 6], [3, 7, 9], [1, 4, 1], [1, 9, 10], [4, 4, 6], [0, 8, 10], [6, 6, 6], [3, 4, 7], [3, 9, 10], [5, 5, 7], [3, 10, 10], [2, 3, 6], [6, 9, 0], [5, 8, 9], [5, 4, 5], [6, 7, 8], [7, 8, 1], [5, 5, 0], [4, 3, 6], [3, 6, 10], [8, 9, 5], [5, 4, 7], [4, 5, 9], [5, 4, 7], [2, 2, 3], [8, 8, 3], [1, 3, 8], [5, 9, 10], [0, 3, 0], [7, 5, 3], [8, 7, 4], [4, 3, 1], [8, 8, 6], [6, 4, 2], [4, 3, 7], [6, 7, 9], [4, 6, 10], [4, 3, 1], [6, 7, 9], [3, 3, 8], [5, 3, 6], [4, 4, 9], [4, 3, 8], [8, 6, 6], [3, 2, 1], [7, 4, 5], [7, 10, 9], [2, 3, 9], [5, 2, 4], [1, 1, 5], [3, 4, 10], [8, 9, 8], [9, 8, 4], [0, 2, 0], [4, 2, 1], [3, 1, 5], [2, 1, 2], [8, 7, 0], [9, 10, 6], [7, 4, 1], [7, 6, 9], [7, 3, 4], [1, 1, 7], [0, 1, 1], [4, 2, 8], [9, 8, 1], [0, 1, 1], [4, 1, 3], [6, 2, 4], [9, 8, 1], [8, 4, 3], [3, 1, 1], [6, 2, 2], [5, 1, 4], [9, 9, 0], [7, 6, 10], [2, 1, 0], [2, 1, 8], [4, 1, 7], [8, 6, 9], [6, 2, 7], [8, 3, 4], [8, 3, 4], [10, 7, 4], [3, 0, 4], [8, 3, 3], [8, 10, 10], [2, 0, 6], [9, 6, 8], [10, 7, 2], [1, 1, 9], [8, 3, 6], [1, 1, 9], [7, 2, 2], [3, 0, 2], [9, 4, 4], [8, 5, 9], [2, 1, 9], [6, 1, 3], [6, 2, 8], [5, 2, 9], [9, 4, 3], [9, 8, 9], [0, 0, 7], [10, 8, 1], [4, 2, 10], [8, 3, 1], [9, 5, 0], [6, 3, 10], [10, 10, 8], [10, 5, 3], [8, 4, 9], [9, 9, 10], [10, 5, 2], [9, 3, 3], [8, 2, 6], [3, 1, 10], [4, 0, 8], [0, 0, 9], [10, 4, 5], [10, 5, 0], [10, 4, 1], [8, 1, 1], [6, 0, 8], [10, 3, 7], [9, 2, 0], [10, 2, 5], [9, 1, 6], [10, 5, 10], [8, 0, 2], [9, 3, 10], [7, 1, 10], [9, 2, 9], [10, 2, 7], [10, 1, 3], [10, 1, 6], [10, 1, 1], [10, 0, 2]
- - -
Input:
10000, [8452, 3160, 6109], [7172, 5052, 4795], [9789, 4033, 2952], [8242, 213, 3835], [177, 7083, 908], [3788, 3129, 3018], [9060, 464, 2701], [6537, 8698, 291], [9048, 3860, 6099], [4600, 2696, 4854], [2319, 3278, 9825]
Output:
[9048, 3860, 6099], [7172, 5052, 4795], [9789, 4033, 2952], [8242, 213, 3835], [4600, 2696, 4854], [9060, 464, 2701], [3788, 3129, 3018], [2319, 3278, 9825], [6537, 8698, 291], [177, 7083, 908]
S
sebagai parameter?Jawaban:
05AB1E , 4 byte
Cobalah online!
Penjelasan
sumber
n
?JavaScript (ES6), 71 byte
sumber
g
di dalamsort
.Haskell ,
5452 byteCobalah online!
Saya tidak perlu ukuran ruang.
sum.map(^2).zipWith(-)o
menghitung jarak dari titik keo
:(xo-xp)^2+(yo-yp)^2+(zo-zp)^2
. Poin hanya diurutkan pada jarak keo
.EDIT : "jika Anda tidak membutuhkannya, jangan bawa" disimpan 2 byte.
sumber
Python 3 ,
6864 byte-4 byte terima kasih kepada @Ramillies
Cobalah online!
sumber
R ,
5640 byte-16 byte berkat flodel untuk menyarankan format input yang berbeda
Cobalah online!
Dibawa
P
sebagai3xn
matriks titik, yaitu, setiap kolom adalah titik; output dalam format yang sama.Gunakan fungsi helper
g
untuk mengubah daftar poinP
dari kasus uji menjadi format R yang sesuai.sumber
sapply()
dengancolSums((t(P)-B)^2)
, di mana inputP
akan menjadi matriks?P
sebagai3xn
matriks dan lakukancolSums((P-B)^2)
saja!Mathematica, 24 byte
Mengambil input dalam format
f[B][P]
.Kita harus menggunakan 4 byte
x
untuk membuat fungsi bersarang. Diutamakan dari
(\[Function]
) dan//
bekerja dengan baik sehingga ekspresi setara dengan ini:Kita perlu
N
karena secara default, Mathematica mengurutkan berdasarkan struktur ekspresi alih-alih berdasarkan nilai:sumber
C # (.NET Core) ,
685753 +2318 byte-11 byte terima kasih kepada Emigna
Jumlah byte juga termasuk
Cobalah online!
Poin diperlakukan sebagai koleksi int. Penjelasan:
sumber
JavaScript (ES6),
7271 byteYang ini tidak lebih pendek dari jawaban Neil , tapi saya pikir saya tetap akan mempostingnya untuk menunjukkan penggunaan
Math.hypot()
, yang diperkenalkan dalam ES6.Mengambil input dalam sintaks currying
(p)(a)
, di mana p = [x, y, z] adalah titik dasar dan a adalah array dari titik lainnya.Tampilkan cuplikan kode
sumber
k , 14 byte
Cobalah online!
Juga, ini berfungsi untuk n dimensi, dan tidak terbatas pada 3.
sumber
Japt ,
109 byte-1 byte terima kasih kepada @Shaggy
Mengambil poin sebagai array array tiga item dan titik dasar array tunggal, dalam urutan itu. Tidak mengambil argumen ukuran.
Cobalah online! atau jalankan test case besar dengan
-R
output satux,y,z
per baris.Penjelasan
sumber
í
bisa mengambil argumen itu secara terbalik, itu cukup bagus. Saya juga berpikir itu harus berhasil; Saya akan menjalankan beberapa test case lainnya dan mengedit ketika saya kembali ke komputer.-
ataun
akan juga berfungsi sebagai penggantia
.MATL , 7 byte
Inputnya adalah: matriks 3 kolom dengan titik sebagai baris, dan vektor 3 kolom dengan titik dasar.
Cobalah di MATL Online!
Penjelasan
sumber
Jelly , 5 byte
Disimpan 1 byte, terima kasih untuk Leaky Nun .
Cobalah online!
Penjelasan
sumber
ạS¥Þ
(tidak memperhatikan jawaban Anda sebelum memposting milik saya).ạ²SµÞ
Perl 6 , 35 byte (33 karakter)
Cobalah online!
Penjelasan: Ini mengambil daftar dengan koordinat titik dasar (disebut
@b
), lalu daftar daftar dengan koordinat titik lainnya (disebut@p
). Dalam sebuah blok, Anda dapat menggunakannya dengan cepat menggunakan^
simbol. Masing-masing^
variabel sesuai dengan satu argumen. (Mereka diurutkan berdasarkan abjad, begitu@^b
juga argumen 1 dan@^p
2.) Setelah satu penggunaan simbol ini, Anda dapat menggunakan variabel secara normal.Pernyataan
@^b
itu ada hanya untuk mengatakan bahwa blok akan mengambil argumen titik dasar, yang hanya digunakan di dalam blok penyortiran. (Kalau tidak, itu akan merujuk pada argumen dari blok penyortiran.) Metode ini.sort
dapat mengambil satu argumen. Jika itu adalah blok yang mengambil 1 argumen (seperti di sini), array diurutkan sesuai dengan nilai-nilai fungsi itu. Blok itu sendiri hanya mengambil setiap titik pada gilirannya dan ritsleting dengan minus (Z-
) dengan koordinat titik dasar. Lalu, kami menguadratkan semua elemen dalam daftar»²
dan menjumlahkannya menggunakan[+]
.Sebagai bonus tambahan, ini akan bekerja dengan koordinat float juga, dan dalam dimensi apa pun (selama Anda, jelas, menyediakan jumlah koordinat yang sama untuk semua poin, itu melakukan hal yang benar).
Ini tidak berlaku lagi. Saya meninggalkannya di sini hanya untuk bersenang-senang.
Perl 6 , 24 byte - hanya lelucon!
Cobalah online!
Karena OP tidak menyatakan metrik mana yang akan digunakan, kiriman ini memilih untuk menggunakan metrik diskrit. Dalam metrik ini, jarak antara dua titik adalah 0 jika keduanya identik, dan 1 jika tidak. Sangat mudah untuk memeriksa bahwa ini memang metrik (jika ρ (A, B) adalah jarak dari A ke B, kami mensyaratkan bahwa 1) ρ (A, B) = 0 iff A = B, 2) ρ (A, B ) = ρ (B, A), 3) ρ (A, B) + ρ (B, C) ≥ ρ (A, C) ("ketimpangan segitiga")).
Mungkin bisa bermain golf lebih banyak, tapi saya tidak bermaksud serius.
sumber
<5 5 5>,(<5 5 10>,<6 5 5>)
. Daftar tidak mengurutkan berdasarkan jumlah mereka, tetapi dengan perbandingan elemen-bijaksana. Anda butuhsum
tempat.Kotlin 1.1, 58 byte
Yg diperindahkan
Uji
sumber
Java 8,
194 + 31214169163123112106 + 19109103 bytesCobalah online!
sumber
base=[2,3,3], points=[4,3,3],[1,3,4]
. Hasil Anda[4,3,3], [1,3,4]
, sedangkan hasil yang benar adalah[1,3,4],[4,3,3]
.b->l->{l.sort(java.util.Comparator.comparing(p->{int d=0,i=3;for(;i-->0;)d+=(b[i]-p[i])*(b[i]-p[i]);return d;}));}
(114 bytes), dengan asumsiList<int[]>
sebagai parameter alih-alihint[][]
.pow
apakah bekerja+=
tanpa pemain, tidak dalam kebanyakan kasus lain. Bagus untuk mengetahui!B->P->P.sort(java.util.Comparator.comparing(p->{int d=0,i=0;while(i<3)d+=(d=p[i]-B[i++])*d;return d;}))
Pyth, 6 byte
Cobalah online: Peragaan
Penjelasan:
sumber
Bad Request: Request Line is too large (7005 > 4094)
. Anda harus membuat test suite Anda lebih kecil agar sesuai dengan ukuran tautan maksimum.Perl 5 , 90 byte
Cobalah online!
Input adalah daftar poin yang dipisahkan baris baru, dengan yang pertama menjadi titik dasar dan yang terakhir memiliki baris baru. Kurung (
[]
) di sekitar koordinat bersifat opsional.sumber