Tujuan Anda adalah untuk menghitung persimpangan set dua daftar bilangan bulat. Persimpangan didefinisikan sebagai kelompok bilangan bulat unik tanpa urutan yang ditemukan setidaknya satu kali dalam kedua daftar input.
Memasukkan
Input mungkin dalam format apa pun yang diinginkan (parameter fungsi, stdio, dll.), Dan terdiri dari dua daftar bilangan bulat. Anda banyak yang tidak berasumsi apa-apa tentang setiap daftar selain mereka mungkin mengandung jumlah bilangan bulat non-negatif (yaitu mereka tidak disortir, mungkin berisi duplikat, mungkin memiliki panjang yang berbeda, dan bahkan mungkin kosong). Diasumsikan bahwa setiap bilangan bulat akan sesuai dengan tipe bilangan bulat bertanda asli bahasa Anda, mungkin lebih dari 1 digit desimal, dan ditandatangani.
Input contoh:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Keluaran
Outputnya berupa daftar seperti bilangan bulat yang mewakili persimpangan set dari dua daftar ke format yang diinginkan (nilai pengembalian, stdio, dll.). Tidak ada persyaratan bahwa output diurutkan, meskipun Anda dipersilakan untuk memberikan implementasi yang kebetulan selalu diurutkan. Output harus membentuk himpunan tidak terurut yang valid (mis. Tidak boleh mengandung nilai duplikat apa pun).
Contoh kasus uji (perhatikan bahwa urutan output tidak penting):
Dua baris pertama adalah daftar input, baris ketiga adalah output. (empty)
menunjukkan daftar kosong.
(empty)
(empty)
(empty)
1000
(empty)
(empty)
3 1 2 4 3 1 1 1 1 3
3 1 -1 0 8 3 3 1
1 3
1 2 1
3 3 4
(empty)
Mencetak gol
Ini adalah kode golf; jawaban terpendek dalam byte menang.
Lubang loop standar dilarang. Anda dapat menggunakan fitur bawaan yang tidak dirancang untuk operasi seperti set.
Fitur bawaan yang terlarang:
- mengatur pembuatan / menghapus duplikat
- atur perbedaan / persimpangan / gabungan
- Pengujian keanggotaan umum (mis. Apa pun yang mirip dengan
in
kata kunci dengan Python,indexOf
-seperti fungsi, dll). Perhatikan bahwa penggunaan konstruksi "foreach item in list" diperbolehkan (dengan asumsi mereka tidak melanggar salah satu dari pembatasan lain), meskipun fakta bahwa Python menggunakan kembaliin
kata kunci untuk membuat konstruksi ini. - Built-in terlarang ini adalah "viral", yaitu jika ada built-in yang lebih besar yang mengandung salah satu dari sub-fitur ini, ia juga dilarang (misalnya, memfilter berdasarkan keanggotaan dalam daftar).
Setiap bawaan yang tidak ada dalam daftar di atas diizinkan (mis. Penyortiran, pengujian kesetaraan bilangan bulat, daftar ditambahkan / dihapus berdasarkan indeks, pemfilteran, dll.).
Misalnya, ambil dua contoh snippet berikut (kode mirip-Python):
# prohibited: filters by testing if each value in tmpList is a member of listA
result = tmpList.filter(listA)
# ok: filtering by a lambda which manually iterates over listA and checks for equality
def my_in_func(val, slist):
for a in slist:
if(val == a):
return True
return False
result = filter(lambda v: my_in_func(val, listA), tmpList)
Anda dipersilakan untuk mengimplementasikan sendiri fitur-fitur seperti set ini dan mereka akan dihitung untuk skor Anda.
Solusi Anda harus diselesaikan dalam jumlah waktu yang wajar (katakanlah, kurang dari satu menit pada perangkat keras apa pun yang Anda miliki untuk dua daftar ~ masing-masing panjangnya 1000).
sumber
Jawaban:
Haskell,
4542 byteCobalah online!
Sunting: -2 byte terima kasih kepada @ Ørjan Johansen, -1 byte terima kasih kepada @dfeuer.
sumber
MATL , 18 byte
Cobalah online!
Ini bekerja dalam dua langkah. Pertama persimpangan dihitung, mungkin dengan duplikat. Ini didasarkan pada membandingkan semua elemen dari satu array dengan semua elemen yang lain, dan menjaga elemen yang pertama yang ada di kedua.
Kemudian duplikat dihapus. Untuk ini, array dari langkah sebelumnya diurutkan, dan entri disimpan jika berbeda dari sebelumnya. Suatu
-inf
nilai didahului sehingga nilai pertama (yaitu terendah) tidak hilang.sumber
Jelly, 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
golflua , 68 karakter
yang disebut sebagai
Dalam Lua biasa, ini akan menjadi
Jadi pada dasarnya saya mengulangi setiap elemen dari dua tabel dan hanya menyimpan nilai yang setara. Dengan menggunakan nilai sebagai kunci (
k[w]=w
), saya menghilangkan semua duplikat. Kami kemudian menampilkan tabel baru dengan mengulangi indeks & nilaipairs
sumber
JavaScript (ES6), 66 byte
Tanpa menggunakan
indexOf
, karena saya tidak yakin itu diizinkan.sumber
Pyth,
1211 byteDemonstrasi
Penjelasan:
sumber
bash + GNU coreutils, 184 Bytes
Doa:
Keluaran:
Tidak ada output jika persimpangan kosong. Script ini tidak mengurutkan dan membuat kewarasan memeriksa apakah set pertama kosong. Penjelasan:
Bonus untuk diketahui: Anda dapat mengubah
grep -o .
untuk melakukan ini dengan string acak, bukan angka.sumber
Perl 6,
2637 bytepemakaian
Jawaban tidak bersaing yang kurang ajar
atau jika Anda seperti itu dalam membosankan ol'
f
fungsisumber
invert
jika Anda mengambil nilai sebagai gantinya. 24 byteRetina , 63 byte
Dua baris terakhir menghapus duplikat. Input adalah dua daftar yang dibatasi ruang yang dipisahkan oleh koma. Outputnya dibatasi spasi.
Cobalah online
Jika duplikat dalam output diizinkan, program saya akan menjadi 42 byte.
sumber
Jq 1,5 , 99 byte
Diperluas
Ini menghindari menggunakan
{}
objek dan karena jq tidak memiliki operasi bit ini mengemulasi mereka dengan array.Cobalah online!
sumber
Aksioma, 411 byte
ungolf dan tes
sumber
Aksioma, 257 byte
Ini tanpa menggunakan binsearch ... Tetapi saya tidak tahu O besar ... Tidak digabungkan dan hasilnya:
Tidak dieksekusi banyak tes sehingga bisa disadap ...
sumber
Jelly , 12 byte
Cobalah online!
sumber
[3]
alih-alih3
[]
dan elemen untuk daftar tunggal. Anda dapat pergi ke halaman wiki (atom) dan menambahkan Python Stringify builtin tetapi itu membuat jawaban saya lebih lama dan ketat I / O bodohSekam , 9 byte
Cobalah online!
Melihat dalam kode sumber Husk di GitHub,
k
("keyon") diimplementasikan sebagai komposisi pengurutan daftar dan pengelompokan nilai-nilai yang berdekatan, jadi walaupun saya tidak dapat menemukan implementasi "groupOn", mungkin aman untuk mengasumsikan bahwa ia tidak t melakukan apa pun setty, karena Haskell adalah bahasa fungsional dan pengelompokan nilai-nilai yang sama berdekatan adalah operasi mengurangi-over-a-linked-daftar yang cukup mudah. (Saya dapat menemukan implementasik
jenis tanda tangan lain "keyby", yang dapat saya gunakan di sini dengan mengubahI
ke=
, tapi saya tidak tahu Haskell jadi saya tidak bisa mengatakan bagaimana tepatnya kerjanya.)Juga, jawaban Brachylog kecil yang menyenangkan yang saya buat sebelum saya menyadari bahwa semua jenis operasi tidak diizinkan:
⟨∋∈⟩ᵘ
sumber
R,
14183 byteDitingkatkan oleh Giuseppe
Coba online
sinisinisumber
a
danb
ditentukan sebelumnya, Anda harus menerima input, baik dengan menganggapnya sebagai argumen fungsi atau dari STDIN.Python3, 51 byte
Jika daftar input dapat berisi duplikat:
Python3, 67 byte
sumber
PHP ,
78, 77 byteCobalah online!
Tanpa embel-embel, tetapi sesuai aturan (saya pikir).
Keluaran
sumber