Menghasilkan string alfanumerik acak dengan panjang N

30

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)
m13r
sumber
1
Bisakah kita mengasumsikan nilai maksimum untuk N?
JAD
Terkait
spaghetto

Jawaban:

4

Jelly , 4 byte

ØBṗX

Cobalah online!

Penjelasan

ØBṗX
ØB     All letters (uppercase and lowercase) and digits
  ṗ    Cartesian power with {the input}
   X   Select a random possibility

Kekuatan kartesius pada dasarnya menghasilkan semua daftar panjang tertentu yang dapat dibentuk dari serangkaian elemen tertentu; itulah yang kita butuhkan di sini.


sumber
Jika ada karakter UTF-8 yang terlibat, apakah benar-benar hanya 4 byte? Satu karakter UTF-8 bisa lebih dari satu byte ...
m13r
@ m13r Jelly menggunakan halaman kode sendiri di mana ini semua adalah karakter byte tunggal
FlipTack
13

Taksi , 2577 byte

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 l 1 l 1 r.[a]Go to Heisenberg's:n 1 r 1 r 3 r.Pickup a passenger going to Cyclone.Go to Go More:n 1 l 3 l 3 l.Go to Starchild Numerology:e 2 r.62 is waiting at Starchild Numerology.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 2 r.Pickup a passenger going to What's The Difference.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Trunkers.Go to Trunkers:e 1 r 3 r 1 l.Pickup a passenger going to Multiplication Station.Go to Cyclone:w 2 r.Pickup a passenger going to Multiplication Station.Go to Multiplication Station:s 1 l 2 r 4 l.Pickup a passenger going to What's The Difference.Go to What's The Difference:n 2 l 1 r 3 l.Pickup a passenger going to Addition Alley.Go to Starchild Numerology:e 1 r 3 l 2 r.1 is waiting at Starchild Numerology.63 is waiting at Starchild Numerology.Pickup a passenger going to Addition Alley.Pickup a passenger going to The Underground.Go to Addition Alley:e 1 l 2 r 3 r 1 r.Pickup a passenger going to Joyless Park.Go to Writer's Depot:n 1 l 1 l.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- is waiting at Writer's Depot.Pickup a passenger going to Chop Suey.Go to Joyless Park:n 3 r 2 r 2 l.Go to Chop Suey:w 1 r 1 r 1 l.[b]Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 1 l 1 r 1 l.Go to The Underground:e 1 r.Switch to plan "c" if no one is waiting.Pickup a passenger going to The Underground.Go to Fueler Up:s.Go to Chop Suey:n 3 r 1 l.Switch to plan "b".[c]Go to Joyless Park:n 1 r.Pickup a passenger going to The Underground.Go to Narrow Path Park:w 1 r 3 l.[d]Pickup a passenger going to KonKat's.Go to KonKat's:e 1 r.Pickup a passenger going to KonKat's.Go to The Underground:s.Switch to plan "e" if no one is waiting.Pickup a passenger going to The Underground.Go to Fueler Up:s.Go to Narrow Path Park:n 4 l.Switch to plan "d".[e]Go to KonKat's:n.Pickup a passenger going to Riverview Bridge.Go to Riverview Bridge:n 1 l.Go to Narrow Path Park:e 1 l 1 r.Pickup a passenger going to Post Office.Go to Post Office:e 1 r 4 r 1 l.Go to Sunny Skies Park:s 1 r 1 l 1 r.Pickup a passenger going to The Underground.Go to The Underground:n 1 r 1 r 2 r.Switch to plan "f" if no one is waiting.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 3 l 2 l 1 l.Switch to plan "a".[f]

Cobalah online!

Taksi super tidak dibuat untuk ini tetapi Anda bisa melakukannya! Saya akan mencoba menjelaskan apa yang terjadi di bawah versi un-golf.

Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 1st left 1st left 1st right.
[a]
Go to Heisenberg's: north 1st right 1st right 3rd right.
Pickup a passenger going to Cyclone.
Go to Go More: north 1st left 3rd left 3rd left.
Go to Starchild Numerology: east 2nd right.
62 is waiting at Starchild Numerology.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st left 2nd right.
Pickup a passenger going to What's The Difference.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer: north 2nd right 2nd right 1st right.
Pickup a passenger going to Trunkers.
Go to Trunkers: east 1st right 3rd right 1st left.
Pickup a passenger going to Multiplication Station.
Go to Cyclone: west 2nd right.
Pickup a passenger going to Multiplication Station.
Go to Multiplication Station: south 1st left 2nd right 4th left.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: north 2nd left 1st right 3rd left.
Pickup a passenger going to Addition Alley.
Go to Starchild Numerology: east 1st right 3rd left 2nd right.
1 is waiting at Starchild Numerology.
63 is waiting at Starchild Numerology.
Pickup a passenger going to Addition Alley.
Pickup a passenger going to The Underground.
Go to Addition Alley: east 1st left 2nd right 3rd right 1st right.
Pickup a passenger going to Joyless Park.
Go to Writer's Depot: north 1st left 1st left.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- is waiting at Writer's Depot.
Pickup a passenger going to Chop Suey.
Go to Joyless Park: north 3rd right 2nd right 2nd left.
Go to Chop Suey: west 1st right 1st right 1st left.
[b]
Pickup a passenger going to Narrow Path Park.
Go to Narrow Path Park: north 1st left 1st right 1st left.
Go to The Underground: east 1st right.
Switch to plan "c" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up: south.
Go to Chop Suey: north 3rd right 1st left.
Switch to plan "b".
[c]
Go to Joyless Park: north 1st right.
Pickup a passenger going to The Underground.
Go to Narrow Path Park: west 1st right 3rd left.
[d]
Pickup a passenger going to KonKat's.
Go to KonKat's: east 1st right.
Pickup a passenger going to KonKat's.
Go to The Underground: south.
Switch to plan "e" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up: south.
Go to Narrow Path Park: north 4th left.
Switch to plan "d".
[e]
Go to KonKat's: north.
Pickup a passenger going to Riverview Bridge.
Go to Riverview Bridge: north 1st left.
Go to Narrow Path Park: east 1st left 1st right.
Pickup a passenger going to Post Office.
Go to Post Office: east 1st right 4th right 1st left.
Go to Sunny Skies Park: south 1st right 1st left 1st right.
Pickup a passenger going to The Underground.
Go to The Underground: north 1st right 1st right 2nd right.
Switch to plan "f" if no one is waiting.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 3rd left 2nd left 1st left.
Switch to plan "a".
[f]

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 62sebagai angka. Gandakan bilangan bulat acak dan 62karena kita akan membutuhkannya nanti. Anda hanya dapat membawa 3 penumpang sekaligus jadi kita berakhir dengan rand, rand, dan 62. (Yang lain 62akan menunggu sampai kita kembali.) Go membagi randoleh 62dan memotong hasilnya untuk mendapatkan integer. Kembali untuk mendapatkan salinan lain 62dan kalikan dengan integer terpotong dari divisi. Akhirnya, kurangi produk dari salinan pertama rand. Ini memberi kita angka 0-61. Sekarang kita harus kembali ke pickup a 1dan menambahkannya ke hasil untuk mendapatkan nomor 1-62. Ya, semua banyak baris teks itu adil mod(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 63kami 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 Aadalah 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 modfungsi 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.

Toast insinyur
sumber
Apakah ini bahasa lengkap Turing? Saya belum pernah mendengarnya? Jika demikian, maka ini mungkin memenuhi syarat sebagai jawaban golf kode terpanjang dalam sejarah!
maple_shaft
4
@maple_shaft Taksi memang menyenangkan, tapi saya bisa jamin ini bukan jawaban kode golf terpanjang. Ada beberapa jawaban Unary yang benar-benar mengada-ada.
Engineer Toast
1
@maple_shaft Saya melakukan beberapa penggalian. Jawaban terbesar yang dapat saya temukan di PPCG adalah versi asli dari jawaban ini dari @ Dennis ♦ (tentu saja itu Dennis ♦) tapi itu dari code-bowlingdan direvisi ke bawah. code-golfJawaban 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.
Engineer Toast
7

C (gcc) , 57 55 52 byte

Terima kasih kepada 2501 untuk petunjuknya ...

i;f(n){for(;n-=isalnum(i=rand()%150)&&putchar(i););}

Cobalah online!

Cleblanc
sumber
rand()%74seharusnyarand()%75
2501
@ 2501 panggilan bagus.
cleblanc
1
Anda selanjutnya dapat mengurangi ukuran dengan menggunakan &&putchar(i)bukan operator ternary.
2501
Bagus! itu bagus, terima kasih.
Cleblanc
6

Jelly , 5 byte

Tidak terjawab tipuan - lihat 4 byter ais523

ØBX$€

Cobalah online!

Bagaimana?

ØBX$€ - Main link: n
    € - for each in range(n):
   $  -   last two links as a monad:
ØB    -     "base digits" - yields list of chars "01..9AB...Zab...z"
  X   -     random choice
Jonathan Allan
sumber
Saya tidak akan menganggap karakter UTF-8 memiliki panjang satu byte oO?
m13r
@ m13r Jelly memiliki halaman kode sendiri - klik byte di header jawaban saya untuk melihatnya.
Jonathan Allan
5

Shell + pwgen , 13 byte

pwgen -s $1 1

-s, --secure

Buat kata sandi yang benar-benar acak dan sulit dihafal.

Output sampel

%pwgen -s 10 1
2cyhLovbfT
zeppelin
sumber
5

Java 8, 183 149 97 88 byte

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",t+=t>9?t>35?61:55:48))t=62;}

Cobalah online.

-9 byte dengan mem-porting @ 2501 jawaban C , jadi pastikan Anda juga menambahkannya!

Jawaban lama, 97 byte

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",t>9?(t<36?65:97)+t%26:48+t%10))t=62;}

Cobalah online.

Penjelasan:

n->{                           // Method with integer parameter and String return-type
  for(int t;                   //  Temp integer
      n-->0                    //  Loop the input amount of times:
      ;                        //    After every iteration:
       t*=Math.random(),       //     Set `t` to a random integer in the range [0,62)
       System.out.printf("%c", //     Print as character:
         t+=                   //      The random integer, after we've added:
            t>9?               //       If the random integer is larger than 9:
             t>35?             //        If the random integer is larger than 35:
              61               //         Add 61
             :                 //        Else:
              55               //         Add 55
            :                  //       Else:
             48))              //        Add 48
    t=62;}                     //   (Re)set `t` to 62 for the random

n->{for(int t;n-->0;t*=Math.random(),System.out.printf("%c",...))t=62;}
                               // Similar as above
         t>9?                  //      If the random integer is larger than 9:
          (t<36?               //       If the random integer is smaller than 36:
            65                 //        Start with 65 ('A')
           :                   //       Else:
            97)                //        Start with 97 ('a')
               +t%26           //       And add the random integer modulo-26
         :                     //      Else:
          48                   //       Start with 48 ('0')
            +t%10)             //       And add the random integer modulo-10
Kevin Cruijssen
sumber
4

C, 60 byte

r;f(n){for(;n--;)r=rand()%62,putchar(r+=r>9?r>35?61:55:48);}

Lihat berhasil di sini .

Lihat distribusinya di sini .

Ini didistribusikan secara seragam, dengan asumsi rand() % 62menghasilkan distribusi yang seragam. Karena 62 biasanya tidak membagi RAND_MAX secara merata, ada bias yang sangat kecil.

2501
sumber
4

Snowman , 58 byte

((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR))

Cobalah online!

Ini adalah subrutin yang mengambil integer sebagai input dan mengembalikan string acak.

((             subroutine
  }            make b, e, g active
  #`           e = input (from +)
  ""*          store an empty string in +
  :            what follows is the block to prepend a random char to +
    48vn58nR|  generate range(48..58) and place in g (need b and e for next step)
    65vn91nR   generate range(65..91) in b
    ,aC|       move g to e, concatenate b and e, and move the result to g
    97vn123nR  generate range(97..123) in b
    ,aC        move g to e, concatenate b and e, keeping the result in b
    AsH        shuffle the array of candidate ASCII codes stored in b
    1AaL       equivalent to 0aAwR - get the first element wrapped in an array
    #aC        retrieve + and prepend the randomly generated character
    *          store back into +
  ;bR          repeat this block e times, where e has been set to the input
))             output is given via +
Gagang pintu
sumber
Itu harus: ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501
@ 2501 Ah, kamu benar. Tetap, terima kasih.
Gagang Pintu
4

PowerShell, 58 54 Bytes

-4 Terima kasih kepada Andrei Odegov - casting ke array char bukannya looping untuk membuat array char.

-join[char[]](65..90+97..122+48..57|random -C "$args")

menghasilkan serangkaian 1..2+4..5 = 1,2,4,5semua kode charachter yang dapat diterima, kemudian memilih $argssejumlah elemen secara acak menggunakan random -Count- elemen yang dihasilkan dilingkarkan |%{}dan diubah menjadi [char]s, dilemparkan ke array karakter menggunakan [char[]]- maka semuanya dikemas dalam kurung dan -joindiedit bersama-sama.

PS C:\users\sweeneyc\Desktop> .\grstr.ps1 5
oaCE5
PS C:\users\sweeneyc\Desktop> .\grstr.ps1 10
UReh6McG7D
PS C:\users\sweeneyc\Desktop> .\grstr.ps1 30
t1YrhZf5egyzqnPlWUKV3cEoIudMTs

Tidak berfungsi untuk input 0 karena Get-Randomhanya menerima angka di atas 1 untuk -Countparameter.

colsw
sumber
Anda bisa melemparkan array byte yang diperoleh sebagai keseluruhan tunggal ke array karakter. Ini akan membantu menghemat 4 byte:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov
3

PHP, 56 Bytes

for(;$argn;)ctype_alnum($l=chr(rand()))&&$argn-=print$l;

Versi Online

ctype_alnum

Jörg Hülsermann
sumber
2

05AB1E , 6 byte

FžK.RJ

Cobalah online!

Penjelasan

F        # input number of times do
 žK      # push [a-zA-Z0-9]
   .R    # pick one at random
     J   # join to string
Emigna
sumber
2

Perl 5 , 41 byte

40 byte kode + -pbendera.

$\.=(a..z,A..Z,0..9)[rand 62]for 1..$_}{

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 -pflag with }{.


Atau, untuk bytecount yang sama, tetapi menggunakan parameter daripada input standar:

print+(a..z,A..Z,0..9)[rand 62]for 1..pop

Cobalah online!

Dada
sumber
2

R, 51 byte

Panjangnya sama dengan jawaban R lainnya, tetapi pendekatannya berbeda.

cat(sample(c(letters,LETTERS,0:9),scan(),T),sep="")

lettersdan LETTERSkeduanya merupakan variabel bawaan yang masing-masing berisi semua huruf kecil dan besar. Menambah 0:9itu dan kami memiliki seluruh rangkaian karakter alfanumerik.

JAD
sumber
2

R, 54 52 51 49 byte

intToUtf8(sample(c(65:90,97:122,48:57),scan(),T))

Penjelasan:

  1. Baca input integer n :scan()
  2. Vektor dengan nilai ASCII: c(65:90,97:122,48:57)
  3. Sampel dan nilai ASCII dengan penggantian:sample(c(65:90,97:122,48:57),scan(),T)
  4. Transform nilai ASCII menjadi string karakter dengan intToUtf8
Sven Hohenstein
sumber
Saya menemukan pendekatan lain dengan panjang yang sama.
JAD
@JarkoDubbeldam Ide bagus, ini membantu saya menghemat dua byte
Sven Hohenstein
Doh! kerja bagus :)
JAD
2

JavaScript (ES6), 61 54 39 52 64 byte

Ini hampir seperti golf terbalik! Mengambil hit besar pada jumlah byte memastikan bahwa berbagai karakter dari ketiga kelompok akan digunakan.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 byte disimpan (pada satu tahap) berkat saran Arnauld untuk menggunakan fungsi rekursif.

Cobalah

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
i.addEventListener("input",_=>o.innerText=f(+i.value))
<input id=i type=number><pre id=o>

Shaggy
sumber
Saya telah memperbaruinya sehingga ketiga grup karakter disertakan, @Arnauld; Saya hanya mencoba menemukan indeks yang dapat memuat lebih dari 2 indeks. Terima kasih telah menyarankan opsi rekursif.
Shaggy
Saya suka ide itu, tapi saya pikir Anda sekarang menghasilkan karakter secara [0-5w-z]eksklusif.
Arnauld
Saya sarankan btoa(String.fromCharCode(Math.random()*248))[0]untuk menutupi seluruh jajaran secara seragam.
Arnauld
Hanya memperhatikan itu sendiri, @Arnauld. Sepertinya saya harus menggabungkan kedua metode (konversi toStringdan kemudian penyandian) untuk menjamin berbagai karakter dari ketiga grup dapat dikembalikan.
Shaggy
Itu lebih baik tetapi masih belum lengkap: 014589ABEFIJMNQRUVYZcdghklopstwx(dan tidak seragam).
Arnauld
2

Alice , 24 byte

/w9u"Uz;r
\0.rdao"ki@/t&

Cobalah online!

Layout ini sudah jauh lebih baik daripada yang saya miliki sebelumnya (32 byte), tapi saya yakin itu belum optimal ...

Penjelasan

/      Reflect to SE. Switch to Ordinal.
       The IP now bounces diagonally up and down through the code.
09     Append 0 and 9 to an (implicit) empty string to create "09".
r      Range expansion, turns the string into "0123456789".
"az"   Push this string.
r      Range expansion, turns it into the lower-case alphabet.
i      Read all input as a string.
/      Reflect to E. Switch to Cardinal.
t      Implicitly convert the input string to the integer value N it
       contains and decrement it.
&      Run the next command N-1 times.
       The IP wraps around to the first column.
\      Reflect to NE. Switch to Ordinal. (This is not a command.)
w      Push the current IP address to the return address stack N-1
       times. This starts a loop whose body will run N times.
  .      Duplicate the lower-case alphabet.
  u      Convert it to upper case.
  d      Push the concatenation of all values on the stack. This pushes
         a single string with digits, lower-case and upper-case alphabet.
  U      Random choice. Pick a character from this string uniformly at random.
  o      Print it.
  ;      Discard the upper-case alphabet, because it will be regenerated
         in the next loop iteration (and if we leave it, then upper-case
         letters will become more and more likely as the output grows).
k      As long as there is still an address on the return address stack,
       jump back to that address (i.e. to the w). Once the return address
       stack has been depleted, this does nothing and the loop is exited.
@      Terminate the program.
Martin Ender
sumber
2

Python + exrex , 81 byte

import exrex,random
lambda n:random.choice(list(exrex.generate("[A-Za-z0-9]"*n)))
sebuah spaghetto
sumber
2

Python 2, 79 83 79 byte

import random as r,string as s;lambda x:''.join(r.sample(s.printable[:62]*x,x))

+4 byte (tidak memperhitungkan pengulangan)

-4 byte (Terima kasih kepada @Rod untuk saran penggunaannya printable[:62])

Wondercricket
sumber
1
Tidak berfungsi, itu harus mengandung pengulangan. Ini dapat diperbaiki menggunakan (s.letters+s.digits)*xsebagai gantinyas.letters+s.digits
Rod
@Rod Diperbaiki, terima kasih!
Wondercricket
Anda juga dapat menggunakan `r.sample(...)`[2::5]bukan ''.join(r.sample(...))untuk menyimpan byte (python 2 saja) dan (s.letters+s.digits)*xdapat beralih ke s.printable[:62]*xuntuk menyimpan 4 bytes
Rod
@Rod, Terima kasih atas sarannya. Saya menerapkan printable, tidak bisa menjalankannya [2::5](mungkin saya salah melakukannya?)
Wondercricket
Anda perlu mengelilingi daftar r.sample()dengan backticks `` beberapa info tentang hal itu
Rod
1

Brachylog , 14 byte

~l{Ạụ:Ạ:Ịcṛ}ᵐc

Cobalah online!

Penjelasan

~l                 Create a list of length Input
  {        }ᵐ      Map on each element of that list:
   Ạụ:Ạ:Ịc           The string "A…Za…z0…9"
          ṛ          Pick a character at random
             c     Concatenate into a single string
Fatalisasi
sumber
1

MATL , 8 byte

8Y2iT&Zr

Cobalah online!

8Y2      % Push string '012...89ABC...YZabc...yz'
i        % Input N
T&Zr     % Sample with replacement. Implicitly display
Luis Mendo
sumber
1

Batch, 175 byte

@set s=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
@for /l %%i in (1,1,%1)do @call :c
@echo %s:~62%
:c
@set/an=%random%%%62
@call set s=%s%%%s:~%n%,1%%

smelakukan tugas ganda di sini karena berisi daftar alfanumerik dan karakter yang dipilih secara acak. Setelah mencetak hasilnya, kode masuk ke subrutin yang hasilnya diabaikan.

Neil
sumber
1

Pyke , 4 byte

~JfH

Cobalah online!

~J   -   "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  f  -  cominbations(^, length=input)
   H - random.choice(^)
Biru
sumber
Tampaknya ini tidak berfungsi untuk input apa pun yang lebih besar dari 3, dan saya tidak yakin itu dapat menghasilkan karakter yang sama lebih dari sekali.
ATaco
Ini tidak berfungsi untuk input yang lebih besar dari 3. Saya sudah mencobanya di sini: pyke.catbus.co.uk
m13r
Ini membutuhkan sekitar 1 GB RAM hanya untuk membuat string 4 karakter alfanumerik ... Tidak membuatnya berfungsi untuk input 10. Program MemoryError
macet
1

Pyth, 7 11 byte

O^s++rG1GUT

Cobalah online

Penjelasan

O^s++rG1GUT
    +rG1G      Take the uppercase and lowercase alphabets.
   +     UT    Add it to the list [0, ..., 9].
  s            Concatenate to get a string.
 ^         Q   Get all strings of length N.
O              Choose one at random.

sumber
Ini hanya mencakup alfabet dan angka kecil, bukan huruf besar
Biru
@uddyfish Tangkapan yang bagus. Tetap.
1

C # - 121 byte

void g(int n){Console.Write(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(new Random().Next().ToString())).Substring(0,n));}
John Hathwood
sumber
1

APL (Dyalog) dengan AGL , 17 byte

(⎕A,∆a,⎕D)[?⎕⍴62]

Cobalah online!

(... )[... ] indeks ke

⎕A,∆a,⎕D huruf besar diikuti oleh huruf kecil diikuti oleh angka

menggunakan

62 (jumlah simbol yang mungkin

dibentuk kembali oleh

 input yang dievaluasi ( n )

? ubah masing-masing 62 menjadi angka acak dalam kisaran 1… 62

APL (APLX) , 17 byte

(⎕A,⎕a,⎕D)[?⎕⍴62]
Adm
sumber
1

Pip , 13 byte

LaORCz.AZ.J,t

Cobalah online!

Penjelasan

               a is cmdline arg; t is 10; z is lcase alphabet; AZ is ucase (implicit)
La             Do the following, a times:
  O             Output (without newline)
   RC           random choice from:
     z           Lowercase letters
      .AZ        concatenated with uppercase letters
         .J,t    concatenated with range(10) joined into a string
DLosc
sumber
1

Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 63 byte BASIC tokenized

 1 INPUT N
 2 IF NOT N THEN STOP
 3 FOR N=SGN PI TO N
 4 PRINT CHR$ (CODE "A"+RND*26);
 5 NEXT N

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.

Shaun Bebbers
sumber
0

Ditumpuk , 33 byte

:>[alpha 10:>ALPHA,,''#`randin]"!

Cobalah online! Mengambil input dari atas tumpukan dan meninggalkan output di atas tumpukan.

:>[alpha 10:>ALPHA,,''#`randin]"!
:>                                  range from 0 to n-1
  [                           ]"!   on each, do:
   alpha                            push "abc...xyz"
         10:>                       push (0 1 2 ... 8 9)
             ALPHA                  push "ABC...XYZ"
                  ,,                concat twice
                    ''#`            join by nothing
                        randin      select random member in it
Conor O'Brien
sumber