Generowanie losowego ciągu alfanumerycznego o długości N

30

Jaki jest najkrótszy sposób generowania ciągu losowego o zadanej długości i przy użyciu tylko znaków alfanumerycznych?

  • przykład ciągu losowego: przy N = 9 wynik byłby aZua7I0Lk
  • można założyć, że podana długość N jest zawsze większa niż 0
  • w razie potrzeby można przyjąć 256 jako maksymalną wartość dla N, ale preferowane są rozwiązania z wyższymi wartościami granicznymi dla N i wciąż mające szybki czas obliczeń
  • dozwolone znaki: 0-9, az i AZ
  • znak może wystąpić więcej niż jeden raz w ciągu wyjściowym
  • każdy możliwy ciąg znaków powinien być jednakowo prawdopodobny (z dokładnością do generatora liczb losowych w Twoim języku)
m13r
źródło
1
Czy możemy założyć maksymalną wartość dla N?
JAD
Związane z.
spaghetto

Odpowiedzi:

4

Galaretka , 4 bajty

ØBṗX

Wypróbuj online!

Wyjaśnienie

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

Moc kartezjańska generuje w zasadzie całą listę o danej długości, którą można uformować z danego zestawu elementów; właśnie tego tutaj potrzebujemy.


źródło
Jeśli w grę wchodzą znaki UTF-8, czy naprawdę mogą to być tylko 4 bajty? Jedna postać UTF-8 może być więcej niż jednym bajtem ...
m13r
@ m13r Jelly używa własnej strony kodowej, na której wszystkie są jednobajtowymi znakami
FlipTack
13

Taxi , 2577 bajtów

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]

Wypróbuj online!

Taxi jest bardzo nie w tej sprawie, ale może to zrobić! Spróbuję wyjaśnić, co dzieje się poniżej wersji bez gry w golfa.

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]

Start: Zdobądź standardowe wejście
Podnieś standardowe wejście jako tekst, przekonwertuj je na liczbę i idź gdzieś, żeby poczekać.

Zaplanuj część 1:
zdobądź losową liczbę całkowitą 1-62 Zdobądź losową liczbę całkowitą, a następnie uzyskaj 62liczbę. Zduplikuj zarówno losową liczbę całkowitą, jak i 62ponieważ będziemy jej później potrzebować. Można go nosić tylko 3 pasażerów na raz więc skończyć z rand, rand, i 62. (Drugi 62będzie czekać, aż wrócimy.) Przejdź randprzez 62i obetnij wynik, aby uzyskać liczbę całkowitą. Wróć, aby pobrać drugą kopię 62i pomnóż ją przez obciętą liczbę całkowitą z podziału. Na koniec odejmij produkt od pierwszej kopii rand. To daje nam liczbę 0-61. Teraz musimy wrócić do odbioru a 1i dodać go do wyniku, aby uzyskać liczbę 1-62. Tak, wszystkie te wiersze tekstu są po prostu mod(rand(),62)+1.

Zaplanuj część 2: utwórz tablicę znaków, z której wybierzesz
Odbierz ciąg ze wszystkimi prawidłowymi znakami, a także jeden na końcu, którego nie chcemy (więcej o tym później). 63Wybraliśmy wcześniejsze mecze to długość łańcucha. Przenieś go do Chop Suey, aby rozbił go na poszczególnych pasażerów.

Plan B: Przesuń tablicę, abyśmy mogli wybrać postać
jeden po drugim, przenieś każdą postać do parku wąskiej ścieżki. To jedyny dostępny stos i jedyny sposób, aby nie dopuścić do sytuacji, w której pasażerowie pozostali. Cała reszta w Townsburgu to FIFO, więc musiałbym wracać i oczyszczać wszystkich pasażerów przy każdej iteracji ogólnej pętli. W ten sposób mogę po prostu zostawić je w parku, a za każdym razem 63 nowe postacie zostaną zepchnięte z drogi. Pierwszy Aprawdopodobnie nigdy nie ucieknie .

Plan C: Przygotuj się do wyboru postaci
To naprawdę tylko kilka przystanków, które nie musiały znajdować się w planie D. Zmień położenie taksówki w przygotowaniu.

Plan D: Zbierz wszystkie znaki, których nie chcemy.
Rozpoczynając od pierwszego znaku w odwróconej „tablicy” (jest to 63 znak, którego nie chcemy), zbieraj i konkatenuj znaki, odliczając od wyniku modfunkcji w planie A. Gdy osiągniesz zero, następną postacią jest ta, którą chcesz.

Plan E: Utop te, których nie chcesz i zwróć wybranemu.
„Pasażerowie [P] wysadzeni na Riverview Bridge wydają się zawsze spadać za burtę i do rzeki…” Cóż, to pozbywa się tego połączonego szeregu przegranych. Idź podnieś następną postać i wyślij ją na standardowe wyjście. Na koniec sprawdźmy, ile znaków wydrukowaliśmy do tej pory. Wróć do Sunny Skies, aby podnieść wartość standardu, którą zostawiliśmy tak dawno temu. Odejmij jeden, a jeśli wynik jest większy niż zero, odeślij go z powrotem, aby poczekał i zacznij od nowa w planie A.

Inżynier Toast
źródło
Czy to kompletny język Turinga? Nigdy o tym nie słyszałem? Jeśli tak, to może to być najdłuższa odpowiedź na golfa w historii!
maple_shaft
4
@maple_shaft Taxi to dobra zabawa, ale mogę zagwarantować, że nie jest to najdłuższa odpowiedź na pytanie w golfa. Istnieje kilka Unarnych odpowiedzi, które poważnie ją przebijają.
Inżynier Toast
1
@maple_shaft Zrobiłem trochę kopania. Największą odpowiedzią, jaką mogę znaleźć na PPCG, jest oryginalna wersja tej odpowiedzi od @ Dennis ♦ (oczywiście, że Dennis ♦), ale pochodzi od code-bowlingi została poprawiona. Najdłuższą code-golfodpowiedzią, jaką mogłem znaleźć, jest oryginalne przesłanie Brain-Flak dotyczące podstawowego wyzwania quine. Pochodzi z 9,5 * 10 ^ 580 bajtów. Najdłuższą aktualną odpowiedzią, jaką znalazłem, był główny tester w Unary : 1,65 * 10 ^ 56 bajtów.
Inżynier Toast
7

C (gcc) , 57 55 52 bajtów

Dzięki 2501 za wskazówki ...

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

Wypróbuj online!

cleblanc
źródło
rand()%74powinno byćrand()%75
2501
@ 2501 dobre połączenie.
cleblanc
1
Możesz dodatkowo zmniejszyć rozmiar, używając &&putchar(i)zamiast operatora trójskładnikowego.
2501
Miły! to jest świetne, dziękuję.
cleblanc
6

Galaretka , 5 bajtów

Pominięto lewę - patrz 4 bajt ais523

ØBX$€

Wypróbuj online!

W jaki sposób?

Ø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
źródło
Nie uważałbym, że znak UTF-8 ma długość jednego bajta oO?
m13r
@ m13r Galaretka ma własną stronę kodową - kliknij bajty w nagłówku mojej odpowiedzi, aby ją zobaczyć.
Jonathan Allan
5

Shell + pwgen , 13 bajtów

pwgen -s $1 1

-s, --secure

Generuj całkowicie losowe, trudne do zapamiętania hasła.

Próbka wyjściowa

%pwgen -s 10 1
2cyhLovbfT
zepelin
źródło
5

Java 8, 183 149 97 88 bajtów

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

Wypróbuj online.

-9 bajtów przez przeniesienie odpowiedzi C na 2501 , więc pamiętaj, aby go również głosować!

Stara odpowiedź, 97 bajtów

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

Wypróbuj online.

Wyjaśnienie:

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
źródło
4

C, 60 bajtów

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

Zobacz, jak to działa tutaj .

Zobacz dystrybucję tutaj .

Jest równomiernie rozłożony, przy założeniu, że rand() % 62daje jednolity rozkład. Ponieważ 62 zwykle nie dzieli równomiernie RAND_MAX, istnieje bardzo małe odchylenie.

2501
źródło
4

Bałwan , 58 bajtów

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

Wypróbuj online!

Jest to podprogram, który przyjmuje na wejściu liczbę całkowitą i zwraca losowy ciąg.

((             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 +
Klamka
źródło
Powinno być: ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501
@ 2501 Ah, masz rację. Naprawiono, dziękuję.
Klamka
4

PowerShell, 58 54 bajtów

-4 dzięki Andrei Odegovowi - rzutowanie na tablicę char zamiast zapętlania w celu utworzenia tablicy char.

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

generuje zakres 1..2+4..5 = 1,2,4,5wszystkich dopuszczalnych kodów charachtera, a następnie $argslosowo wybiera liczbę elementów random -Count- powstałe elementy są zapętlone |%{}i zamieniane w [char]s, są rzutowane na tablicę znaków za pomocą [char[]]- następnie całość jest umieszczana w nawiasach i -joinedytowana razem.

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

Nie działa dla wejścia 0, ponieważ Get-Randomakceptuje tylko liczby powyżej 1 dla -Countparametru.

colsw
źródło
Możesz rzutować uzyskaną tablicę bajtów jako pojedynczą całość na tablicę znaków. Pomoże to zaoszczędzić 4 bajty:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov
3

PHP, 56 bajtów

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

Wersja online

ctype_alnum

Jörg Hülsermann
źródło
2

05AB1E , 6 bajtów

FžK.RJ

Wypróbuj online!

Wyjaśnienie

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

Perl 5 , 41 bajtów

40 bajtów kodu + -pflaga.

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

Wypróbuj online!

(a..z,A..Z,0..9)tworzy tablicę zawierającą wszystkie litery i cyfry, [rand 62]zwraca losowy element tej tablicy, który jest append ( .=) $\, który jest domyślnie drukowany na końcu dzięki -pznacznikowi z }{.


Lub, dla tego samego bajtu, ale używając parametrów zamiast standardowego wejścia:

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

Wypróbuj online!

Dada
źródło
2

R, 51 bajtów

Ta sama długość co druga odpowiedź R, ale inne podejście.

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

lettersi LETTERSoba są wbudowanymi zmiennymi zawierającymi odpowiednio wszystkie małe i wielkie litery. Dodając 0:9do tego, mamy cały zestaw znaków alfanumerycznych.

JAD
źródło
2

R, 54 52 51 49 bajtów

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

Wyjaśnienie:

  1. Przeczytaj wejściową liczbę całkowitą n :scan()
  2. Wektor z wartościami ASCII: c(65:90,97:122,48:57)
  3. Przykładowe n wartości ASCII z zamiennikiem:sample(c(65:90,97:122,48:57),scan(),T)
  4. Przekształć wartości ASCII w ciąg znaków za pomocą intToUtf8
Sven Hohenstein
źródło
Znalazłem inne podejście o tej samej długości.
JAD
@JarkoDubbeldam Dobry pomysł, pomogło mi to zaoszczędzić dwa bajty
Sven Hohenstein
Nie! dobra robota :)
JAD
2

JavaScript (ES6), 61 54 39 52 64 bajtów

To prawie jak golf zwrotny! Wziął duży hit w liczbie bajtów, zapewniając, że zostanie wykorzystany pełny zakres znaków ze wszystkich trzech grup.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 bajtów zapisanych (na jednym etapie) dzięki sugestii Arnaulda o użyciu funkcji rekurencyjnej.

Spróbuj

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>

Kudłaty
źródło
Zaktualizowałem go, aby uwzględnić wszystkie 3 grupy znaków, @Arnauld; Próbuję tylko znaleźć indeks, który może zawierać więcej niż 2 z nich. Dziękujemy za zasugerowanie opcji rekurencyjnej.
Kudłaty
Podoba mi się ten pomysł, ale myślę, że teraz generujesz [0-5w-z]wyłącznie postacie .
Arnauld
Sugerowałbym btoa(String.fromCharCode(Math.random()*248))[0]równomierne objęcie całego zakresu.
Arnauld
Właśnie to zauważyłem, @Arnauld. Wygląda na to, że będę musiał połączyć obie metody (przekonwertować, toStringa następnie zakodować), aby zagwarantować pełny zakres znaków ze wszystkich 3 grup.
Kudłaty
To lepsze, ale wciąż niekompletne: 014589ABEFIJMNQRUVYZcdghklopstwx(i nie jednolite).
Arnauld
2

Alice , 24 bajty

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

Wypróbuj online!

Ten układ jest już znacznie lepszy niż pierwotnie miałem (32 bajty), ale jestem pewien, że nie jest jeszcze optymalny ...

Wyjaśnienie

/      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
źródło
2

Python + exrex , 81 bajtów

import exrex,random
lambda n:random.choice(list(exrex.generate("[A-Za-z0-9]"*n)))
spaghetto
źródło
2

Python 2, 79 83 79 bajtów

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

+4 bajty (nie uwzględniono powtórzeń)

-4 bajty (Podziękowania dla @Rod za sugestię użycia printable[:62])

Wondercricket
źródło
1
Nie działa, musi zawierać powtórzenia. To może być ustalona przy użyciu (s.letters+s.digits)*xzamiasts.letters+s.digits
Rod
@Rod Naprawiono, dziękuję!
Wondercricket
Można również użyć `r.sample(...)`[2::5]zamiast ''.join(r.sample(...))zapisać bajt (tylko Pythona 2) i (s.letters+s.digits)*xmoże być włączony do s.printable[:62]*xzapisać 4 bajty
Rod
@Rod Dzięki za sugestie. Zaimplementowałem printable, nie mogłem dostać się [2::5]do pracy (może robiłem to źle?)
Wondercricket
musisz otoczyć listę r.sample()backtickami `` trochę informacji na ten temat
Rod
1

Brachylog , 14 bajtów

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

Wypróbuj online!

Wyjaśnienie

~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
Fatalizować
źródło
1

MATL , 8 bajtów

8Y2iT&Zr

Wypróbuj online!

8Y2      % Push string '012...89ABC...YZabc...yz'
i        % Input N
T&Zr     % Sample with replacement. Implicitly display
Luis Mendo
źródło
1

Partia, 175 bajtów

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

sspełnia tutaj podwójną funkcję, ponieważ zawiera zarówno listę alfanumeryczną, jak i losowo wybrane znaki. Po wydrukowaniu wyniku kod przechodzi do podprogramu, którego wynik jest ignorowany.

Neil
źródło
1

Pyke , 4 bajty

~JfH

Wypróbuj online!

~J   -   "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  f  -  cominbations(^, length=input)
   H - random.choice(^)
niebieski
źródło
Wydaje się, że nie działa to dla żadnego wejścia większego niż 3 i nie jestem pewien, czy może wygenerować ten sam znak więcej niż raz.
ATaco
To nie działa dla danych wejściowych większych niż 3. Próbowałem już tutaj: pyke.catbus.co.uk
m13r
Wymaga to około 1 GB pamięci RAM, aby utworzyć ciąg 4 znaków alfanumerycznych ... Nie udało się go uruchomić dla wejścia o wartości 10. Program MemoryError
zawiesił się
1

Pyth, 7 11 bajtów

O^s++rG1GUT

Wypróbuj online

Wyjaśnienie

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.

źródło
Obejmuje to tylko małe litery i cyfry, a nie wielkie litery
niebieski
@muddyfish Good catch. Naprawiony.
1

C # - 121 bajtów

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

APL (Dyalog) z AGL , 17 bajtów

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

Wypróbuj online!

(... )[... ] wskaźnik do

⎕A,∆a,⎕D wielkie litery, następnie małe litery, a następnie cyfry

za pomocą

62 (liczba możliwych symboli

przekształcony przez

 oceniane wejście ( n )

? zmień każde 62 na liczbę losową z zakresu 1… 62

APL (APLX) , 17 bajtów

(⎕A,⎕a,⎕D)[?⎕⍴62]
Adám
źródło
1

Pip , 13 bajtów

LaORCz.AZ.J,t

Wypróbuj online!

Wyjaśnienie

               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
źródło
1

Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 63 tokenizowane bajty BASIC

 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

W ZX81 nie ma małych liter bez użycia asemblera lub jakiejś pamięci ROM UDG lub czegoś takiego, a na razie tylko wyjściowy A-Z. Jeśli zostanie wprowadzone zero, program zatrzyma się i powróci do trybu bezpośredniego.

Shaun Bebbers
źródło
0

Skumulowane , 33 bajty

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

Wypróbuj online! Pobiera dane wejściowe z góry stosu i pozostawia dane wyjściowe na górze stosu.

:>[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
źródło