Générer des chaînes aléatoiresJ'ai écrit ce code pour générer une chaîne aléatoire.Je me demandais s'il existait des moyens meilleurs ou alternatifs de le faire sans boucle for.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
randstr="";
for(ii=1, ii<=randstrlength, ii++,
randstr=randstr || letters[Random Integer(26)];
);
randstr;Re : Générer des chaînes aléatoiresMerci de m'avoir permis d'utiliser votre exemple, @brady_brady ! Maintenant, cela sera partagé avec les utilisateurs, dans le produit. J'ai mis à jour la description et les exemples. Le vôtre sera un exemple intrigant et ludique à lire 

Re : Générer des chaînes aléatoiresOui, et pour illustrer cela, voici le résultat J( 10, 3...) est utilisé à la place de J ( 10, 1, ... ) dans l'exemple que j'ai donné plus tôt (note : je n'ai pas montré tout le journal... les 20 premières lignes d'impression ne sont pas affichées. Veuillez également ignorer les abus littéraires comme "21e", "22e", etc.)

Re : Générer des chaînes aléatoiresSalut tout le monde,
Deux choses rapides à ajouter.
1) Si vous n'aimez pas la grande affectation de longue liste (moi non plus), vous pouvez le faire pour obtenir votre jeu de caractères :
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
Je fais ça tout le temps, par pure paresse. Si vous avez besoin de chaînes à plusieurs caractères, utilisez simplement un délimiteur

2) Techniquement, J FAIT en fait une boucle... rapidement. Il renvoie une matrice, mais peut faire ce que vous voulez à l'intérieur de la boucle. Ci-dessous, un démenti nixonien est imprimé à chaque fois dans la boucle, et une matrice de nombres de Fibonacci est renvoyée. Notez que i, l'indice, est initialisé à l'extérieur et incrémenté à l'intérieur de la boucle.
i = 1;
J( 10, 1,
print(evalinsert("For the ^i^^if(i < 4, words(\!"st,nd,rd\!",\!",\!")[i], \!"th\!")^ time, I'm not a loop!"));
round(1/sqrt(5)*((1+sqrt(5))/2)^i++)
);

Re : Générer des chaînes aléatoiresJe pense que la fonction J() est sous-estimée. Il évalue son troisième argument pour chaque élément dans un ordre ligne par ligne. Il y a tellement de choses que l'on peut faire avec sans boucler explicitement dans JSL. Merci d'avoir amélioré le guide de script avec des exemples plus complets.
Re : Générer des chaînes aléatoires@SamGardner @Mark_Bailey c'est vraiment un sujet important. La génération d'un vecteur de nombres aléatoires est importante en calcul statistique.
J'ai apporté des modifications dans JMP18 OSI, de sorte que les exemples de ligne unique existants ressemblent à ceci

maintenant devenir quelque chose comme ça:

Re : Générer des chaînes aléatoiresJe sais que le but était d'éviter les boucles, mais la longue ligne de code qui contenait toutes les lettres me dérangeait. Voici un moyen d'utiliser la table ascii pour générer les caractères aléatoires. Cela n'a pas fonctionné avec la commande J(), car cela attend des nombres. Peut-être que quelqu'un peut faire fonctionner cela sans avoir à utiliser une boucle.
randstrlength = 100;
lstchars = {};
for each ({i}, 1::randstrlength,
lstchars[i]= hex to char (right(Hex(64+Random integer (26), "integer"),2));
);
randstr = concat items (lstchars, "");
Re : Générer des chaînes aléatoiresMerci!Voici, approche beaucoup plus simple:
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( concat items(letters[J( length, 1, Random Integer( 1, length ) ) ], "") );
);
Show( randomString( 10 ) );Re : Générer des chaînes aléatoires@SamGardner "concat items" a un deuxième argument, que vous pouvez utiliser directement et éviter un substitut pour être plus efficace.
Re : Générer des chaînes aléatoiresbasé sur @Mark_Bailey et @peng_liu contributions, cela semble bien fonctionner
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( substitute(concat items(letters[J( length, 1, Random Integer( 1, length ) ) ]), " ", "") );
);
Show( randomString( 10 ) );
a dû utiliser la commande de substitution pour se débarrasser des espaces entre les caractères.
Re : Générer des chaînes aléatoiresNames Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( letters[J( length, 1, Random Integer( 1, length ) ) ] );
);
Show( randomString( 10 ) );Re : Générer des chaînes aléatoiresnames default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength, Random Integer(26));
randstr=concat items(letters[idx], "");
Hooyah ! La magie! 
Re : Générer des chaînes aléatoiresJe ne peux pas penser à la façon de le faire sans une boucle. Random Integer ne renvoie pas de vecteur aléatoire. Random Index renvoie un vecteur, mais pas de doublons.
Je ne peux que penser à être plus efficace. La concaténation de chaînes dans une boucle n'est pas efficace. La suite devrait s'améliorer un peu.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength);
for(ii=1, ii<=randstrlength, ii++,
idx[ii] = Random Integer(26);
);
randstr=concat items(letters[idx], "");
Je m'interroge également sur l'existence d'une solution sans boucle 