Saya menjawab satu tantangan di sini dan tugas ini adalah bagian dari tantangan. Saya punya solusi 73 byte dalam javascript. Tapi saya pikir itu terlalu banyak untuk hal yang sederhana.
Tantangan
Diberikan sebagai input dua bilangan bulat:
N
panjang array yang diharapkanR
rentang interval dimulai dari satu:,1..R
tidak0..R-1
Output dalam setiap menjalankan program / fungsi Anda satu array panjang yang berbeda N
dengan nilai-nilai 1..R
di antara sedemikian rupa sehingga tidak ada nilai yang muncul lebih dari sekali.
Anda harus menggunakan R-value
kode Anda.
Batasan
Anda dapat mengasumsikan: 2 <= N <= R
.
Saya benar-benar ingin melihat solusi javascript lebih pendek dari milik saya 73 byte.
Tapi tentu saja, ini terbuka untuk semua bahasa!
Jika bahasa Anda tidak dapat mengembalikan array, Anda dapat mencetak semua angka;)
code-golf
random
permutations
dihapus
sumber
sumber
R=N=1
) Maka saya sarankan mengizinkan rentang0..R
sebagai alternatif karena ini lebih alami untuk banyak bahasa.shuffle(0..N)
new Date
menghasilkan nilai yang tidak seragam. Lebih lanjut, saya yakin Anda bisa golf kenew Date%r+1
;)Jawaban:
Dyalog APL, 1 byte
Hanya builtin. Coba di sini .
sumber
JavaScript (ES6),
6866 byteDisebut sebagai
F(N)(R)()
, di manaF
penugasan fungsi, danN
/R
adalah nilainya.Anda meminta lebih pendek dari 73 byte dalam Js;)
EDIT: Jawaban oleh @ C5H8NNaO4 bekerja dalam kenyataan bahwa aturan tidak menentukan nilai harus seragam
1..R
. Mengingat, inilah versi yang berfungsi dalam 63 byte (disebut sebagaiF(R)(N)
):sumber
Oktaf,
22 199 byterandperm(r,n)
tidak persis apa yang diminta. Perhatikan bahwa ini tidak berfungsi (setidaknya tidak dalam versi yang lebih lama) di Matlab.sumber
@(n,r)randperm(r,n)
randperm
dengan dua input tidak berfungsi dalam versi Matlab terbaru. Ada jugarandsample
, tetapi dibutuhkan lebih banyak byte, kecuali Anda dapat menyingkirkan@(...)
(Saya pikir itu diperbolehkan)@randperm
=)TI-84 BASIC OS 4.0, 12 byte
TI-84 + CSE (2013) dan CE (2015) pada dasarnya adalah dialek BASIC terbatas yang sama dengan TI-84 +, tetapi ada beberapa fitur baru. Salah satunya adalah argumen ketiga randIntNoRep.
sumber
MATL , 2 byte
Inputnya adalah: pertama
R
, laluN
.Cobalah online!
Penjelasan
Fungsi ini
Zr
mengambil dua input (tersirat dalam kasus ini) dan melakukan pengambilan sampel acak tanpa penggantian. Input pertamaR
,, menetapkan bahwa populasi adalah[1,2,...,R]
; dan input keduaN
,, menunjukkan jumlah sampel yang akan diambil dari populasi.sumber
J,
43 byteSatu byte disimpan berkat Zgarb! ( Dicoret empat masih empat biasa: D )
panggilan seperti
N (1+?) R
, misalnya3 (1+?) 10
,. Ini menggunakan operator "Roll", dan melakukan persis seperti yang dijelaskan, kecuali di bawah0...n-1
. Jika kita diizinkan untuk melakukan ini, maka jawabannya adalah 1 byte,sumber
Pyth, 6 byte
Coba di sini!
Rentang muncul di baris pertama dan panjang di baris kedua.
Penjelasan
Versi 5-byte yang tidak bersaing
Penambahan terbaru ke Pyth menambahkan implisit
Q
di akhir program jika diperlukan. Kita dapat menggunakan ini di sini dengan membalikkan format input, sehingga panjangnya lebih dulu dan kemudian jangkauan.Coba di sini!
Ini
E
adalah kisaran, yang kita ubah menjadi daftar berbasis 1S
, kocok.S
dan ambilQ
elemen pertama<
.<
mengharapkan bilangan bulat yang secara implisit ditambahkan dengan aQ
.sumber
Reng v.2.1,
1401039897 byteIni juga bisa digunakan di versi sebelumnya.
Anda bisa mencobanya di sini! Masukan
maximum length
, seperti10 3
.Saya sangat bangga dengan hal ini, Anda bahkan tidak tahu. Jika seseorang mengalahkan saya dengan jawaban Java, itu akan membuat saya senang. Jika saya mengalahkan jawaban Java, pertimbangkan hari saya juga.
Saya akan menjelaskannya nanti, setelah saya sembuh. Namun secara umum:
Ini menghasilkan angka acak. Bagian lain memeriksa apakah ada duplikat, dan, jika ada, proses diulang. Selain itu, hasilnya akan dicetak, dengan spasi yang menyatukan hasilnya.
Berikut ini beberapa contohnya:
sumber
CJam, 8 byte
Coba di sini!
Ini adalah blok tanpa nama yang mengharapkan kisaran di atas tumpukan dan panjang di bagian bawah dan meninggalkan daftar di tumpukan.
Penjelasan
sumber
Common Lisp, 90
52 hanya untuk ekspresi
Tidak disatukan
Seperti jawaban lain, jika saya tidak menghitung paket-penggunaan dan lambda , ekspresi yang tersisa adalah
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
, untuk 52 byte.sumber
Ruby,
2723 byteFungsi anonim, cukup pendek dan manis.
-4 byte dari @manatwork
sumber
->n,r{[*1..r].sample n}
Silakan gunakan markup blok kode alih-alih markup kode inline, jadi skrip seperti Code Golf UserScript Enhancement Pack dapat menyisipkan ukuran kode di sebelahnya.𝔼𝕊𝕄𝕚𝕟, 10 karakter / 13 byte
Try it here (Firefox only).
Penjelasan
sumber
Bash + coreutils, 16
Saya pikir ini cukup jelas:
Input
N
danR
sebagai parameter baris perintah.Atau seperti yang ditunjukkan @rici, untuk skor yang sama:
Ideone.
sumber
shuf -n$1 -i1-$2
(panjangnya sama).PowerShell v2 +, 30 byte
Mengambil input
$n
dan$r
, membangun sebuah jangkauan1..$r
, menyalurkannya keGet-Random
dengan-C
ount of$n
, yang akan memilih$n
elemen unik dari kisaran tersebut. Output dibiarkan pada pipa sebagai array implisit.sumber
Serius, 5 byte
Cobalah online!
Penjelasan:
sumber
Clojure, 38 byte
Fungsi anonim mengambil N pertama dan R kedua.
sumber
Perl 6, 32 byte
sumber
Python 3.5 -
5453 byte:Ini menggunakan fungsi modul acak
sample()
untuk mengembalikan array dengan panjang "a" yang terdiri dari elemen unik dan acak dalam rentang tersebut1 => c
.sumber
D, 29 byte (hanya ekspresi)
Dengan asumsi std.random dan std.range telah diimpor dan bahwa n dan r didefinisikan sebagai variabel, program dapat diselesaikan dalam ekspresi tunggal:
sumber
ES6, 72
Seperti pada jawaban @ Mwr247 , Anda dapat memanggilnya dengan
F(R)(N)
,F
sebagai ekspresi fungsisumber
Mathcad, 67 "byte"
membuat vektor kolom bilangan bulat berturut-turut dalam kisaran 1..R, bergabung ke vektor kolom panjang R dari nomor acak (seragam), mengurutkan matriks Rx2 yang dihasilkan pada kolom angka acak, dan kemudian mengekstraksi angka n pertama dari kolom bilangan bulat acak.
sumber
Python, 56 (cara yang jelas)
sumber
from random import*;lambda N,R:sample(range(1,R+1),k=N)
lebih pendek dengan satu bytefrom random import*
, pasti sudah mengacaukan penghitungan.Perl 5,
5143 byteCukup mudah sub anonim yang menghasilkan array dari 1 ke R dan kemudian menyambungkan elemen acak N dari itu untuk kembali. Panggil dengan
->(N, R)
.sumber
TI-84 BASIC, 21 byte
sumber
Ans
input sesuai meta post baru-baru ini.