Pertimbangkan dua array yang diurutkan dari integer dan Y dengan ukuran m dan n masing-masing dengan m < n . Misalnya X = ( 1 , 4 ) , Y = ( 2 , 10 , 11 ) .
Kami mengatakan bahwa pencocokan adalah cara memasangkan setiap elemen dengan elemen Y sedemikian rupa sehingga tidak ada dua elemen X yang dipasangkan dengan elemen Y yang sama . Biaya pencocokan hanyalah jumlah dari nilai absolut dari perbedaan pasangan.
Sebagai contoh, dengan , Y = ( 2 , 10 , 11 ) kita dapat membuat pasangan ( 7 , 2 ) , ( 11 , 10 ) yang kemudian memiliki biaya 5 + 1 = 6 . Jika kita membuat pasangan ( 7 , 10 ) , ( 11 , 11 ) biayanya adalah 3 + 0 . Jika kita membuat pasangan ( 7 , 11 ) , ( 11 , 10 ) biayanya adalah 4 + 1 = 5 .
Sebagai contoh lain, ambil , Y = ( 2 , 10 , 11 , 18 ) . Kita dapat membuat pasangan ( 7 , 2 ) , ( 11 , 10 ) , ( 14 , 11 ) dengan biaya 9 . Pasangan ( 7 , 10 ) , ( 11 , 11 ) , biaya 7 .
Tugasnya adalah menulis kode yang, mengingat dua array diurutkan dari integer dan Y , menghitung pencocokan biaya minimum.
Uji kasus
[1, 4], [2, 10, 11] => [[1, 2], [4, 10]]
[7, 11], [2, 10, 11] => [[7, 10], [11, 11]]
[7, 11, 14], [2, 10, 11, 18] => [[7, 10], [11, 11], [14, 18]]
Jawaban:
Brachylog , 16 byte
Cobalah online!
Penjelasan
Karena kami menyatukan
I
ke integer di awal, kami mencoba berbagai hal mulai dari nilai kecilI
hingga nilai besarI
, yang berarti pertama kali berhasil akan tentu untuk pasangan dengan perbedaan absolut terkecil.sumber
Jelly ,
15 14 1211 byteCobalah online!
sumber
L}
bekerja di tempat⁹L¤
?ÐṂḢ
->ÞḢ
untuk menyimpan byte.Haskell,
787776 byteTIO tidak punya
Data.Lists
, jadi tidak ada tautan.Pada dasarnya algoritma yang sama seperti yang terlihat pada jawaban @ dylnan .
Sunting: -1 byte berkat @BMO.
sumber
JavaScript (ES7), 121 byte
Mengambil 2 array dalam sintaks currying
(x)(y)
.Cobalah online!
sumber
J , 24 byte
Cobalah online!
Penjelasan / Demonstrasi:
Kata kerja diad,
x f y
-/
menemukan perbedaan(0{]#~1>])"1
untuk setiap baris hanya simpan nilai-nilai non-positif dan ambil yang pertama:[:,@:
ratakan daftar (untuk mencocokkan bentuk argumen kiri)[-
kurangi min. perbedaan dari argumen kiri[,.
jahit mereka ke argumen kiri:sumber
Pyth , 18 byte
Coba di sini!
sumber
Oktaf , 66 byte
Fungsi anonim yang mengambil vektor baris
X
,Y
sebagai input dan output matriks 2-baris di mana setiap kolom adalah pasangan yang cocok.Cobalah online!
sumber
Pyth , 16 byte
Cobalah online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
MATL , 16 byte
Inputnya
X
, laluY
.Pencocokan adalah output dengan nilai pertama dari setiap pasangan (yaitu,
X
) di baris pertama, dan nilai kedua dari setiap pasangan di baris kedua.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Jelly , (10?) 12 byte
10 byte jika hanya elemen Y yang diperlukan (lihat komentar) - tidak yakin apakah itu diizinkan oleh spec (dan mungkin seharusnya tidak karena jawaban lain sudah mengimplementasikan detail ini).
Ini dapat dicapai dengan menghapus trailing
⁸ż
.Sebuah link diadik yang menerima X di sebelah kiri dan Y di kanan.
(
œc⁹L¤ạS¥ÞḢż@
dan 10 byteœc⁹L¤ạS¥ÞḢ
melakukan hal yang sama dengan Y di sebelah kiri dan X di sebelah kanan).Cobalah online!
Bagaimana?
sumber
JavaScript (ES7), 100 byte
Baru disini; tips / koreksi apa pun akan dihargai! Upaya sebelumnya mengabaikan komplikasi dengan menyortir array yang mengandung
NaN
nilai, jadi semoga saya tidak melewatkan apa pun saat ini.Mengharapkan dua argumen masing-masing sebagai X , Y. Cobalah online!
Tampaknya mirip dengan solusi @ Arnauld
Penjelasan
Bergantung pada fakta bahwa diberikan X , Y disortir, terdapat solusi kecocokan biaya minimum di mana jika semua pasangan diatur untuk mempertahankan urutan elemen X , semua elemen Y dalam pengaturan juga mempertahankan pesanan mereka.
sumber