Produk Skalar Minimum
Inspirasi untuk masalah golf kode ini berasal dari kompetisi kode jam Google . Premis di balik masalah ini adalah, mengingat input dari dua vektor dengan panjang yang bervariasi, temukan skalar minimum yang mungkin. Skalar dapat ditemukan menggunakan rumus berikut:
x1 * y1 + x2 * y2 + ... + xn * yn
Masalahnya, bagaimanapun, adalah bahwa beberapa nilai untuk skalar dapat ditemukan tergantung pada urutan angka dalam kasus input (lihat di bawah). Tujuan Anda adalah untuk menentukan solusi integer skalar minimum yang mungkin dengan memasukkan angka kasus input ke dalam persamaan dan menyelesaikannya. Anda dapat menggunakan setiap angka dalam input hanya sekali, dan harus menggunakan semua nomor.
Izinkan saya untuk memberikan contoh dengan vektor-vektor berikut.
Memasukkan
3
1 3 -5
-2 4 1
Keluaran
-25
Bilangan bulat pertama pada garis mewakili jumlah angka, n, dalam setiap vektor. Dalam hal ini, kami memiliki tiga angka di setiap vektor.
Angka n dapat bervariasi dengan setiap test case, tetapi akan selalu ada dua vektor.
Pada input contoh, produk skalar minimum adalah -25.
(-5 * 4) + (1 * 1) + (3 * -2) = 25
Aturan
- Anda hanya dapat menggunakan setiap bilangan bulat di kedua vektor satu kali.
- Anda harus menggunakan semua bilangan bulat di vektor.
- Output Anda hanya harus mencakup produk akhir
- Saya akan memilih solusinya dengan jumlah kode paling sedikit, yang mengikuti semua spesifikasi yang tercantum di atas, dalam bahasa apa pun!
Petunjuk: Anda tidak perlu memaksa masalah ini, kecuali jika itu membuat kode Anda lebih pendek. Ada metode khusus yang terlibat dalam menemukan skalar spanning minimum :).
sumber
Jawaban:
Jelly, 6 byte
Cobalah online!
Menggunakan brute force sama pendeknya:
Bagaimana itu bekerja
sumber
Serius , 6 byte
Cobalah online!
Penjelasan:
sumber
APL, 15 byte
Ini adalah fungsi diad yang menerima array di kiri dan kanan dan mengembalikan integer. Ia menggunakan pendekatan yang sama dengan jawaban Julia saya : produk titik dari array yang diurutkan, satu turun dan satu naik.
Coba di sini
sumber
MATL , 6 byte
Kode:
Jawaban MATL pertama saya :)
Penjelasan:
Cobalah online!
sumber
Mathematica,
3017 byte-13 byte oleh murphy
Fungsi, input adalah vector1 (daftar), vector2 (daftar) Beberapa revisi:
sumber
Sort@#.Reverse@Sort@#2&
Sort@#.Sort[#2,#>#2&]&
Sort@#.-Sort@-#2&
Sort@#.SortBy[#2,-#&]
Pyth -
148 byteSaya pikir saya sudah tahu caranya.
Cobalah online di sini .
sumber
Julia,
3225 byteIni adalah fungsi anonim yang menerima dua array dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel dan lakukan
f(x)(y)
.Untuk input x dan y , kita cukup menghitung produk titik dari x diurutkan dalam urutan terbalik dengan y diurutkan. Kami mendapatkan x dalam urutan terbalik dengan meniadakan semua nilai, mengurutkan, lalu meniadakan lagi.
Disimpan 7 byte berkat Dennis!
sumber
Javascript ES6, 69 byte
Wow, ini terlalu lama.
sumber
|i
bukannya&&i
Perl 6,
3330 bytesumber
{sum @^a.sort Z*[R,] @^b.sort}((1,3,-5),(-2,4,1)).say
CJam, 11 Bytes
Cobalah online!
sumber
Python, 139 byte
sumber
b = sorted(b)
berubah menjadib=sorted(b)
(2 byte disimpan). Anda juga dapat menambahkan beberapa pernyataan pada baris yang sama dengan memisahkannya dengan tanda titik koma, misalnyaa=list(reversed(sorted(a)));b=sorted(b);res=0
lambda a,b,s=sorted:sum(x*y for x,y in zip(s(a)[::-1],s(b)))
. Kami tidak memerlukan pengajuan fungsi untuk dinamai (jadi lambda yang tidak disebutkan namanya valid), dann
parameternya tidak perlu (banyak pengajuan lainnya mengabaikan sepenuhnya).C ++, 124 byte
ungolfed:
Pada awalnya saya digunakan
std::greater<int>()
untuk menyortirb
tetapi hanya membalik urutan dalam penjumlahan lebih mudah.sumber
Haskell, 59 byte
sumber
KEMBALI , 29 byte
Try it here.
Ganti apa saja
␆␃␄␇
dengan rekan-rekan mereka yang tidak diinginkan.Lambda anonim yang meninggalkan hasil di stack2. Pemakaian:
Penjelasan
sumber
J, 14 byte
Menggunakan prinsip yang sama dengan yang lain.
Penjelasan
sumber