Graine de randomisation xparse

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
zazou
Utilisateur confirmé
Utilisateur confirmé
Messages : 43
Inscription : mercredi 23 novembre 2022, 10:16
Statut actuel : Enseignant

[Résolu] Graine de randomisation xparse

Message non lu par zazou »

Bonjour,

j'utilise depuis un certain temps une macro que j'ai trouvée sur stackexchange pour choisir des éléments aléatoirement dans une liste et sans remise :

Code : Tout sélectionner

\documentclass{article}
\usepackage{xparse}
\input{random}

\ExplSyntaxOn
\NewDocumentCommand{\htguse}{ m }
 {
  \use:c { htg_arg_#1: }
 }
\NewDocumentCommand{\selectNrandom}{ m m m }
 {
  \htg_select_n_random:nnn { #1 } { #2 } { #3 }
 }

\cs_new_protected:Npn \htg_select_n_random:nnn #1 #2 #3
 {
  \seq_clear:N \l_htg_used_seq
  \int_set:Nn \l_htg_length_int { \clist_count:n { #2 } }
  \int_compare:nTF { #1 > \l_htg_length_int }
   {
    \msg_error:nnxx { randomchoice } { too-many } { #1 } { \int_to_arabic:n { \l_htg_length_int } }
   }
   {
    \int_step_inline:nnnn { 1 } { 1 } { #1 }
     {
      \htg_get_random:
      \cs_set:cpx { htg_arg_##1: }
       { \clist_item:nn { #2 } { \l_htg_random_int } }
     }
    #3
   }
 }
\cs_new_protected:Npn \htg_get_random:
 {
  \setrannum { \l_htg_random_int } { 1 } { \l_htg_length_int }
  \seq_if_in:NxTF \l_htg_used_seq { \int_to_arabic:n { \l_htg_random_int } }
   { \htg_get_random: }
   { \seq_put_right:Nx \l_htg_used_seq { \int_to_arabic:n { \l_htg_random_int } } }
 }
\seq_new:N \l_htg_used_seq
\int_new:N \l_htg_length_int
\int_new:N \l_htg_random_int
\msg_new:nnnn { randomchoice } { too-many }
 { Too~ many~choices }
 { You~want~to~select~#1~elements,~but~you~have~only~#2 }
\ExplSyntaxOff

\begin{document}

\selectNrandom{2}
  {N, W, Z, Q, R, C}
  {$\mathbf{\htguse{1}}$ and $\mathbf{\htguse{2}}$}

\selectNrandom{3}
  {A, B, C}
  {$\mathbf{\htguse{1}}$, $\mathbf{\htguse{2}}$ and $\mathbf{\htguse{3}}$}

\selectNrandom{3}
  {N, W}
  {$\mathbf{\htguse{1}}$, $\mathbf{\htguse{2}}$ and $\mathbf{\htguse{3}}$}

\end{document}
Savez-vous comment je peux régler la graine de randomisation à la manière de \pgfmathsetseed{} ?

Merci.
Dernière modification par zazou le samedi 18 janvier 2025, 18:00, modifié 1 fois.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 499
Inscription : dimanche 11 février 2007, 11:45

Re: Graine de randomisation xparse

Message non lu par touhami »

Bonjour.
Il suffit de taper

Code : Tout sélectionner

\randomi=N
Par exemple

Code : Tout sélectionner

\randomi=10
zazou
Utilisateur confirmé
Utilisateur confirmé
Messages : 43
Inscription : mercredi 23 novembre 2022, 10:16
Statut actuel : Enseignant

Re: Graine de randomisation xparse

Message non lu par zazou »

OK cool, ça fonctionne très bien. J'ai un peu galéré parce qu'en fait ma macro a une petite différence avec celle indiquée ci-dessus, j'avais la ligne

Code : Tout sélectionner

	\int_set:Nn \l_htg_random_int { \fp_eval:n { randint( \l_htg_length_int ) } }
à la place de

Code : Tout sélectionner

  \setrannum { \l_htg_random_int } { 1 } { \l_htg_length_int }
La macro fonctionne tout pareil, mais du coup \randomi ne fonctionnait pas. Je suis curieux de savoir pourquoi, si tu as l'info.

Je suis aussi curieux de savoir comment retrouver la formule permettant de calculer une graine, ça me permettrait de sauver un document.

Merci encore.

Zazou.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 499
Inscription : dimanche 11 février 2007, 11:45

Re: Graine de randomisation xparse

Message non lu par touhami »

Dans ce cas, pour régler la graine de randomisation

Code : Tout sélectionner

\ExplSyntaxOn
\sys_gset_rand_seed:n{10}
\ExplSyntaxOff
Pour afficher la graine utilisée

Code : Tout sélectionner

\ExplSyntaxOn
\sys_rand_seed:
\ExplSyntaxOff
zazou
Utilisateur confirmé
Utilisateur confirmé
Messages : 43
Inscription : mercredi 23 novembre 2022, 10:16
Statut actuel : Enseignant

Re: Graine de randomisation xparse

Message non lu par zazou »

Au top, merci !!!
zazou
Utilisateur confirmé
Utilisateur confirmé
Messages : 43
Inscription : mercredi 23 novembre 2022, 10:16
Statut actuel : Enseignant

Re: Graine de randomisation xparse

Message non lu par zazou »

J'ai cherché un peu comment retrouver la graine utilisée dans un ancien document, mais j'ai aucune idée. J'ai tenté de factoriser la graine, mais je n'ai pas trouvé de piste à creuser. Savez-vous comment elle est construite par défaut ?
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 499
Inscription : dimanche 11 février 2007, 11:45

Re: Graine de randomisation xparse

Message non lu par touhami »

Bonjour.
Vous pouvez essayer avec

Code : Tout sélectionner

\fpeval{97*(31*(388*\time+\year)+\day)+\month}
ou encore

Code : Tout sélectionner

\the\numexpr97*(31*(388*\time+\year)+\day)+\month\relax
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 499
Inscription : dimanche 11 février 2007, 11:45

Re: Graine de randomisation xparse

Message non lu par touhami »

Il est possible que la graine de randomisation soit inscrite dans le fichier .log

Code : Tout sélectionner

Randomizer initialized to <nnnnnnnnn>