\index{Course aux nombres}\index[cle]{CourseNombre@\lstinline+\CourseNombre+}
Si on peut déjà travailler le calcul mental au travers de questions flash (page
\pageref{QFlash}) ou des rapidos (page \pageref{Rapido}), le modèle de
la course aux
nombres\footnote{\url{https://pedagogie.ac-strasbourg.fr/mathematiques/competitions/course-aux-nombres/}}
peut être un levier de motivation supplémentaire pour les élèves.

La commande \lstinline!\CourseNombre!$^{\text{\faIcon{external-link-alt}}}$ permet d'obtenir {\em aléatoirement} des questions
{\em à données aléatoires} prenant appui sur des questions du type de
celles posées lors de la course aux nombres. Elle a la forme suivante :
\begin{lstlisting}[escapechar=!,belowskip=0pt]
  \CourseNombre[!\sffamily\textlangle clés{\sffamily\textrangle}!]{}
\end{lstlisting}%!\sffamily\textlangle NomFichier{\sffamily\textrangle}!
où {\sffamily\textlangle}\lstinline!clés!{\sffamily\textrangle}{} constituent un ensemble
  d'options pour paramétrer la commande (paramètres optionnels).
%\item{\sffamily\textlangle}\lstinline!NomFichier!{\sffamily\textrangle}{} indique, {\em dans
%    certains cas d'utilisation de la commande}, le fichier nécessaire
%  à l'écriture d'une question.
\begin{tcolorbox}[tikzRemarque]
  Cette commande est réservée aux utilisateurs d'Unix (Linux \& Mac).
\end{tcolorbox}
\begin{tcolorbox}[tikzRemarque]
  Même avec \hologo{LuaLaTeX}, il faudra effectuer une compilation en {\ttfamily shell-escape}\footnotemark.
\end{tcolorbox}
\footnotetext{Voir page \pageref{Shell}.}
\begin{tcolorbox}[tikzRemarque]
  Je tiens à remercier les concepteurs du site
  \url{https://coopmaths.fr/mathalea.html} sans qui les premières questions jointes à \lstinline!ProfCollege!
  n'auraient pu voir le jour aussi facilement.
\end{tcolorbox}
Voici un exemple obtenu par la commande :
\CourseNombre[Dossier=Fichiers/Calcul,CoefQ=0.375,CoefR=0.325,CoefJ=0.125]{}
\begin{tcolorbox}[tikzcle]
\begin{KEYSl}{\Cle{CoefQ}, \Cle{CoefR}, \Cle{CoefJ}}{0.4/0.35/0.15}
  modifie, en rapport à la longueur \lstinline!\\linewidth!, la largeur respectivement des colonnes Question, Réponse et Jury.
\end{KEYSl}
\end{tcolorbox}
\clearpage
\paragraph{Préambule} Avant de détailler les clés accompagnant la commande \lstinline!\CourseNombre!, il convient de préciser son fonctionnement.

\begin{minipage}{0.65\linewidth}
  L'arborescence choisie, pour servir d'exemple, est celle ci-contre.
  Le dossier {\ttfamily Course} est votre répertoire de travail. Le dossier {\ttfamily Fichiers} contient l'ensemble des questions pouvant être choisies. Ces questions sont réparties, afin de mieux les classer, dans différents répertoires.
  \begin{tcolorbox}[tikzRemarque]
    La commande ne travaille que sur deux niveaux de profondeur dans l'arborescence.
  \end{tcolorbox}
\end{minipage}
\hfill
\begin{minipage}{0.3\linewidth}
  \dirtree{%
    .1 /.
    .2 .
    .3 .
    .4 Course.
    .5 Fichiers.
    .6 Calcul.
    .6 Geometrie.
    .6 Mesure.
    .6 Nombre.
    .6 Propor.
    .6 Stat.
    .6 Duree.
  }
\end{minipage}

Les exercices sont répartis de la façon suivante :
\begin{multicols}{3}
  \dirtree{%
    .1 Fichiers.
    .2 Tesb.tex.
    .2 Testa.tex.
    .2 Testc.tex.
    .2 Testd.tex.
    .2 Teste.tex.
    .2 Testf.tex.
  }

  \bigskip
  
  \dirtree{%
    .1 Geometrie.
    .2 CANSG2.tex.
    .2 CANSG3.tex.
    .2 CANSG4.tex.
    .2 CANSG5.tex.
  }

  \bigskip
  
  \dirtree{%
    .1 Duree.
    .2 CANSD1.tex.
    .2 CANSD2.tex.
    .2 CANSD3.tex.
    .2 CANSD4.tex.
  }

  \bigskip

  \dirtree{%
    .1 Mesure.
    .2 CANSM1.tex.
    .2 CANSM3.tex.
    .2 CANSM5.tex.
    .2 CANSM6.tex.
    .2 CANSM7.tex.
    .2 CANSM8.tex.
    .2 CANSM9.tex.
  }
  \columnbreak
    \dirtree{%
    .1 Calcul.
    .2 CANSC10.tex.
    .2 CANSC11.tex.
    .2 CANSC12.tex.
    .2 CANSC13.tex.
    .2 CANSC14.tex.
    .2 CANSC15.tex.
    .2 CANSC16.tex.
    .2 CANSC17.tex.
    .2 CANSC18.tex.
    .2 CANSC19.tex.
    .2 CANSC1.tex.
    .2 CANSC20.tex.
    .2 CANSC21.tex.
    .2 CANSC22.tex.
    .2 CANSC23.tex.
    .2 CANSC24.tex.
    .2 CANSC25.tex.
    .2 CANSC26.tex.
    .2 CANSC27.tex.
    .2 CANSC28.tex.
    .2 CANSC29.tex.
    .2 CANSC2.tex.
    .2 CANSC30.tex.
    .2 CANSC3.tex.
    .2 CANSC4.tex.
    .2 CANSC5.tex.
    .2 CANSC6.tex.
    .2 CANSC7.tex.
    .2 CANSC8.tex.
    .2 CANSC9.tex.
  }
  \columnbreak
  \dirtree{%
    .1 Nombre.
    .2 CANSN10.tex.
    .2 CANSN11.tex.
    .2 CANSN12.tex.
    .2 CANSN14.tex.
    .2 CANSN1.tex.
    .2 CANSN2.tex.
    .2 CANSN3.tex.
    .2 CANSN4.tex.
    .2 CANSN5.tex.
    .2 CANSN6.tex.
    .2 CANSN7.tex.
    .2 CANSN8.tex.
    .2 CANSN9a.tex.
    .2 CANSN9b.tex.
    .2 CANSN9.tex.
  }

\bigskip
  
  \dirtree{%
    .1 Propor.
    .2 CANSP1.tex.
    .2 CANSP2.tex.
    .2 CANSP3.tex.
    .2 CANSP4.tex.
    .2 CANSP5.tex.
  }

  \bigskip
  
  \dirtree{%
    .1 Stat.
    .2 CANSS1.tex.
  }
\end{multicols}
\begin{tcolorbox}[tikzRemarque]
  Les \og erreurs\og dans le nom des fichiers ({\ttfamily Tesb.tex} à la place de {\ttfamily Testb.tex}, {\ttfamily CANSC1.tex} à la place de {\ttfamily CANSC01.tex}\dots) sont voulues pour indiquer que le nom des fichiers importe peu pour la commande \lstinline!\CourseNombre!.
\end{tcolorbox}
\clearpage
La commande \lstinline!\CourseNombre{}! ne produira rien. Pour parcourir les questions d'un dossier spécifique, on utilisera la clé suivante.
\begin{tcolorbox}[tikzcle]
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Dossier|mygobble}
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Liste|mygobble}
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Maitre|mygobble}
  \begin{Key}{Dossier}{-}
    indique le dossier à parcourir pour construire la liste des questions.
  \end{Key}
  \begin{Key}{Liste}{-}
    indique les répertoires à parcourir pour la création de la liste complète des questions.
  \end{Key}
  \begin{Key}{Maitre}{false}
  indique, lorsqu'elle est activée, que la commande va parcourir {\em le dossier et tous ses sous-répertoires} pour construire la liste des questions.
\end{Key}
\end{tcolorbox}
\begin{Codes}[]{0.5}{}
% On parcourt les questions du répertoire Fichiers.
\CourseNombre[Dossier=Fichiers,CoefQ=0.375,CoefR=0.325,CoefJ=0.125]{}
\end{Codes}
\begin{Exemple}[listing options={frame=,classoffset=1,deletekeywords={Nombre},classoffset=0}]{}
% On parcourt les questions du répertoire Fichiers/Nombre.
\CourseNombre[Dossier=Fichiers/Nombre,CoefQ=0.475,CoefR=0.225,CoefJ=0.125]{}

% On parcourt les questions du répertoire Fichiers et du répertoire Fichiers/Nombre.
\CourseNombre[Liste={Fichiers,Fichiers/Nombre},CoefQ=0.475,CoefR=0.225,CoefJ=0.125]{}

% On parcourt le répertoire Fichiers et tous ses sous-répertoires.
\CourseNombre[Dossier=Fichiers,Maitre,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{Exemple}
\clearpage
On remarque que la numérotation des questions se poursuit entre les différents appels de la commande. On a donc besoin de la  clé suivante si on veut modifier cette numérotation.
\begin{tcolorbox}[tikzcle]
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Debut|mygobble}
\begin{Key}{Debut}{-}
  remet le compteur de numérotation des questions à la valeur passée en option.
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing options={frame=,classoffset=1,deletekeywords={Propor},classoffset=0}]{0.5}{}
\CourseNombre[Debut=1,Dossier=Fichiers/Propor,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{Codes}
\clearpage
Par défaut, la commande \lstinline!\CourseNombre! choisit et affiche cinq questions. Cependant, le dossier {\ttfamily Geometrie} ne comporte que 4 questions. En cas d'utilisation de la commande \lstinline!\CourseNombre!, un message d'avertissement sera affiché.
\begin{Codes}[listing options={frame=,classoffset=0,deletekeywords={Geometrie},classoffset=0}]{0.5}{}
\CourseNombre[Dossier=Fichiers/Geometrie,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{Codes}
On utilise alors la clé suivante.
\begin{tcolorbox}[tikzcle]
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!NbQ|mygobble}
\begin{Key}{NbQ}{5}
  modifie le nombre de questions à poser.
\end{Key}
\end{tcolorbox}
\begin{Codes}[]{0.5}{}
\CourseNombre[NbQ=3,Dossier=Fichiers/Geometrie,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{Codes}
\clearpage
On peut vouloir un habillage plus classique.
\begin{tcolorbox}[tikzcle]
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Exercice|mygobble}
\begin{Key}{Exercice}{false}
  supprime tout habillage de tableau. Chaque question est associée à
  la commande \lstinline!\\item! d'une liste numérotée\footnotemark.
\end{Key}
\end{tcolorbox}
\footnotetext{Cela permet à l'utilisateur de paramétrer son type de liste.}
\begin{Codes}[listing only,listing options={frame=,classoffset=1,deletekeywords={Mesure},classoffset=0}]{0.5}{}
\begin{enumerate}
  \CourseNombre[Exercice,Dossier=Fichiers/Mesure,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{enumerate}
\end{Codes}
\begin{enumerate}
  \CourseNombre[Exercice,Dossier=Fichiers/Mesure,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{enumerate}
Afin d'avoir une vue d'ensemble de la totalité des questions, on pourra utiliser les clés suivantes.
\begin{tcolorbox}[tikzcle]
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Ordre|mygobble}
  \index[cle]{CourseNombre@\lstinline+\CourseNombre+!Ordre!Nom|mygobble}
\begin{Key}{Ordre}{false}
  affiche (avec l'habillage de la course aux nombres) toutes les
  questions dans l'ordre de leur numéro.
  \begin{SousDescription}
  \item[La clé \Cle{Nom}]\DefautR{false}
    affiche le nom des fichiers associés à chacune des questions.
  \end{SousDescription}
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing only]{0.5}{}
\CourseNombre[Debut=1,Dossier=Fichiers,Maitre,Ordre,Nom,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\end{Codes}
\begin{tcolorbox}[tikzRemarque]
  Pour ne pas gêner la lecture de la documentation,  la liste complète des questions de l'arborescence présentée
  se trouve à partir de la page \pageref{ListeQuestionsCourse}.
\end{tcolorbox}
\clearpage
Enfin, on peut poser une et une seule question précisément {\em sans aucun habillage}.
\begin{Codes}[]{0.5}{}
\CourseNombre[]{Fichiers/Stat/CANSS1}
\end{Codes}
Toutes les clés sont alors inactives dès l'appel précis à un fichier.
\clearpage\index{Aleatoire@Aléatoire}
Chaque utilisateur peut, bien entendu, construire ses propres questions.\\L'énoncé suivant servira d'exemple\footnote{Les commandes \lstinline!\\Lg! et \lstinline!\\Temps! sont définies à la page \pageref{Grandeurs} et la commande \lstinline!\\pointilles! à la page \pageref{Sucres}.} :
\begin{Codes}[]{0.5}{}
Parcourir \Lg[km]{14} en \Temps{;;;;10}, c'est parcourir \pointilles[2cm]\si{\kilo\meter} en \Temps{;;;;15}.
\end{Codes}
Le package \lstinline!ProfCollege! propose deux commandes pour rendre aléatoire cet énoncé :
\begin{itemize}
\item la commande \lstinline!\ChoixAlea[p]{a}{b}{\VariableA}! permettant, en fonction des bornes {\em entières} {\ttfamily a} et {\ttfamily b}, de retourner dans la variable \lstinline!\VariableA! :
  \begin{itemize}
  \item si $\text{\ttfamily p}=0$ (par défaut), un nombre entier compris entre les bornes {\em incluses};  
  \item si $\text{\ttfamily p}=1$, un nombre décimal dont la partie entière est comprise entre les bornes {\em incluses} et dont la partie décimale est constituée uniquement du chiffre des dixièmes (ce chiffre pouvant être 0);
  \item si $\text{\ttfamily p}=2$, un nombre décimal dont la partie entière est comprise entre les bornes {\em incluses} et dont la partie décimale est constituée uniquement des chiffres des dixièmes et des centièmes (ces chiffres pouvant être 0);
  \item \dots
  \end{itemize}
\item la commande \lstinline!\VariableAlea{\VariableB}{3*\VariableA}! définit la variable \lstinline!\VariableB! comme étant égale au triple de la variable \lstinline!\VariableA!.
\end{itemize}
Ce qui pourrait donner :
\begin{Codes}[]{0.5}{}
% Aléatoire
\ChoixAlea{11}{19}{\DistanceA}
\ChoixAlea{1}{3}{\HeureBase}
\VariableAlea{\TempsA}{\HeureBase*10}
\VariableAlea{\TempsB}{\TempsA*3/2}
% Corps
Parcourir \Lg[km]{\DistanceA} en \Temps{;;;;\TempsA}, c'est parcourir \pointilles[2cm]\si{\kilo\meter} en \Temps{;;;;\TempsB}.
\end{Codes}
Un dernier exemple :
\begin{Codes}[]{0.5}{}
% Aléatoire
\ChoixAlea{2}{7}{\ExposantUn}
\ChoixAlea{3}{9}{\ExposantDeux}
\ChoixAlea[1]{5}{8}{\FacteurUn}
\ChoixAlea[2]{2}{4}{\FacteurDeux}
% Corps
Donne l'écriture décimale et l'écriture scientifique des
expressions suivantes :
\[C=\num{\FacteurUn}\times10^{\num{\ExposantUn}}\times\num{\FacteurDeux}\times10^{\num{-\ExposantDeux}}\]
\end{Codes}
\clearpage
\label{ListeQuestionsCourse}%
\CourseNombre[Debut=1,Dossier=Fichiers,Maitre,Ordre,Nom,CoefQ=0.5,CoefR=0.25,CoefJ=0.125]{}
\clearpage
On peut aussi créer des \og vraies\fg{} courses aux nombres avec la clé suivante.
\index[cle]{CourseNombre@\lstinline+\CourseNombre+!CAN|mygobble}
\begin{Key}{CAN}{false}
  modifie le modèle pour le faire paraître le plus proche possible d'une course aux nombres.\PfCMAJ{0.99-z-b}
\end{Key}
Il faudra néanmoins utiliser la commande \lstinline!\CNReponse! pour indiquer le contenu de la colonne \og Réponse\fg.
\begin{Codes}[]{0.4}{}
\CourseNombre[CAN,Debut=1,Dossier=CAN,Ordre,Nom,CoefQ=0.25,CoefR=0.5,CoefJ=0.125]{}
\end{Codes}
avec :
\begin{itemize}
\item le contenu du dossier {\ttfamily CAN} :
  
  \begin{minipage}{0.3\linewidth}
    \dirtree{%
      .1 CAN.
      .2 01.tex.
      .2 02.tex.
    }
  \end{minipage}
  
\item et le contenu des fichiers \lstinline!01.tex! et \lstinline!02.tex! :
  \begin{Codes}[listing only]{0.4}{}
% fichier 01.tex
Compléter.
\xdef\CNReponse{$\Capa{5}=\pointilles[3em]\si{\cubic\meter}$}
\end{Codes}
\begin{Codes}[listing only]{0.4}{}
% fichier 02.tex
\ChoixAlea{2}{6}{\CANSDUnHeure}%
\ChoixAlea{11}{55}{\CANSDUnMinute}%
Compléter.%
\xdef\CNReponse{%
  $\CANSDUnHeure\text{ heures }\CANSDUnMinute\text{ minutes}=\pointilles[3em]\text{ minutes}$.%
}
\end{Codes}
\end{itemize}