Apa cara terpendek untuk menghasilkan string acak dengan panjang tertentu dan hanya dengan karakter alfanumerik yang diizinkan?
- contoh string acak: dengan N = 9 output akan menjadi
aZua7I0Lk
- panjang yang diberikan N dapat diasumsikan selalu lebih besar dari 0
- jika perlu Anda dapat menganggap 256 sebagai nilai maksimum untuk N, tetapi solusi dengan batas lebih tinggi untuk N dan masih memiliki waktu komputasi yang cepat lebih disukai
- karakter yang diizinkan: 0-9, az dan AZ
- sebuah karakter dapat muncul lebih dari satu kali di string keluaran
- setiap string yang mungkin harus memiliki kemungkinan yang sama (dengan akurasi generator nomor acak bahasa Anda)
Jawaban:
Jelly , 4 byte
Cobalah online!
Penjelasan
Kekuatan kartesius pada dasarnya menghasilkan semua daftar panjang tertentu yang dapat dibentuk dari serangkaian elemen tertentu; itulah yang kita butuhkan di sini.
sumber
Taksi , 2577 byte
Cobalah online!
Taksi super tidak dibuat untuk ini tetapi Anda bisa melakukannya! Saya akan mencoba menjelaskan apa yang terjadi di bawah versi un-golf.
Mulai: Dapatkan stdin
Ambil nilai stdin sebagai teks, konversikan ke angka, dan tempelkan di suatu tempat untuk menunggu.
Rencanakan A Bagian 1: Dapatkan bilangan bulat acak 1-62
Dapatkan bilangan bulat acak dan dapatkan
62
sebagai angka. Gandakan bilangan bulat acak dan62
karena kita akan membutuhkannya nanti. Anda hanya dapat membawa 3 penumpang sekaligus jadi kita berakhir denganrand
,rand
, dan62
. (Yang lain62
akan menunggu sampai kita kembali.) Go membagirand
oleh62
dan memotong hasilnya untuk mendapatkan integer. Kembali untuk mendapatkan salinan lain62
dan kalikan dengan integer terpotong dari divisi. Akhirnya, kurangi produk dari salinan pertamarand
. Ini memberi kita angka 0-61. Sekarang kita harus kembali ke pickup a1
dan menambahkannya ke hasil untuk mendapatkan nomor 1-62. Ya, semua banyak baris teks itu adilmod(rand(),62)+1
.Plan A Bagian 2: Buat array karakter untuk memilih
mengambil string dengan semua karakter yang valid dan juga satu di akhir yang tidak kita inginkan (lebih lanjut tentang itu nanti). The
63
kami mengambil pertandingan sebelumnya panjang string ini. Bawa ke Chop Suey untuk membobolnya menjadi penumpang individu.Plan B: Pindahkan array sehingga kita dapat memilih karakter
Satu per satu, pindahkan setiap karakter ke Narrow Path Park. Ini satu-satunya tumpukan yang tersedia dan satu-satunya cara agar penumpang yang tersisa tidak menghalangi. Segala sesuatu yang lain di Townsburg adalah FIFO jadi saya harus kembali dan membersihkan semua penumpang setiap iterasi dari keseluruhan loop. Dengan cara ini, saya bisa meninggalkan mereka di taman dan mereka akan diusir oleh 63 karakter baru setiap saat. Yang paling pertama
A
adalah kemungkinan untuk tidak pernah melarikan diri .Paket C: Bersiaplah untuk memilih karakter
Ini benar-benar hanya beberapa pemberhentian yang tidak perlu ada dalam Rencana D. Atur ulang posisi taksi dalam persiapan.
Paket D: Dapatkan semua karakter yang tidak kita inginkan.
Mulai dengan karakter pertama dalam "array" terbalik (ini adalah karakter ke-63 yang tidak kita inginkan), terus mengambil dan menggabungkan karakter saat kita menghitung mundur dari hasil
mod
fungsi di Plan A. Setelah Anda mencapai nol, karakter berikutnya adalah yang Anda inginkan.Paket E: Tenggelam yang tidak Anda inginkan dan kembalikan yang terpilih.
"Para pengendara yang jatuh di Riverview Bridge tampaknya selalu jatuh ke samping dan ke dalam sungai ..." Ya, itu menghilangkan rentetan pecundang. Pergi ambil karakter berikutnya dan kirim ke stdout. Akhirnya, mari kita periksa berapa banyak karakter yang telah kita cetak sejauh ini. Kembali ke Sunny Skies untuk mengambil nilai stdin yang kami tinggalkan sejak lama. Kurangi satu dan, jika hasilnya lebih dari nol, kirim kembali untuk menunggu dan mulai lagi dari Rencana A.
sumber
code-bowling
dan direvisi ke bawah.code-golf
Jawaban terpanjang yang bisa saya temukan adalah pengajuan Brain-Flak asli pada tantangan quine dasar. Muncul di 9,5 * 10 ^ 580 byte. Jawaban terkini terpanjang yang saya temukan adalah penguji utama di Unary : 1,65 * 10 ^ 56 byte.C (gcc) ,
575552 byteTerima kasih kepada 2501 untuk petunjuknya ...
Cobalah online!
sumber
rand()%74
seharusnyarand()%75
&&putchar(i)
bukan operator ternary.Jelly , 5 byte
Tidak terjawab tipuan - lihat 4 byter ais523
Cobalah online!
Bagaimana?
sumber
Shell + pwgen , 13 byte
Output sampel
sumber
Java 8,
1831499788 byteCobalah online.
-9 byte dengan mem-porting @ 2501 jawaban C , jadi pastikan Anda juga menambahkannya!
Jawaban lama, 97 byte
Cobalah online.
Penjelasan:
sumber
C, 60 byte
Lihat berhasil di sini .
Lihat distribusinya di sini .
Ini didistribusikan secara seragam, dengan asumsi
rand() % 62
menghasilkan distribusi yang seragam. Karena 62 biasanya tidak membagi RAND_MAX secara merata, ada bias yang sangat kecil.sumber
Snowman , 58 byte
Cobalah online!
Ini adalah subrutin yang mengambil integer sebagai input dan mengembalikan string acak.
sumber
((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))
.PowerShell,
5854 Bytes-4 Terima kasih kepada Andrei Odegov - casting ke array char bukannya looping untuk membuat array char.
menghasilkan serangkaian
1..2+4..5 = 1,2,4,5
semua kode charachter yang dapat diterima, kemudian memilih$args
sejumlah elemen secara acak menggunakanrandom -Count
- elemen yang dihasilkandilingkarkandilemparkan ke array karakter menggunakan|%{}
dan diubah menjadi[char]
s,[char[]]
- maka semuanya dikemas dalam kurung dan-join
diedit bersama-sama.Tidak berfungsi untuk input 0 karena
Get-Random
hanya menerima angka di atas 1 untuk-Count
parameter.sumber
-join[char[]](65..90+97..122+48..57|random -C "$args")
PHP, 56 Bytes
Versi Online
ctype_alnum
sumber
05AB1E , 6 byte
Cobalah online!
Penjelasan
sumber
Perl 5 , 41 byte
40 byte kode +
-p
bendera.Cobalah online!
(a..z,A..Z,0..9)
membuat larik yang berisi semua huruf dan angka,[rand 62]
mengembalikan elemen acak larik ini, yang ditambahkan (.=
) ke$\
, yang dicetak secara tersirat pada akhirnya berkat-p
flag with}{
.Atau, untuk bytecount yang sama, tetapi menggunakan parameter daripada input standar:
Cobalah online!
sumber
R, 51 byte
Panjangnya sama dengan jawaban R lainnya, tetapi pendekatannya berbeda.
letters
danLETTERS
keduanya merupakan variabel bawaan yang masing-masing berisi semua huruf kecil dan besar. Menambah0:9
itu dan kami memiliki seluruh rangkaian karakter alfanumerik.sumber
R,
54525149 bytePenjelasan:
scan()
c(65:90,97:122,48:57)
sample(c(65:90,97:122,48:57),scan(),T)
intToUtf8
sumber
JavaScript (ES6),
6154395264 byteIni hampir seperti golf terbalik! Mengambil hit besar pada jumlah byte memastikan bahwa berbagai karakter dari ketiga kelompok akan digunakan.
Cobalah
sumber
[0-5w-z]
eksklusif.btoa(String.fromCharCode(Math.random()*248))[0]
untuk menutupi seluruh jajaran secara seragam.toString
dan kemudian penyandian) untuk menjamin berbagai karakter dari ketiga grup dapat dikembalikan.014589ABEFIJMNQRUVYZcdghklopstwx
(dan tidak seragam).Alice , 24 byte
Cobalah online!
Layout ini sudah jauh lebih baik daripada yang saya miliki sebelumnya (32 byte), tapi saya yakin itu belum optimal ...
Penjelasan
sumber
Python + exrex , 81 byte
sumber
Python 2,
798379 byte+4 byte (tidak memperhitungkan pengulangan)
-4 byte (Terima kasih kepada @Rod untuk saran penggunaannya
printable[:62]
)sumber
(s.letters+s.digits)*x
sebagai gantinyas.letters+s.digits
`r.sample(...)`[2::5]
bukan''.join(r.sample(...))
untuk menyimpan byte (python 2 saja) dan(s.letters+s.digits)*x
dapat beralih kes.printable[:62]*x
untuk menyimpan 4 bytesprintable
, tidak bisa menjalankannya[2::5]
(mungkin saya salah melakukannya?)r.sample()
dengan backticks``
beberapa info tentang hal ituBrachylog , 14 byte
Cobalah online!
Penjelasan
sumber
MATL , 8 byte
Cobalah online!
sumber
Batch, 175 byte
s
melakukan tugas ganda di sini karena berisi daftar alfanumerik dan karakter yang dipilih secara acak. Setelah mencetak hasilnya, kode masuk ke subrutin yang hasilnya diabaikan.sumber
Pyke , 4 byte
Cobalah online!
sumber
MemoryError
Pyth,
711 byteCobalah online
Penjelasan
sumber
C # - 121 byte
sumber
APL (Dyalog) dengan AGL , 17 byte
Cobalah online!
(
...)[
...]
indeks ke⎕A,∆a,⎕D
huruf besar diikuti oleh huruf kecil diikuti oleh angkamenggunakan
62
(jumlah simbol yang mungkin⍴
dibentuk kembali oleh⎕
input yang dievaluasi ( n )?
ubah masing-masing 62 menjadi angka acak dalam kisaran 1… 62APL (APLX) , 17 byte
sumber
Bash , 43 byte
Cobalah online!
sumber
Pip , 13 byte
Cobalah online!
Penjelasan
sumber
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 63 byte BASIC tokenized
Tidak ada karakter huruf kecil di ZX81 tanpa menggunakan rakitan atau memiliki semacam UDG ROM atau sesuatu, dan untuk saat ini, hanya output
A-Z
. Jika nol dimasukkan maka program berhenti dan kembali ke mode langsung.sumber
Japt ,
128 byteCobalah
sumber
Ditumpuk , 33 byte
Cobalah online! Mengambil input dari atas tumpukan dan meninggalkan output di atas tumpukan.
sumber