Generazione di una stringa alfanumerica casuale di lunghezza N


30

Qual è il modo più breve di generare una stringa casuale con una data lunghezza e con solo caratteri alfanumerici consentiti?

  • esempio di una stringa casuale: con N = 9 l'uscita sarebbe aZua7I0Lk
  • si può presumere che la lunghezza data N sia sempre maggiore di 0
  • se necessario puoi assumere 256 come valore massimo per N, ma sono preferite soluzioni con limiti più alti per N e che hanno ancora un tempo di calcolo veloce
  • caratteri consentiti: 0-9, az e AZ
  • un carattere può apparire più di una volta nella stringa di output
  • ogni possibile stringa dovrebbe essere ugualmente probabile (per la precisione del generatore di numeri casuali della tua lingua)

1
Possiamo assumere un valore massimo per N?
JAD

Risposte:


4

Gelatina , 4 byte

ØBṗX

Provalo online!

Spiegazione

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

Il potere cartesiano genera fondamentalmente tutta la lista di una data lunghezza che può essere formata da un determinato insieme di elementi; questo è esattamente ciò di cui abbiamo bisogno qui.


Se ci sono personaggi UTF-8 coinvolti, potrebbero essere solo 4 byte? Un carattere UTF-8 potrebbe essere più di un solo byte ...
m13r

@ m13r Jelly utilizza una propria tabella codici in cui sono presenti tutti i caratteri a byte singolo
FlipTack,

13

Taxi , 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]

Provalo online!

Taxi è eccellente , non fatta per questo, ma si può fare! Proverò a spiegare cosa sta succedendo sotto la versione senza 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]

Inizio: Ottieni lo stdin
Raccogli il valore dello stdin come testo, convertilo in un numero e mettilo da qualche parte in attesa.

Pianifica una parte 1: ottieni un numero intero casuale 1-62
Ottieni un numero intero casuale e quindi ottieni 62un numero. Duplica sia il numero intero casuale che il 62perché ne avremo bisogno in seguito. Si può portare solo 3 passeggeri al tempo stesso così finiamo con rand, rande 62. (L'altro 62attenderà fino al nostro ritorno.) Vai a dividere randper 62e troncare il risultato per ottenere un numero intero. Torna indietro per ottenere l'altra copia 62e moltiplicarla per il numero intero troncato dalla divisione. Infine, sottrarre il prodotto dalla prima copia di rand. Questo ci dà un numero 0-61. Ora dobbiamo tornare al pickup a 1e aggiungerlo al risultato per ottenere un numero 1-62. Sì, tutte quelle tante righe di testo sono giuste mod(rand(),62)+1.

Pianifica una parte 2: crea un array di caratteri da cui scegliere
Raccogli una stringa con tutti i caratteri validi e anche uno alla fine che non vogliamo (ne parleremo più avanti). Il 63raccolto precedente corrisponde a questa lunghezza della stringa. Portalo a Chop Suey per farlo rompere in singoli passeggeri.

Piano B: sposta l'array in modo che possiamo selezionare un personaggio
Uno alla volta, sposta tutti i personaggi su Narrow Path Park. È l'unico stack disponibile e l'unico modo per non intralciare i passeggeri rimasti. Tutto il resto a Townsburg è FIFO, quindi dovrei tornare indietro e cancellare tutti i passeggeri ogni iterazione del ciclo generale. In questo modo, posso lasciarli al parco e ogni volta verranno allontanati dai 63 nuovi personaggi. AÈ probabile che il primo non scapperà mai .

Piano C: preparare la selezione di un personaggio
Questo è in realtà solo alcune fermate che non avevano bisogno di essere nel Piano D. Riposizionare il taxi in preparazione.

Piano D: Ottieni tutti i personaggi che non vogliamo
Partendo dal primo personaggio nella "matrice" inversa (questo è il 63 ° carattere che non vogliamo), continua a raccogliere e concatenare i personaggi mentre contiamo dal risultato della modfunzione nel piano A. Una volta colpito zero, il personaggio successivo è quello che desideri.

Piano E: annega quelli che non vuoi e restituisci quello scelto.
"[P] gli assalitori lasciati cadere al Ponte di Riverview sembrano sempre cadere sul lato e nel fiume ..." Bene, questo si sbarazza di quella serie di perdenti concatenati. Vai a prendere il personaggio successivo e inviarlo a stdout. Infine, controlliamo quanti caratteri abbiamo stampato finora. Torna a Sunny Skies per raccogliere il valore di stdin che abbiamo lasciato tanto tempo fa. Sottrai uno e, se il risultato è maggiore di zero, rispediscilo in attesa e ricomincia dal piano A.


È una lingua completa di Turing? Non ne ho mai sentito parlare? Se è così, allora questo può qualificarsi come la risposta golf più lunga del codice nella storia!
maple_shaft

4
@maple_shaft Il taxi è divertente ma posso garantire che questa non è la risposta più lunga al golf. Ci sono alcune risposte unarie che la vincono seriamente.
Ingegnere Toast,

1
@maple_shaft Ho fatto degli scavi. La risposta più grande che posso trovare su PPCG è la versione originale di questa risposta da @ Dennis ♦ (ovviamente è Dennis ♦) ma questa è di code-bowlinged è stata rivista. La code-golfrisposta più lunga che ho potuto trovare è l' invio originale di Brain-Flak sulla sfida di base di Quine. Arriva a 9.5 * 10 ^ 580 byte. La risposta corrente più lunga che ho trovato è stata un primo tester in Unary : 1,65 * 10 ^ 56 byte.
Ingegnere Toast,

7

C (gcc) , 57 55 52 byte

Grazie a 2501 per i puntatori ...

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

Provalo online!


rand()%74dovrebbe essererand()%75
2501,

@ 2501 buona chiamata.
Cleblanc,

1
È possibile ridurre ulteriormente le dimensioni utilizzando &&putchar(i)invece l'operatore ternario.
2501

Bello! fantastico, grazie.
Cleblanc,

6

Gelatina , 5 byte

Perso un trucco - vedi il 4 byter di ais523

ØBX$€

Provalo online!

Come?

Ø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

Non considererei un carattere UTF-8 con una lunghezza di un byte oO?
m13r

@ m13r Jelly ha una sua tabella codici - fai clic su byte nell'intestazione della mia risposta per vederlo.
Jonathan Allan,

5

Shell + pwgen , 13 byte

pwgen -s $1 1

-s, --secure

Genera password completamente casuali e difficili da memorizzare.

Uscita campione

%pwgen -s 10 1
2cyhLovbfT

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

Provalo online.

-9 byte eseguendo il porting della risposta C di @ 2501 , quindi assicurati di votare anche lui!

Vecchia risposta, 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;}

Provalo online.

Spiegazione:

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 byte

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

Guarda che funziona qui .

Vedi la distribuzione qui .

È distribuito uniformemente, supponendo che rand() % 62produca una distribuzione uniforme. Dal momento che 62 di solito non divide uniformemente RAND_MAX, c'è un pregiudizio molto piccolo.


4

Pupazzo di neve , 58 byte

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

Provalo online!

Questa è una subroutine che accetta un intero come input e restituisce la stringa casuale.

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

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

@ 2501 Ah, hai ragione. Risolto, grazie.
Maniglia della porta

4

PowerShell, 58 54 byte

-4 grazie ad Andrei Odegov - eseguire il casting su un array di caratteri invece di eseguire il loop per creare un array di caratteri.

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

genera un intervallo 1..2+4..5 = 1,2,4,5di tutti i codici caratteri accettabili, quindi seleziona il $argsnumero di elementi in modo casuale usando random -Count- gli elementi risultanti vengono fatti passare in loop |%{}e trasformati in [char]s, vengono espressi in una matrice di caratteri usando [char[]]- quindi il tutto viene incapsulato tra parentesi ed -joineditato insieme.

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

Non funziona per un input di 0 poiché Get-Randomaccetta solo numeri superiori a 1 per il -Countparametro.


È possibile eseguire il cast dell'array di byte ottenuti come un singolo intero in un array di caratteri. Ciò contribuirà a salvare 4 byte:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov



2

Perl 5 , 41 byte

40 byte di codice + -pflag.

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

Provalo online!

(a..z,A..Z,0..9)crea un array contenente tutte le lettere e i numeri, [rand 62]restituisce un elemento casuale di questo array, che è append ( .=) a $\, che viene implicitamente stampato alla fine grazie al -pflag con}{ .


Oppure, per lo stesso conteggio parziale, ma utilizzando i parametri anziché l'input standard:

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

Provalo online!


2

R, 51 byte

Stessa lunghezza dell'altra risposta R, ma un approccio diverso.

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

lettersed LETTERSentrambi sono variabili incorporate contenenti rispettivamente tutte le lettere maiuscole e minuscole. Aggiungendo 0:9a questo e abbiamo l'intero set di caratteri alfanumerici.


2

R, 54 52 51 49 byte

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

Spiegazione:

  1. Lettura intero di input n :scan()
  2. Vettore con valori ASCII: c(65:90,97:122,48:57)
  3. Esempi di n valori ASCII con sostituzione:sample(c(65:90,97:122,48:57),scan(),T)
  4. Trasforma i valori ASCII in una stringa di caratteri con intToUtf8

Ho trovato un altro approccio con la stessa lunghezza.
JAD

@JarkoDubbeldam Buona idea, questo mi ha aiutato a salvare due byte
Sven Hohenstein,

D'oh! bel lavoro :)
JAD

2

JavaScript (ES6), 61 54 39 52 64 byte

Questo è quasi come il golf inverso! Ha avuto un grande successo sul conteggio dei byte assicurando che sarebbe stata utilizzata l'intera gamma di caratteri di tutti e tre i gruppi.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 byte salvati (in una fase) grazie al suggerimento di Arnauld di utilizzare una funzione ricorsiva.

Provalo

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>


L'ho aggiornato in modo da includere tutti e 3 i gruppi di caratteri, @Arnauld; Sto solo cercando di trovare un indice che può contenere più di 2 di essi. Grazie per aver suggerito l'opzione ricorsiva.
Shaggy,

Mi piace l'idea, ma penso che ora stai generando personaggi [0-5w-z]esclusivamente.
Arnauld,

Suggerirei btoa(String.fromCharCode(Math.random()*248))[0]di coprire l'intera gamma in modo uniforme.
Arnauld,

Ho appena notato che io stesso, @Arnauld. Sembra che dovrò combinare entrambi i metodi (convertire toStringe quindi codificare) per garantire che sia possibile restituire una gamma completa di caratteri di tutti e 3 i gruppi.
Shaggy,

È meglio ma ancora incompleto: 014589ABEFIJMNQRUVYZcdghklopstwx(e non uniforme).
Arnauld,

2

Alice , 24 byte

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

Provalo online!

Questo layout è già molto meglio di quello che avevo originariamente (32 byte), ma sono sicuro che non è ancora ottimale ...

Spiegazione

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

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

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 (non ha tenuto conto della ripetizione)

-4 byte (Grazie a @Rod per il suggerimento per l'utilizzo printable[:62])


1
Non funziona, deve contenere ripetizioni. Può essere riparato usando (s.letters+s.digits)*xinveces.letters+s.digits
Rod

@Rod Risolto, grazie!
Wondercricket,

Puoi anche usare `r.sample(...)`[2::5]invece ''.join(r.sample(...))per salvare un byte (solo python 2) e (s.letters+s.digits)*xpuoi passare a s.printable[:62]*xper salvare 4 byte
Rod

@Rod Grazie per i suggerimenti. Ho implementato printable, non riuscivo a farlo [2::5]funzionare (forse stavo sbagliando?)
Wondercricket,

devi circondare la lista r.sample()di backtick `` alcune informazioni a riguardo
Rod

1

Brachylog , 14 byte

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

Provalo online!

Spiegazione

~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

Lotto, 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%%

ssvolge qui il doppio dovere in quanto contiene sia l'elenco alfanumerico che i caratteri selezionati casualmente. Dopo aver stampato il risultato, il codice passa alla subroutine il cui risultato viene ignorato.


1

Pyke , 4 byte

~JfH

Provalo online!

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

Questo non sembra funzionare per nessun input maggiore di 3 e non sono sicuro che possa generare lo stesso carattere più di una volta.
ATaco,

Questo non funziona per input superiori a 3. L'ho provato qui: pyke.catbus.co.uk
m13r,

Questo richiede circa 1 GB di RAM solo per creare una stringa di 4 caratteri alfanumerici ... Non è riuscito a farlo funzionare per un input di 10. Il programma si è bloccato con unMemoryError
m13r il

1

Pyth, 7 11 byte

O^s++rG1GUT

Provalo online

Spiegazione

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.

Ciò include solo l'alfabeto e i numeri minuscoli, non le lettere maiuscole
Blue

@muddyfish Buona cattura. Fisso.

1

C # - 121 byte

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

1

APL (Dyalog) con AGL , 17 byte

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

Provalo online!

(... )[... ] indicizza in

⎕A,∆a,⎕D alfabeto maiuscolo seguito da alfabeto minuscolo seguito da cifre

utilizzando

62 (il numero di simboli possibili

rimodellato da

 input valutato ( n )

? cambia ogni 62 in un numero casuale nell'intervallo 1 ... 62

APL (APLX) , 17 byte

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


1

Pip , 13 byte

LaORCz.AZ.J,t

Provalo online!

Spiegazione

               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 byte BASIC tokenizzati

 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

Non ci sono caratteri minuscoli in ZX81 senza usare assembly o avere una sorta di ROM UDG o qualcosa del genere, e per il momento, emette solo A-Z. Se si inserisce zero, il programma si arresta e torna alla modalità diretta.



0

Impilato , 33 byte

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

Provalo online! Prende input dalla parte superiore della pila e lascia l'output nella parte superiore della pila.

:>[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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.