Generando una cadena alfanumérica aleatoria de longitud N


30

¿Cuál es la forma más corta de generar una cadena aleatoria con una longitud dada y con solo caracteres alfanuméricos permitidos?

  • ejemplo de una cadena aleatoria: con N = 9 la salida sería aZua7I0Lk
  • se puede suponer que la longitud dada N siempre es mayor que 0
  • si es necesario, puede asumir 256 como un valor máximo para N, pero se prefieren las soluciones con límites más altos para N y que todavía tienen un tiempo de cálculo rápido
  • caracteres permitidos: 0-9, az y AZ
  • un carácter puede aparecer más de una vez en la cadena de salida
  • cada posible cadena debería ser igualmente probable (para la precisión del generador de números aleatorios de su idioma)

1
¿Podemos suponer un valor máximo para N?
JAD

Respuestas:


4

Jalea , 4 bytes

ØBṗX

Pruébalo en línea!

Explicación

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

El poder cartesiano básicamente genera toda la lista de una longitud dada que se puede formar a partir de un conjunto dado de elementos; eso es exactamente lo que necesitamos aquí.


Si hay caracteres UTF-8 involucrados, ¿podrían ser realmente solo 4 bytes? Un personaje UTF-8 podría ser más que un byte ...
m13r

@ m13r Jelly usa su propia página de códigos donde todos estos son caracteres de un solo byte
FlipTack

13

Taxi , 2577 bytes

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]

Pruébalo en línea!

El taxi es súper no se hizo para esto, pero usted puede hacerlo! Trataré de explicar lo que está sucediendo debajo de la versión sin 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]

Inicio: Obtener stdin
Seleccione el valor de stdin como texto, conviértalo en un número y péguelo en algún lugar para esperar.

Plan A Parte 1: Obtenga un número entero aleatorio 1-62
Obtenga un número entero aleatorio y luego obtenga 62un número. Duplique tanto el entero aleatorio como el 62porque los necesitaremos más adelante. Sólo se puede llevar a 3 pasajeros a la vez por lo que terminamos con rand, randy 62. (El otro 62esperará hasta que regresemos.) Ve a dividir randpor 62y trunca el resultado para obtener un número entero. Regrese para obtener la otra copia 62y multiplíquela por el entero truncado de la división. Finalmente, reste el producto de la primera copia de rand. Esto nos da un número 0-61. Ahora tenemos que volver a recoger a 1y agregarlo al resultado para obtener un número 1-62. Sí, todas esas líneas de texto son justas mod(rand(),62)+1.

Plan A Parte 2: Cree una matriz de caracteres entre los que elegir Elija
una cadena con todos los caracteres válidos y también uno al final que no queremos (más sobre eso más adelante). El 63que recogimos anteriormente coincide con esta longitud de cadena. Llévelo a Chop Suey para dividirlo en pasajeros individuales.

Plan B: Mueva la matriz para que podamos seleccionar un personaje
Uno por uno, mueva cada personaje al Parque Narrow Path. Es la única pila disponible y la única forma de no tener pasajeros sobrantes en el camino. Todo lo demás en Townsburg es FIFO, por lo que tendría que regresar y despejar a todos los pasajeros en cada iteración del circuito general. De esta manera, puedo dejarlos en el parque y los 63 nuevos personajes los apartarán del camino cada vez. AEs probable que el primero nunca escape .

Plan C: Prepárese para seleccionar un personaje.
Esto es realmente solo unas pocas paradas que no necesitaban estar en el Plan D. Reubique el taxi en preparación.

Plan D: Obtenga todos los caracteres que no deseamos
Comenzando con el primer carácter en la "matriz" invertida (este es el 63º carácter que no queremos), continúe recogiendo y concatenando caracteres a medida que hacemos la cuenta regresiva del resultado de la modfunción en el Plan A. Una vez que llegue a cero, el siguiente personaje es el que desea.

Plan E: Ahogar a los que no quieres y devolver el elegido.
"[P] los pasajeros que cayeron en el puente Riverview parecen caer siempre por el costado y caer al río ..." Bueno, eso elimina esa cadena de perdedores concatenados. Ve a buscar el siguiente personaje y envíalo a stdout. Finalmente, verifiquemos cuántos caracteres hemos impreso hasta ahora. Volvamos a Sunny Skies para recoger el valor estándar que dejamos hace tanto tiempo. Reste uno y, si el resultado es más de cero, envíelo de nuevo a esperar y comience nuevamente en el Plan A.


¿Es este un lenguaje completo de Turing? ¿Nunca escuché sobre eso? Si es así, entonces esto puede calificar como la respuesta de código de golf más larga de la historia.
maple_shaft

44
@maple_shaft Taxi es divertido, pero puedo garantizar que esta no es la respuesta de código de golf más larga. Hay algunas respuestas unarias que lo superan seriamente.
Engineer Toast

1
@maple_shaft Hice algunas excavaciones. La respuesta más grande que puedo encontrar en PPCG es la versión original de esta respuesta de @ Dennis ♦ (por supuesto, es Dennis ♦) pero es de code-bowlingy fue revisada a la baja. La code-golfrespuesta más larga que pude encontrar es la presentación original de Brain-Flak sobre el desafío básico de quine. Viene en 9.5 * 10 ^ 580 bytes. La respuesta actual más larga que encontré fue un probador principal en Unary : 1.65 * 10 ^ 56 bytes.
Engineer Toast

7

C (gcc) , 57 55 52 bytes

Gracias a 2501 por los punteros ...

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

Pruébalo en línea!


rand()%74debería serrand()%75
2501

@ 2501 buena llamada.
cleblanc

1
Puede reducir aún más el tamaño utilizando en &&putchar(i)lugar del operador ternario.
2501

¡Agradable! eso es genial gracias.
cleblanc

6

Jalea , 5 bytes

Se perdió un truco: vea el byter de ais523

ØBX$€

Pruébalo en línea!

¿Cómo?

Ø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

¿No consideraría que un carácter UTF-8 tiene una longitud de un byte oO?
m13r

@ m13r Jelly tiene su propia página de códigos: haga clic en bytes en el encabezado de mi respuesta para verla.
Jonathan Allan

5

Shell + pwgen , 13 bytes

pwgen -s $1 1

-s, --secure

Genere contraseñas completamente aleatorias y difíciles de memorizar.

Salida de muestra

%pwgen -s 10 1
2cyhLovbfT

5

Java 8, 183 149 97 88 bytes

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

Pruébalo en línea.

-9 bytes portando la respuesta C de @ 2501 , ¡así que asegúrese de votarlo también!

Respuesta anterior, 97 bytes

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

Pruébalo en línea.

Explicación:

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 bytes

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

Véalo funcionar aquí .

Vea la distribución aquí .

Se distribuye uniformemente, suponiendo que rand() % 62produce una distribución uniforme. Como 62 generalmente no divide equitativamente RAND_MAX, hay un sesgo muy pequeño.


4

Muñeco de nieve , 58 bytes

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

Pruébalo en línea!

Esta es una subrutina que toma un entero como entrada y devuelve la cadena aleatoria.

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

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

@ 2501 Ah, tienes razón. Fijo, gracias.
Pomo de la puerta

4

PowerShell, 58 54 bytes

-4 gracias a Andrei Odegov: envío a una matriz de caracteres en lugar de bucle para crear una matriz de caracteres.

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

genera un rango 1..2+4..5 = 1,2,4,5de todos los códigos de caracteres aceptables, luego selecciona el $argsnúmero de elementos al azar usando random -Count- los elementos resultantes se enlazan |%{}y se convierten en [char]s, se convierten en una variedad de caracteres usando [char[]]- luego todo se encapsula entre paréntesis y se -joinjuntan.

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

No funciona para una entrada de 0, ya que Get-Randomsolo acepta números superiores a 1 para el -Countparámetro.


Puede convertir la matriz de bytes obtenida como un todo único en una matriz de caracteres. Esto ayudará a ahorrar 4 bytes:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov



2

Perl 5 , 41 bytes

40 bytes de código + -pbandera.

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

Pruébalo en línea!

(a..z,A..Z,0..9)crea una matriz que contiene todas las letras y números, [rand 62]devuelve un elemento aleatorio de esta matriz, que es append ( .=) $\, que se imprime implícitamente al final gracias a la -pmarca con }{.


O, para el mismo bytecount, pero usando los parámetros en lugar de la entrada estándar:

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

Pruébalo en línea!


2

R, 51 bytes

Misma longitud que la otra respuesta R, pero un enfoque diferente.

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

lettersy LETTERSambas son variables integradas que contienen todas las letras mayúsculas y minúsculas, respectivamente. Además 0:9de eso, tenemos todo el conjunto de caracteres alfanuméricos.


2

R, 54 52 51 49 bytes

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

Explicación:

  1. Leer entero de entrada n :scan()
  2. Vector con valores ASCII: c(65:90,97:122,48:57)
  3. Muestra n valores ASCII con reemplazo:sample(c(65:90,97:122,48:57),scan(),T)
  4. Transforme los valores ASCII en una cadena de caracteres con intToUtf8

Encontré otro enfoque con la misma longitud.
JAD

@JarkoDubbeldam Buena idea, esto me ayudó a ahorrar dos bytes
Sven Hohenstein

D'oh! buen trabajo :)
JAD

2

JavaScript (ES6), 61 54 39 52 64 bytes

¡Esto es casi como el golf inverso! Tuvo un gran éxito en el conteo de bytes asegurando que se usaría la gama completa de personajes de los tres grupos.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 bytes guardados (en una etapa) gracias a la sugerencia de Arnauld de usar una función recursiva.

Intentalo

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>


Lo actualicé para que se incluyan los 3 grupos de caracteres, @Arnauld; Solo estoy tratando de encontrar un índice que pueda contener más de 2 de ellos. Gracias por sugerir la opción recursiva.
Shaggy

Me gusta la idea, pero creo que ahora estás generando personajes [0-5w-z]exclusivamente.
Arnauld

Sugeriría btoa(String.fromCharCode(Math.random()*248))[0]cubrir todo el rango de manera uniforme.
Arnauld

Acabo de notar que yo mismo, @Arnauld. Parece que tendré que combinar ambos métodos (convertir toStringy luego codificar) para garantizar que se pueda devolver una gama completa de caracteres de los 3 grupos.
Shaggy

Eso es mejor pero aún incompleto: 014589ABEFIJMNQRUVYZcdghklopstwx(y no uniforme).
Arnauld

2

Alice , 24 bytes

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

Pruébalo en línea!

Este diseño ya es mucho mejor que el que tenía originalmente (32 bytes), pero estoy seguro de que aún no es óptimo ...

Explicación

/      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 (no tuvo en cuenta la repetición)

-4 bytes (Gracias a @Rod por la sugerencia de uso printable[:62])


1
No funciona, debe contener repeticiones. Se puede arreglar usando en su (s.letters+s.digits)*xlugars.letters+s.digits
Rod

@Rod Fixed, ¡gracias!
Wondercricket

También puede usar `r.sample(...)`[2::5]en su lugar ''.join(r.sample(...))para guardar un byte (solo python 2) y (s.letters+s.digits)*xpuede cambiarlo s.printable[:62]*xpara guardar 4 bytes
Rod

@ Rod Gracias por las sugerencias. Implementé printable, no pude hacer [2::5]que funcionara (¿tal vez lo estaba haciendo mal?)
Wondercricket

necesitas rodear la lista r.sample()con `` información de fondo
Rod

1

Brachylog , 14 bytes

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

Pruébalo en línea!

Explicación

~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

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

srealiza doble tarea aquí ya que contiene tanto la lista alfanumérica como los caracteres seleccionados al azar. Después de imprimir el resultado, el código pasa a la subrutina cuyo resultado se ignora.


1

Pyke , 4 bytes

~JfH

Pruébalo en línea!

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

Esto no parece funcionar para ninguna entrada mayor que 3, y no estoy seguro de que pueda generar el mismo carácter más de una vez.
ATaco

Esto no funciona para entradas mayores que 3. Lo he intentado aquí: pyke.catbus.co.uk
m13r

Esto necesita aproximadamente 1 GB de RAM solo para crear una cadena de 4 caracteres alfanuméricos ... No funcionó para una entrada de 10. El programa se bloqueó con unMemoryError
m13r

1

Pyth, 7 11 bytes

O^s++rG1GUT

Pruébalo en línea

Explicación

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.

Esto solo incluye el alfabeto en minúscula y los números, no las letras mayúsculas
Azul

@muddyfish Buena captura. Fijo.

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) con AGL , 17 bytes

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

Pruébalo en línea!

(... )[...]  indice en

⎕A,∆a,⎕D alfabeto en mayúscula seguido de alfabeto en minúscula seguido de dígitos

utilizando

62 (el número de símbolos posibles

remodelado por

 entrada evaluada ( n )

? cambie cada 62 en un número aleatorio en el rango 1 ... 62

APL (APLX) , 17 bytes

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


1

Pip , 13 bytes

LaORCz.AZ.J,t

Pruébalo en línea!

Explicación

               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 bytes BASIC tokenizados

 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

No hay caracteres en minúscula en ZX81 sin usar el ensamblado o tener algún tipo de ROM UDG o algo así, y por el momento, solo sale A-Z. Si se ingresa cero, el programa se detiene y vuelve al modo directo.



0

Apilado , 33 bytes

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

Pruébalo en línea! Toma información desde la parte superior de la pila y deja la salida en la parte superior de la 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.