pengantar
Pertimbangkan dua array dengan panjang yang sama, katakan A = [0,1,0,2]
dan B = [-1,1,2,2]
. Misalkan kita tahu bahwa isinya setara dalam beberapa hal, item demi item:
0
setara dengan-1
,1
setara dengan1
,0
setara dengan2
, dan2
setara dengan2
.
Kesetaraan adalah transitif: -1
dan 0
setara, dan 0
dan 2
setara, demikian -1
dan 2
juga setara. The penyatuan dari A
dan B
adalah array di mana setiap item dari A
(atau B
) telah diganti dengan jumlah terbesar yang setara dengan itu. Dalam hal ini, penyatuan akan terjadi [2,1,2,2]
.
Tugas
Tulis program atau fungsi yang membutuhkan dua array integer non-kosong dengan panjang yang sama, dan output unifikasi mereka. Anda juga dapat memodifikasi salah satu input yang ada alih-alih mengembalikan. Hitungan byte terendah menang.
Uji kasus
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
Jawaban:
JavaScript (ES6),
1009011010296 byteSolusi awal saya adalah 90 byte:
Meskipun melewati semua kasus uji yang disediakan, gagal untuk sesuatu seperti:
Uji kasus
Tampilkan cuplikan kode
sumber
a.map
...a.map
bisa digantib.map
juga.CJam , 27 byte
Cobalah online! Suite uji.
Penjelasan
sumber
Python 2, 91 byte
sumber
Python, 86 byte
Secara bersamaan memperbarui kedua daftar dengan mengganti setiap nilai di daftar pertama dengan elemen yang sesuai di daftar kedua jika lebih besar. Penggantian dilakukan dengan metode
map
kamusget
. Kemudian, swap daftar, dan ulangi sampai mereka sama.sumber
Pyth, 13 byte
Cobalah online: Demonstrasi
Penjelasan:
Mulailah dengan masing-masing pasangan. Memperpanjang setiap pasangan (daftar) secara bergantian dengan daftar yang tumpang tindih, menduplikasi elemen dan mengurutkan. Hentikan begitu proses ini bertemu. Cetak maksimum setiap daftar.
sumber
Php,
266241213200 byteLarutan:
Penggunaan:
u([1,2,3], [0,0,1]);
mengembalikan array yang diinginkan.Tidak bermain golf:
sumber
Dyalog APL ,
2928 byte⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Ide yang sama dengan solusi Pyth .
sumber
Mathematica, 56 byte
sumber
Java,
273263 byteMetode ini
f(int[]a,int[]b)
memecahkan tantangan.Pertama melalui kedua array dan melacak angka-angka yang setara. Kemudian, modifikasi setiap elemen dalam array pertama untuk menyimpan angka-angka yang setara.
sumber
Python, 522 byte
Penjelasan
Buat tabel nilai yang sesuai dengan setiap elemen unik di dalam kedua array (
a
danb
dalam hal ini). Misalnya jikamaka tabelnya adalah:
kemudian menerapkan pencarian kedalaman pertama, jadi, misalnya, anggap saya memilih elemen paling kiri dalam
a
nilai kemudian0
dan0
memiliki kesetaraan:0
dan2
. Karena0
sudah dikunjungi, buka2
. 2 memiliki ekuivalensi:0
. Jadi hasil terbaik untuk memilih elemen paling kiria
adalah2
. Ini pohonnya:dan Anda ingin mengambil nilai terbesar di sana, jadi hasilnya
2
.sumber
PHP, 132 byte
Fungsi anonim yang mengambil dua array.
Ini adalah pendapat saya tentang 'modifikasi salah satu array di tempat', sebagaimana ditentukan dalam output dari tantangan. Ini loop melalui masing-masing dari dua array, mencatat kesetaraan jika yang sekarang lebih besar dari yang disimpan, kemudian loop melalui array pertama dan mengganti semua nilai dengan setara terbesar mereka. Array pertama diambil dengan referensi (maka itu
&$a
), sehingga array yang lewat diubah 'di tempat'.sumber
Java, 170 byte
Golf
Tidak disatukan
Fungsi anonim yang mengambil dua
int[]
s sebagai argumen dan mengembalikan sebuahint[]
.sumber