Array acak adalah array di mana setiap elemen adalah array dengan bilangan bulat positif yang tidak diketahui jumlahnya.
Misalnya, berikut ini adalah array yang tidak rata:
[[1,2,3],[4],[9,10]] Shape: 3,1,2
[[1],[2],[3]] Shape: 1,1,1
[[1,2,3,4,5,6,8]] Shape: 7
Berikut ini bukan array yang tidak rata :
[1] Each element will be an array
[] The array will contain at least 1 element
[[1,2,3],[]] Each subarray will contain at least 1 integer
Anda perlu memasukkan array yang tidak rata, dan mengembalikan array yang tidak rata dengan bilangan bulat yang dikocok
- Array output harus memiliki bentuk yang sama dengan array input. Kami mendefinisikan bentuk array sebagai panjang setiap subarray.
- Setiap bilangan bulat harus memiliki peluang yang sama untuk muncul di setiap lokasi yang memungkinkan.
- Anda dapat mengasumsikan bahwa bawaan bawaan bahasa Anda adalah acak.
Misalnya, jika saya meneruskan:, [[4],[1,2,3],[4]]
maka [[1],[4,4,2],[3]]
akan menjadi output yang valid, tetapi [[4,1,3],[3],[4]]
atau [[4],[4],[1,2,3]]
tidak.
code-golf
array-manipulation
random
Nathan Merrill
sumber
sumber
Jawaban:
Jelly, 3 byte dalam codepage Jelly
Penjelasan:
Karena program tidak lengkap (
ṁ
tidak memiliki argumen kedua yang dinyatakan), standarnya adalah menggunakan input program; dengan demikianṁ
menyebabkan output memiliki pola sublist yang sama dengan input.Cobalah online!
sumber
F
danṁ
bekerja untuk beberapa lapisan merata, bukan hanya satu.)ṁ
bisa apa saja, bukan hanya daftar datar. Misalnya: tio.run/nexus/jelly#@/9wZ@P///@jow11FIxidRSijXUUTEC0qY6CWWzs/…PowerShell v2 +, 86 byte
Bekerja melalui manipulasi string. Input dilewatkan sebagai string yang mewakili array, dalam format apa pun yang berfungsi untuk bahasa Anda . ;-)
-split
s input pada non-digit,sort
s mereka berdasarkan padarandom
blok skrip (yang akan menetapkan bobot acak yang berbeda untuk setiap input ke sortir), menyimpannya ke dalam$a
. Kami kemudiansplit
input lagi, kali ini pada digit, dan untuk masing-masing output nilai saat ini (biasanya tanda kurung dan koma) -gabungkan dengan angka yang sesuai dari$a
. Itu-join
disatukan kembali menjadi string, dan output tersirat.Contohnya
sumber
Python 2 , 89 byte
Cobalah online!
sumber
shuffle(r=sum(x,[]))
?JavaScript (ES6),
7875 byteIni adalah pertama kalinya saya bisa ingat menggunakan
.splice()
dalam tantangan kode-golf ...Anda bisa bermain golf dua byte dengan mengocok array sebelumnya:
Namun, ini tampaknya menempatkan integer terakhir sebagai prioritas utama, jadi saya akan berasumsi bahwa integer tidak terdistribusi secara merata.
sumber
sort
tidak berfungsi dengan benar ketika diberikan kunci perbandingan yang tidak konsisten. Sekalipun acak bahasa itu acak, jenisnya akan tidak berfungsi dalam situasi ini, dan itulah yang menciptakan bias yang Anda lihat. Karena itu, saya pikir solusi kedua tidak benar.Ruby, 47 byte
sumber
Brachylog , 17 byte
Cobalah online!
Penjelasan
Kami pada dasarnya membuat daftar sublists dengan elemen variabel yang memiliki "bentuk" yang sama dengan Input, dan kemudian menyatakan bahwa jika kami menggabungkan semuanya menjadi satu daftar, itu harus menghasilkan pengocokan gabungan dari input menjadi satu daftar. .
sumber
Perl, 37 byte
36 byte kode +
-p
bendera.Untuk menjalankannya:
Penjelasan:
sumber
05AB1E , 17 byte
Cobalah online!
Saya sedang menunggu solusi 05AB1E atau 2sable menggunakan beberapa built-in unflattening / moulding Saya belum tahu :).
sumber
APL, 35 byte
Aku bahkan tidak bisa mengalahkan Perl, pasti ada sesuatu yang aku lewatkan.
Misalnya:
Penjelasan:
⍳¨⍴¨⍵
: Untuk setiap sub-larik, dapatkan daftar indeks{⍵+⊃⌽⍺}\
: Dimulai dengan sub-array pertama, tambahkan nilai terakhir dalam array ke setiap nilai dalam array berikutnya.⊃¨
: dapatkan item pertama dari array, yang merupakan tempat awal(⍳⍴Z←∊⍵)∊
: simpan array yang rata diZ
. Hasilkan bit-vektor di mana yang menandai tempat di mana sub-array harus dimulai.?⍨⍴Z
: menghasilkan permutasi acak dariZ
.Z[
...]
: permutasiZ
.⊂⍨
: Membagi permutasi dalam sub-array sesuai dengan bit-vector.sumber
A⊣(∊A)←(∊A)[?⍨≢∊A←⎕]
Pyth, 15 byte
Program yang mengambil input daftar dan mencetak hasilnya.
Suite uji
Bagaimana itu bekerja
sumber
PHP , 105 byte
dikurangi menjadi 105 byte berkat
user59178
.Jawaban asli:
PHP , 132 byte
sumber
$m=array_merge(...$i=$_GET[i]);
25 byte lebih pendek dari$i=$_GET['i'];$m=call_user_func_array('array_merge',$i);
dan melakukan hal yang sama. Selain itu Anda dapat menjatuhkan{}
setelahforeach
untuk menyimpan 2 byte lagi.Pesta,
63, 58 byteEDIT:
catatan:
Bash tidak benar-benar mendukung array multidimensi (mereka hanya dapat disimulasikan, sampai batas tertentu), jadi sebagai gantinya, program ini akan menerima representasi teks "serial" dari array kasar, seperti yang digambarkan dalam deskripsi tugas, misalnya:,
[[1,2,3],[4],[9,10]]
dan memberikan output dalam format yang sama.Golf
Uji
Bonus yang bagus adalah Anda bisa memberinya array kasar dengan kedalaman yang sewenang-wenang:
dan masih akan beroperasi dengan benar.
Cobalah online!
sumber
Oktaf, 60 byte
sumber
MATLAB , 84 byte
sumber
Java, 368 byte
metode
static int[][] f( int[][] r ){...}
memecahkan tantangan. memutuskan untuk memutar antarmuka fungsional saya sendiri untuk menghindari impor dan menambahkan metode default untuk kemudahan penggunaansumber
Mathematica, 67 Bytes
Penjelasan: Ini mengocok daftar posisi semua bilangan bulat dalam array bergerigi 2D.
Union@@
kependekan dariFlatten@
Catatan: Kurung berlekuk
{}
digunakan sebagai pengganti kurung[]
.sumber