Kami mendefinisikan peta sebagai satu set pasangan nilai kunci. Untuk tantangan ini, Anda perlu mengambil masing-masing nilai dan menetapkannya ke kunci yang dipilih secara acak.
- Anda harus mengacak nilai secara acak, dan mengeluarkan peta yang dihasilkan. Ini berarti bahwa setiap kali kami menjalankan program Anda, kami memiliki peluang untuk mendapatkan hasil yang berbeda
- Setiap permutasi yang mungkin dari nilai harus memiliki peluang yang tidak nol untuk muncul.
- Semua kunci asli dan nilai asli harus muncul di array yang dihasilkan. Nilai yang berulang harus muncul beberapa kali dalam array yang dihasilkan.
Misalnya, jika peta Anda adalah:
[0:10, 1:10, 5:5]
semua yang berikut ini harus memiliki peluang tampil:
[0:10, 1:10, 5:5] (original map)
[0:10, 1:5, 5:10]
[0:10, 1:10, 5:5] (technically the same map, but I swapped the two tens)
[0:10, 1:5, 5:10]
[0:5, 1:10, 5:10]
[0:5, 1:10, 5:10]
Input / output yang dapat diterima:
- Peta asli bahasa Anda
- Anda dapat memasukkan berbagai pasangan nilai kunci. Anda tidak boleh memasukkan 2 array, satu dengan kunci, lainnya dengan nilai.
- Anda dapat menggunakan representasi string apa pun di atas
- Jika Anda memasukkan array atau peta, Anda dapat memodifikasi objek asli alih-alih kembali
- Jenis input harus sesuai dengan tipe output
- Jika Anda memasukkan array, urutan tombol harus dipertahankan.
- Anda dapat mengasumsikan bahwa kunci itu unik, tetapi Anda tidak dapat mengasumsikan bahwa nilainya unik.
Ini adalah kode-golf , jadi jawablah sesingkat mungkin
code-golf
array-manipulation
random
permutations
Nathan Merrill
sumber
sumber
[k, v]
atau[v, k]
dapat diterima?[k, v]
Jawaban:
05AB1E , 5 byte
Input adalah daftar pasangan nilai kunci.
Cobalah online!
sumber
Brachylog ,
1312 byteCobalah online!
Mengharapkan daftar daftar 2-elemen sebagai input.
Penjelasan
sumber
CJam, 9 byte
Input adalah daftar pasangan nilai kunci.
Uji di sini.
Penjelasan
Solusi alternatif, jumlah byte yang sama:
sumber
Jelly , 5 byte
Cobalah online!
Penjelasan
sumber
TEXt"
Python 2, 77 byte
Menggunakan opsi ini: Jika Anda memasukkan larik atau peta, Anda dapat memodifikasi objek asli alih-alih kembali . Input adalah seperti kamus literal
{0: 10, 1: 10, 5: 5}
.Cobalah online
Inspirasi diambil dari jawaban SO ini .
sumber
Python 3, 107 byte
Menggunakan struktur kamus asli Python.
Terima kasih kepada @ mbomb007 untuk menghemat satu byte.
Ide itu!
sumber
from random import*
..keys()
. Iterasi kamus yang diputar di atas tombol. Gunakanreturn dict(zip(d, i))
sebagai ganti for loop.Perl, 35 byte
Termasuk +2 untuk
-0p
Berikan setiap kunci / nilai yang dipisahkan oleh spasi pada garis STDIN
shuffle.pl
:sumber
Mathematica, 32 byte
Input adalah daftar pasangan nilai kunci.
adalah operator transposisi Mathematica, danRandomSample
dapat digunakan untuk mengacak daftar.sumber
php, 84 byte
Mengambil input sebagai array serial, menghasilkan output yang sama.
sumber
Clojure,
4034 byteMengambil kunci dan nilai dari m (peta), mengocok nilai-nilai dan ritsleting ke dalam peta.
sumber
PowerShell v2 +, 52 byte
Mengambil input sebagai array tupel, yang secara signifikan lebih pendek daripada menggunakan hash (yang akan membutuhkan
.GetEnumerator()
dan yang lainnya untuk bekerja).Kami loop array input
|%{...}
, setiap iterasi menarik keluar elemen kedua$_[1]
. Mereka disalurkan keSort-Object
dengan{Get-Random}
sebagai kunci penyortiran. Ini akan menetapkan bobot acak dari0
hingga[Int32]::MaxValue
ke setiap elemen untuk disortir. Mereka disalurkan ke loop lain|%{...}
, dengan setiap iterasi mengeluarkan tupel dari elemen pertama yang sesuai dari tuple dan nomor yang diurutkan.Contohnya
Contoh-contoh di sini memiliki tambahan
-join','
pada output tuple sehingga ditampilkan lebih baik di konsol, karena output default untuk array multi-dimensi sulit dibaca.Ini berfungsi untuk nilai-nilai non-integer juga tanpa modifikasi.
sumber
JavaScript (ES6), 89 byte
sumber
Perl 6 , 28 byte
Input adalah Hash
(Secara teknis nilai apa pun dengan
.keys
metode dan.values
metode akan berfungsi, tetapi outputnya adalah Hash )Penjelasan:
Varian yang dapat digunakan untuk jenis objek bawaan Hash like lainnya adalah:
.WHAT
pada objek mengembalikan tipe.sumber
R, 47 (28) byte
Sedikit terlambat ke pesta tapi meskipun saya akan memposting solusi dalam R menggunakan builtins.
Hal terdekat yang dimiliki R ke array dengan pemetaan kunci / nilai adalah a
list
. Fungsi berikut mengambillist
objek sebagai input dan menampilkan daftar dengan nilainya yang dikocok.Dijelaskan
Builtin
setNames()
dapat menetapkan nama ke objek dengan memasukkanR-vector
nama. Oleh karena itu, pertama-tama kocoklist
dengansample()
yang mengocok pasangan, dan kemudian menetapkan nama-nama dalam urutan asli menggunakannames()
.Contoh:
Jika
x
diasumsikan didefinisikan tidak perlu untuk pembungkus fungsi dan program dikurangi menjadi 28 byte.sumber
Java 7, 156 byte
Tidak Disatukan:
Kode uji:
Coba di sini.
Output yang mungkin:
sumber