N rastgele bir alfasayısal dizge oluşturma


30

Belirli bir uzunlukta ve yalnızca alfasayısal karakterlere izin verilen rastgele bir dize oluşturmanın en kısa yolu nedir?

  • rastgele bir dizge örneği: N = 9 ile çıktı aZua7I0Lk
  • verilen uzunluk N'nin her zaman 0'dan büyük olduğu varsayılabilir.
  • Gerekirse N için 256'yı maksimum değer olarak kabul edebilirsiniz, ancak N için daha yüksek limitlere sahip olan ve hala hızlı bir hesaplama süresine sahip olan çözümler tercih edilir.
  • izin verilen karakterler: 0-9, az ve AZ
  • çıkış dizesinde bir karakter birden çok kez oluşabilir.
  • olası her dize eşit derecede muhtemel olmalıdır (dilinizin rasgele sayı üreticisinin doğruluğuna)

1
N için maksimum değer alabilir miyiz?
JAD

Yanıtlar:


4

Jöle , 4 bayt

ØBṗX

Çevrimiçi deneyin!

açıklama

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

Kartezyen gücü temel olarak, belirli bir eleman grubundan oluşturulabilecek olan belirli bir uzunluktaki tüm listeyi üretir; İşte tam ihtiyacımız olan şey burada.


UTF-8 karakterleri varsa, bu gerçekten sadece 4 bayt olabilir mi? Bir UTF-8 karakteri bir bayttan daha fazlası olabilir ...
m13r

@ m13r Jelly, hepsinin tek baytlık karakterleri olduğu kendi kod sayfasını kullanır
FlipTack

13

Taksi , 2577 bayt

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]

Çevrimiçi deneyin!

Taksi bunun için yapılmış süper değil ama yapabilirsiniz! Golf edilmemiş versiyonun altında neler olduğunu açıklamaya çalışacağım.

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]

Başlat: stdin'i alın Stdin
değerini metin olarak alın , sayıya dönüştürün ve beklemek için bir yere yapıştırın.

Bölüm 1 Planlayın: Rastgele bir tamsayı
alın 1-62 Rastgele bir tamsayı alın ve sonra 62bir sayı olarak alın . Hem rastgele tamsayıyı hem de çoğaltın, 62çünkü daha sonra onlara ihtiyacımız olacak. Yalnızca biz ile bitirmek böylece tek seferde 3 yolcu taşıyabilen rand, randve 62. (Başka 62Biz dönene kadar beklemek olacaktır.) Git bölünmeyi randtarafından62 ve bir tamsayı olsun sonuç kesecek. Diğer kopyasını almak için geri dönün 62ve bölümdeki kesilmiş tam sayı ile çarpın. Son olarak, ürünü ilk kopyasından çıkarın rand. Bu bize 0-61 sayısı verir. Şimdi 1a'yı almak için geri dönüp 1-62 sayısını almak için sonuca eklemeliyiz. Evet, bütün bu metin satırları sadece mod(rand(),62)+1.

2. Bölümü Planlayın:
Tüm geçerli karakterlerin bulunduğu bir dize seçin ve sonunda istemediğimiz bir karakter dizisi seçilecek bir karakter dizisi oluşturun (bundan sonra daha fazlası). Daha 63önce aldığımız bu dizge uzunluğuyla eşleşiyor. Bireysel yolculara bölünmesi için Chop Suey'e götürün.

Plan B: Diziyi, karakterleri
tek tek seçebilmemiz için , her karakteri Dar Yol Parkına getirin. Mevcut tek yığın ve artık yolcuların yoluna çıkmamasının tek yolu. Townsburg'daki her şey FIFO'dur, bu yüzden geri dönüp tüm yolcuları genel döngünün her yinelemesinden çıkarmak zorunda kalacağım. Bu sayede onları sadece parkta bırakabilirim ve her seferinde 63 yeni karakterle yoldan çekilecekler. İlk Amuhtemeldir kaçmak asla .

Plan C: Bir karakter seçmeye hazırlanın
Bu gerçekten Plan D'de olması gerekmeyen birkaç duraktır. Taksiyi hazırlığa alın.

Plan D: Hepimizin karakterler al daha dont istiyorum
, biz sonucundan saymak gibi alıp karakterleri birleştirerek tutmak "dizi" ters ilk karakterin ile başlayarak (bu biz istemiyoruz 63 karakterdir) modfonksiyonu Plan A'da sıfıra bastığınızda, bir sonraki karakter istediğiniz karakterdir.

Plan E: İstemediklerinizi boğun ve seçilene geri dönün.
“[P] görevlileri Riverview Bridge'e düştü, her zaman yanlara ve nehre düşüyor gibi görünüyor…” Eh, bu birleşmiş kaybedenler dizisinden kurtuldu. Git bir sonraki karakteri al ve stdout'a gönder. Son olarak, şu ana kadar kaç karakter bastığımızı kontrol edelim. Çok uzun zaman önce bıraktığımız stdin değerini almak için Sunny Skies'a dönelim. Birini çıkarın ve sonuç sıfırdan fazla ise, beklemek ve Plan A'da tekrar başlamak için geri gönderin.


Bu bir Turing tam dili midir? Hiç duymadım? Eğer öyleyse, o zaman bu tarihteki en uzun kod golf cevap olarak nitelenebilir!
maple_shaft

4
@ Maple_shaft Taksi eğlenceli ama bu en uzun kod golf cevap olmadığını garanti edebilirim. Orada bazı Unary cevaplar ciddiye koz o.
Mühendis Toast,

1
@maple_shaft Biraz kazı yaptım. PPCG'de bulabildiğim en büyük cevap, bu cevabın orijinal versiyonudur @ Dennis Dennis (tabii ki Dennis ♦) code-bowling. Bulabildiğim en uzun code-golfcevap , temel quine mücadelesine ilişkin orijinal Brain-Flak sunumu . 9.5 * 10 ^ 580 baytta geliyor. En uzun akım buldum cevap oldu tekli prime tester 1.65 * 10 ^ 56 byte:.
Mühendis Tost,


6

Jöle , 5 bayt

Bir numara kaçırdım - ais523'ün 4 baytını gör

ØBX$€

Çevrimiçi deneyin!

Nasıl?

Ø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

UTF-8 karakterini bir bayt oO uzunluğuna sahip olarak düşünmüyorum?
m13r,

@ m13r Jelly'in kendi kod sayfası vardır - görmek için cevabımın başındaki baytları tıklayın.
Jonathan Allan,

5

Shell + pwgen , 13 bayt

pwgen -s $1 1

-s, --secure

Tamamen rastgele, ezberlemesi zor şifreler oluşturun.

Örnek çıktı

%pwgen -s 10 1
2cyhLovbfT

5

Java 8, 183 149 97 88 bayt

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

Çevrimiçi deneyin.

-9 bayt taşıyarak @ 2501 'in C cevabını taşıyarak, bu yüzden onu da artırdığınızdan emin olun!

Eski cevap, 97 bayt

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;}

Çevrimiçi deneyin.

Açıklama:

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

4

C, 60 bayt

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

Burada işe bakın .

Buradaki dağılımı görün .

rand() % 62Düzgün bir dağılım ürettiği varsayılarak eşit bir şekilde dağılmıştır. 62 genellikle RAND_MAX'ı eşit olarak bölmediğinden, çok küçük bir önyargı vardır.


4

Kardan adam , 58 bayt

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

Çevrimiçi deneyin!

Bu, bir tamsayıyı girdi olarak alan ve rastgele dizgiyi döndüren bir alt yordamdır.

((             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 +

Öyle olmalı: ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501

@ 2501 Ah, haklısın. Sabit, teşekkürler.
Doorknob

4

PowerShell, 58 54 Bayt

-4 sayesinde Andrei Odegov - karakter dizisi oluşturmak için ilmek yerine karakter dizisine geçiş.

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

1..2+4..5 = 1,2,4,5kabul edilebilir tüm kodlayıcı kodlarının bir yelpazesini oluşturur , ardından $argsrasgele kullanarak elementlerin sayısını seçer random -Count- elde edilen elementler ilmeklenir |%{}ve [char]s'ye dönüştürülür , kullanılarak bir dizi karakter dizisine dökülür [char[]]- daha sonra her şey parantez içine alınır ve -joinbirlikte saklanır.

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

Parametre Get-Randomiçin yalnızca 1'in üzerindeki sayıları kabul ettiği için 0 girişi için çalışmaz -Count.


Elde edilen bayt dizisini tek bir bütün olarak karakter dizisine yayınlayabilirsiniz. Bu, 4 bayttan tasarruf etmenize yardımcı olur:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov



2

Perl 5 , 41 bayt

40 bayt kodu + -pbayrak.

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

Çevrimiçi deneyin!

(a..z,A..Z,0..9)Tüm harfleri ve sayıları içeren bir dizi oluşturur, [rand 62]ekleme olup, bu dizinin, bir rastgele eleman verir ( .=) için $\dolaylı uç sayesinde de basılı olduğu, -pbayrağın }{.


Veya, aynı bytecount için, ancak standart girdi yerine parametreleri kullanarak:

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

Çevrimiçi deneyin!


2

R, 51 bayt

Diğer R cevapları ile aynı uzunluk, ancak farklı bir yaklaşım.

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

lettersve LETTERSher ikisi de sırasıyla tüm küçük ve büyük harfleri içeren yerleşik değişkenlerdir. Buna ek 0:9olarak alfanümerik karakterlerin hepsine sahibiz.


2

R, 54 52 51 49 bytes

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

Explanation:

  1. Read input integer n: scan()
  2. Vector with ASCII values: c(65:90,97:122,48:57)
  3. Sample n ASCII values with replacement: sample(c(65:90,97:122,48:57),scan(),T)
  4. Transform ASCII values to a character string with intToUtf8

I found another approach with the same length.
JAD

@JarkoDubbeldam Good idea, this helped me to save two bytes
Sven Hohenstein

D'oh! nice job :)
JAD

2

JavaScript (ES6), 61 54 39 52 64 bytes

This is almost like reverse-golf! Took a big hit on the byte count ensuring that the full range of characters from all three groups would be used.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 bytes saved (at one stage) thanks to Arnauld's suggestion of using a recursive function.

Try it

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>


I've updated it so that all 3 character groups are included, @Arnauld; I'm just trying to find an index that can contain more than 2 of them. Thanks for suggesting the recursive option.
Shaggy

I like the idea, but I think you're now generating characters in [0-5w-z] exclusively.
Arnauld

I'd suggest btoa(String.fromCharCode(Math.random()*248))[0] to cover the whole range uniformly.
Arnauld

Just noticed that myself, @Arnauld. It looks like I'm going to have to combine both methods (convert toString and then encode) in order to guarantee a full range of characters from all 3 groups can be returned.
Shaggy

That's better but still incomplete: 014589ABEFIJMNQRUVYZcdghklopstwx (and not uniform).
Arnauld

2

Alice, 24 bytes

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

Try it online!

This layout is already a lot better than what I originally had (32 bytes), but I'm sure it's not optimal yet...

Explanation

/      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.

2

Python + exrex, 81 bytes

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

2

Python 2, 79 83 79 bytes

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

+4 bytes (didn't account for repetition)

-4 bytes (Thanks to @Rod for the suggestion for using printable[:62])


1
Doesn't work, it must contain repetitions. It can be fixed using (s.letters+s.digits)*x instead s.letters+s.digits
Rod

@Rod Fixed, thanks!
Wondercricket

You can also use `r.sample(...)`[2::5] instead ''.join(r.sample(...)) to save a byte (python 2 only) and (s.letters+s.digits)*x can be switched to s.printable[:62]*x to save 4 bytes
Rod

@Rod Thanks for the suggestions. I implemented printable, couldn't get the [2::5] to work (maybe I was doing it wrong?)
Wondercricket

you need to surround the list r.sample() with backticks `` some info about it
Rod

1

Brachylog, 14 bytes

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

Try it online!

Explanation

~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


1

Batch, 175 bytes

@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%%

s performs double duty here as it contains both the alphanumeric list and the randomly selected characters. After printing the result the code falls through to the subroutine whose result is ignored.


1

Pyke, 4 bytes

~JfH

Try it online!

~J   -   "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  f  -  cominbations(^, length=input)
   H - random.choice(^)

This doesn't seem to work for any input greater than 3, and I'm not sure it can generate the same character more than once.
ATaco

This does not work for inputs greater than 3. I've tried it here: pyke.catbus.co.uk
m13r

This needs about 1 GB of RAM just to create a string of 4 alphanumeric characters... Did not get it to work for an input of 10. The program crashed with a MemoryError
m13r

1

Pyth, 7 11 bytes

O^s++rG1GUT

Try it online

Explanation

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.

This only includes the lowercase alphabet and numbers, not the uppercase letters
Blue

@muddyfish Good catch. Fixed.

1

C# - 121 bytes

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

1

APL (Dyalog) with AGL, 17 bytes

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

Try it online!

()[] index into

⎕A,∆a,⎕D uppercase alphabet followed by lowercase alphabet followed by digits

using

62 (the number of possible symbols

reshaped by

 evaluated input (n)

? change each 62 into a random number in the range 1…62

APL (APLX), 17 bytes

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


1

Pip, 13 bytes

LaORCz.AZ.J,t

Try it online!

Explanation

               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

1

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

 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

There are no lower-case characters in ZX81 without using assembly or having some sort of UDG ROM or something, and for the time being, it only outputs A-Z. If zero is entered then the program halts and returns to direct mode.



0

Stacked, 33 bytes

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

Try it online! Takes input from the top of the stack and leaves output on the top of the stack.

:>[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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.