Génération d'une chaîne alphanumérique aléatoire de longueur N


30

Quel est le moyen le plus court de générer une chaîne aléatoire avec une longueur donnée et avec seulement des caractères alphanumériques autorisés?

  • exemple d'une chaîne aléatoire: avec N = 9, la sortie serait aZua7I0Lk
  • on peut supposer que la longueur N donnée est toujours supérieure à 0
  • si nécessaire, vous pouvez supposer 256 comme valeur maximale pour N, mais des solutions avec des limites plus élevées pour N et ayant toujours un temps de calcul rapide sont préférées
  • caractères autorisés: 0-9, az et AZ
  • un caractère peut apparaître plusieurs fois dans la chaîne de sortie
  • chaque chaîne possible doit être également probable (à la précision du générateur de nombres aléatoires de votre langue)

1
Pouvons-nous supposer une valeur maximale pour N?
JAD

Réponses:


4

Gelée , 4 octets

ØBṗX

Essayez-le en ligne!

Explication

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

La puissance cartésienne génère essentiellement toute la liste d'une longueur donnée qui peut être formée à partir d'un ensemble donné d'éléments; c'est exactement ce dont nous avons besoin ici.


S'il y a des caractères UTF-8 impliqués, est-ce que cela ne peut être que 4 octets? Un caractère UTF-8 pourrait être plus qu'un octet ...
m13r

@ m13r Jelly utilise sa propre page de codes où ce sont tous des caractères à un octet
FlipTack

13

Taxi , 2577 octets

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]

Essayez-le en ligne!

Taxi est super pas fait pour cela , mais vous pouvez le faire! Je vais essayer d'expliquer ce qui se passe sous la version non-golfée.

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]

Démarrer: obtenir stdin Récupérez
la valeur stdin sous forme de texte, convertissez-la en nombre et placez-la quelque part pour attendre.

Plan A Partie 1: Obtenez un entier aléatoire 1-62
Obtenez un entier aléatoire, puis obtenez 62un nombre. Dupliquez à la fois l'entier aléatoire et le 62car nous en aurons besoin plus tard. Vous ne pouvez transporter 3 passagers à la fois si nous nous retrouvons avec rand, randet 62. (L'autre 62attendra jusqu'à ce que nous revenions.) Allez diviser randpar 62et tronquer le résultat pour obtenir un entier. Revenez en arrière pour obtenir l'autre copie de 62et multipliez-la par l'entier tronqué de la division. Enfin, soustrayez le produit de la première copie de rand. Cela nous donne un nombre 0-61. Maintenant, nous devons revenir à ramasser un 1et l'ajouter au résultat pour obtenir un numéro 1-62. Oui, toutes ces nombreuses lignes de texte sont justes mod(rand(),62)+1.

Plan A Partie 2: Créez un tableau de caractères parmi lesquels choisir
Pickup une chaîne avec tous les caractères valides et aussi un à la fin que nous ne voulons pas (plus à ce sujet plus tard). Le 63nous avons ramassé plus tôt correspond à cette longueur de chaîne. Apportez-le à Chop Suey pour qu'il soit divisé en passagers individuels.

Plan B: déplacez le tableau afin que nous puissions sélectionner un personnage
un par un, déplacez chaque personnage vers Narrow Path Park. C'est la seule pile disponible et la seule façon de ne pas avoir de passagers restants. Tout le reste à Townsburg est FIFO, donc je devrais revenir en arrière et effacer tous les passagers à chaque itération de la boucle globale. De cette façon, je peux simplement les laisser au parc et ils seront à chaque fois repoussés par les 63 nouveaux personnages. Le tout premier Ane risque jamais de s'échapper .

Plan C: Préparez-vous à sélectionner un personnage
Ce ne sont vraiment que quelques arrêts qui n'avaient pas besoin d'être dans le plan D. Remettez le taxi en préparation.

Plan D: Obtenez tous les caractères dont nous ne voulons pas
En commençant par le premier caractère du "tableau" inversé (c'est le 63e caractère que nous ne voulons pas), continuez à ramasser et à concaténer les caractères pendant le décompte du résultat de la modfonction dans le plan A. Une fois que vous avez atteint zéro, le caractère suivant est celui que vous voulez.

Plan E: Noyez ceux que vous ne voulez pas et retournez celui que vous avez choisi.
"Les assaillants [P] déposés à Riverview Bridge semblent toujours tomber sur le côté et dans la rivière ..." Eh bien, cela élimine cette chaîne de perdants concaténés. Allez chercher le personnage suivant et envoyez-le à stdout. Enfin, vérifions le nombre de caractères que nous avons imprimés jusqu'à présent. Revenons à Sunny Skies pour récupérer la valeur stdin que nous avons laissée il y a si longtemps. Soustrayez un et, si le résultat est supérieur à zéro, renvoyez-le pour attendre et recommencer au plan A.


Est-ce un langage complet de Turing? Je n'en ai jamais entendu parler? Si c'est le cas, cela peut être considéré comme la réponse de golf à code la plus longue de l'histoire!
maple_shaft

4
@maple_shaft Taxi est assez amusant, mais je peux vous garantir que ce n'est pas la réponse de golf la plus longue. Il y a des réponses Unary qui l'emportent sérieusement.
Ingénieur Toast

1
@maple_shaft J'ai fait des fouilles. La plus grande réponse que je puisse trouver sur PPCG est la version originale de cette réponse de @ Dennis ♦ (bien sûr, c'est Dennis ♦) mais elle vient de code-bowlinget a été révisée à la baisse. La code-golfréponse la plus longue que j'ai pu trouver est la soumission originale de Brain-Flak sur le défi de base de quine. Il vient à 9,5 * 10 ^ 580 octets. La réponse actuelle la plus longue que j'ai trouvée était un testeur principal en Unary : 1,65 * 10 ^ 56 octets.
Ingénieur Toast

7

C (gcc) , 57 55 52 octets

Merci à 2501 pour les pointeurs ...

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

Essayez-le en ligne!


rand()%74devrait êtrerand()%75
2501

@ 2501 bon appel.
cleblanc

1
Vous pouvez réduire davantage la taille en utilisant à la &&putchar(i)place de l'opérateur ternaire.
2501

Agréable! C'est génial merci.
cleblanc

6

Gelée , 5 octets

Manqué un tour - voir 4 octets de ais523

ØBX$€

Essayez-le en ligne!

Comment?

Ø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

Je ne considérerais pas un caractère UTF-8 comme ayant une longueur d'un octet oO?
m13r

@ m13r Jelly a sa propre page de codes - cliquez sur octets dans l'en-tête de ma réponse pour la voir.
Jonathan Allan

5

Shell + pwgen , 13 octets

pwgen -s $1 1

-s, --secure

Générez des mots de passe complètement aléatoires et difficiles à mémoriser.

Exemple de sortie

%pwgen -s 10 1
2cyhLovbfT

5

Java 8, 183 149 97 88 octets

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

Essayez-le en ligne.

-9 octets en portant la réponse C de @ 2501 , alors assurez-vous de lui aussi voter positivement!

Ancienne réponse, 97 octets

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

Essayez-le en ligne.

Explication:

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 octets

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

Voyez-le fonctionner ici .

Voir la distribution ici .

Il est uniformément distribué, en supposant qu'il rand() % 62produit une distribution uniforme. Étant donné que 62 ne divise généralement pas RAND_MAX également, il existe un très petit biais.


4

Bonhomme de neige , 58 octets

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

Essayez-le en ligne!

Il s'agit d'un sous-programme qui prend un entier en entrée et renvoie la chaîne aléatoire.

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

Il devrait être: ((}#`""*:48vn58nR|65vn91nR,aC|97vn123nR,aCAsH1AaL#aC*;bR)).
2501

@ 2501 Ah, tu as raison. Fixé, merci.
Poignée de porte

4

PowerShell, 58 54 octets

-4 grâce à Andrei Odegov - transtypage en tableau char au lieu de boucler pour créer un tableau char.

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

génère une plage 1..2+4..5 = 1,2,4,5de tous les codes de caractères acceptables, puis sélectionne le $argsnombre d'éléments de manière aléatoire en utilisant random -Count- les éléments résultants sont bouclés |%{}et transformés en [char]s, sont convertis en un tableau de caractères en utilisant [char[]]- puis le tout est encapsulé entre crochets et -joinédité ensemble.

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

Ne fonctionne pas pour une entrée de 0 car Get-Randomaccepte uniquement les nombres supérieurs à 1 pour le -Countparamètre.


Vous pouvez convertir le tableau d'octets obtenu en un seul ensemble dans un tableau de caractères. Cela vous aidera à économiser 4 octets:-join[char[]](65..90+97..122+48..57|random -C "$args")
Andrei Odegov



2

Perl 5 , 41 octets

40 octets de code + -pindicateur.

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

Essayez-le en ligne!

(a..z,A..Z,0..9)crée un tableau contenant toutes les lettres et tous les chiffres, [rand 62]retourne un élément aléatoire de ce tableau, qui est append ( .=) à $\, qui est implicitement imprimé à la fin grâce à -pflag with }{.


Ou, pour le même octet, mais en utilisant les paramètres plutôt que l'entrée standard:

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

Essayez-le en ligne!


2

R, 51 octets

Même longueur que l'autre réponse R, mais approche différente.

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

letterset les LETTERSdeux sont des variables intégrées contenant respectivement toutes les lettres minuscules et majuscules. Pour ajouter 0:9à cela, nous avons l'ensemble complet de caractères alphanumériques.


2

R, 54 52 51 49 octets

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

Explication:

  1. Lire l'entier d'entrée n :scan()
  2. Vecteur avec des valeurs ASCII: c(65:90,97:122,48:57)
  3. Exemple de n valeurs ASCII avec remplacement:sample(c(65:90,97:122,48:57),scan(),T)
  4. Transformez les valeurs ASCII en une chaîne de caractères avec intToUtf8

J'ai trouvé une autre approche avec la même longueur.
JAD

@JarkoDubbeldam Bonne idée, cela m'a aidé à économiser deux octets
Sven Hohenstein

Oh! beau travail :)
JAD

2

JavaScript (ES6), 61 54 39 52 64 octets

C'est presque comme le golf inversé! Pris un grand coup sur le nombre d'octets garantissant que la gamme complète de caractères des trois groupes serait utilisée.

f=n=>n--?btoa(String.fromCharCode(Math.random()*248))[0]+f(n):""
  • 15 octets économisés (à un stade) grâce à la suggestion d' Arnauld d'utiliser une fonction récursive.

Essayez-le

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>


Je l'ai mis à jour afin que les 3 groupes de caractères soient inclus, @Arnauld; J'essaie juste de trouver un index pouvant contenir plus de 2 d'entre eux. Merci d'avoir suggéré l'option récursive.
Shaggy

J'aime l'idée, mais je pense que vous générez maintenant des personnages [0-5w-z]exclusivement.
Arnauld

Je suggère btoa(String.fromCharCode(Math.random()*248))[0]de couvrir l'ensemble de la gamme de manière uniforme.
Arnauld

Je viens de le remarquer moi-même, @Arnauld. Il semble que je vais devoir combiner les deux méthodes (convertir toStringpuis encoder) afin de garantir qu'une gamme complète de caractères des 3 groupes puisse être retournée.
Shaggy

C'est mieux mais toujours incomplet: 014589ABEFIJMNQRUVYZcdghklopstwx(et pas uniforme).
Arnauld

2

Alice , 24 octets

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

Essayez-le en ligne!

Cette disposition est déjà bien meilleure que celle que j'avais à l'origine (32 octets), mais je suis sûr qu'elle n'est pas encore optimale ...

Explication

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

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

2

Python 2, 79 83 79 octets

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

+4 octets (ne tenait pas compte de la répétition)

-4 octets (Merci à @Rod pour la suggestion d'utilisation printable[:62])


1
Ne fonctionne pas, il doit contenir des répétitions. Il peut être corrigé à la (s.letters+s.digits)*xplaces.letters+s.digits
Rod

@Rod Fixed, merci!
Wondercricket

Vous pouvez également utiliser à la `r.sample(...)`[2::5]place ''.join(r.sample(...))pour enregistrer un octet (python 2 uniquement) et vous (s.letters+s.digits)*xpouvez basculer sur s.printable[:62]*xpour enregistrer 4 octets
Rod

@Rod Merci pour les suggestions. J'ai implémenté printable, je n'ai pas pu faire [2::5]fonctionner (peut-être que je me
trompais

vous devez entourer la liste r.sample()de backticks `` quelques informations à ce sujet
Rod

1

Brachylog , 14 octets

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

Essayez-le en ligne!

Explication

~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

Lot, 175 octets

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

sremplit une double fonction ici car il contient à la fois la liste alphanumérique et les caractères sélectionnés au hasard. Après avoir imprimé le résultat, le code passe au sous-programme dont le résultat est ignoré.


1

Pyke , 4 octets

~JfH

Essayez-le en ligne!

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

Cela ne semble pas fonctionner pour toute entrée supérieure à 3, et je ne suis pas sûr que cela puisse générer le même caractère plus d'une fois.
ATaco

Cela ne fonctionne pas pour les entrées supérieures à 3. Je l'ai essayé ici: pyke.catbus.co.uk
m13r

Cela nécessite environ 1 Go de RAM juste pour créer une chaîne de 4 caractères alphanumériques ... Je ne l'ai pas fait fonctionner pour une entrée de 10. Le programme s'est écrasé avec unMemoryError
m13r

1

Pyth, 7 11 octets

O^s++rG1GUT

Essayez-le en ligne

Explication

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.

Cela inclut uniquement l'alphabet et les chiffres en minuscules, pas les lettres majuscules
Blue

@muddyfish Bonne prise. Fixé.

1

C # - 121 octets

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

1

APL (Dyalog) avec AGL , 17 octets

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

Essayez-le en ligne!

(... )[... ] index dans

⎕A,∆a,⎕D alphabet majuscule suivi de l'alphabet minuscule suivi des chiffres

en utilisant

62 (le nombre de symboles possibles

remodelé par

 entrée évaluée ( n )

? changer chaque 62 en un nombre aléatoire compris entre 1 et 62

APL (APLX) , 17 octets

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


1

Pip , 13 octets

LaORCz.AZ.J,t

Essayez-le en ligne!

Explication

               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 octets BASIC tokenisés

 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

Il n'y a pas de caractères minuscules dans ZX81 sans utiliser d'assemblage ou avoir une sorte de ROM UDG ou quelque chose, et pour le moment, il ne sort que A-Z. Si zéro est entré, le programme s'arrête et revient en mode direct.



0

Empilé , 33 octets

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

Essayez-le en ligne! Prend l'entrée du haut de la pile et laisse la sortie en haut de la pile.

:>[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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.