summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex')
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex149
1 files changed, 149 insertions, 0 deletions
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
new file mode 100644
index 0000000000..943a28d0fb
--- /dev/null
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
@@ -0,0 +1,149 @@
+% proflycee-tools-aleatoire.tex
+% Copyright 2023 Cédric Pierquet
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+%%------EnsembleList
+\defKV[kvensemble]{%
+ Sep=\def\PLenssep{#1},%
+ Option=\def\PLensopt{#1}
+}
+
+\setKVdefault[kvensemble]{%
+ Sep={;},%
+ Mathpunct=true,%
+ Option={}
+}
+
+\newcommand\EcritureEnsemble[2][]{%
+ \useKVdefault[kvensemble]%
+ \setKV[kvensemble]{#1}%
+ \ifboolKV[kvensemble]{Mathpunct}%
+ {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}%
+ {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}
+}
+
+%%------TRINOMEALEA
+\setKVdefault[trinomealea]{%
+ Alea=false,%
+ Anegatif=true
+}
+
+\NewDocumentCommand\EcritureTrinome{ O{} m m m }{%
+ \useKVdefault[trinomealea]%
+ \setKV[trinomealea]{#1}%
+ \ifboolKV[trinomealea]{Alea}%
+ {%
+ \xdef\Coeffa{\fpeval{randint(#2)}}\xdef\Coeffb{\fpeval{randint(#3)}}\xdef\Coeffc{\fpeval{randint(#4)}}%
+ \xdef\AleaSigneA{\fpeval{randint(1,2)}}%
+ \ifboolKV[trinomealea]{Anegatif}%
+ {\xintifboolexpr{\AleaSigneA == 1}{\def\TriSigneA{}}{\def\TriSigneA{-}}}%
+ {\def\TriSigneA{}}%forcément a>0
+ }%
+ {%
+ \xdef\Coeffa{#2}\xdef\Coeffb{#3}\xdef\Coeffc{#4}%
+ \def\TriSigneA{}%
+ }%
+ \def\TriPartieA{\num{\TriSigneA\Coeffa} x^2}%
+ \xintifboolexpr{\Coeffa == 1}%
+ {\def\TriPartieA{x^2}}{}%
+ \xintifboolexpr{\Coeffa == -1}%
+ {\def\TriPartieA{-x^2}}{}%
+ \def\TriPartieB{\num[print-implicit-plus]{\Coeffb}x}%
+ \xintifboolexpr{\Coeffb == 0}%
+ {\def\TriPartieB{}}{}%
+ \xintifboolexpr{\Coeffb == 1}%
+ {\def\TriPartieB{+x}}{}%
+ \xintifboolexpr{\Coeffb == -1}%
+ {\def\TriPartieB{-x}}{}%
+ \xintifboolexpr{\Coeffc == 0}%
+ {\def\TriPartieC{}}{\def\TriPartieC{\num[print-implicit-plus]{\Coeffc}}}%
+ %formatage
+ \ensuremath{\TriPartieA\TriPartieB\TriPartieC}%
+}
+
+%%------ALEATOIRES
+\ExplSyntaxOn
+\NewDocumentCommand\TriListeCroiss{m}
+{
+ \clist_sort:Nn #1
+ {
+ \fp_compare:nNnTF {##1} > {##2}
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+}
+\NewDocumentCommand\TriListeDecroiss{m}
+{
+ \clist_sort:Nn #1
+ {
+ \fp_compare:nNnTF {##1} < {##2}
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+}
+\ExplSyntaxOff
+
+\newcommand\NbAlea[4][0]{%entier ou décimal
+ \xintifboolexpr{#1 == 0}%
+ {\xdef#4{\fpeval{randint(#2,#3)}}}%
+ {\xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}}%
+}
+\newcommand\VarNbAlea[2]{%
+ \xdef#1{\fpeval{#2}}%
+}
+
+\defKV[TirageAleatoireEntiersEntre]{%
+ ValMin=\def\TAEEmin{#1},%
+ ValMax=\def\TAEEmax{#1},%
+ NbVal=\def\TAEEnb{#1},%
+ Sep=\def\TAEEsep{#1},%
+ Tri=\def\TAEEtri{#1}
+}
+
+\setKVdefault[TirageAleatoireEntiersEntre]{%
+ ValMin=1,%
+ ValMax=50,%
+ NbVal=6,%
+ Sep={,},%
+ Tri=non,%
+ Repetition=false
+}
+
+\NewList{TirageEntiersAleatoires}
+\NewDocumentCommand\TirageAleatoireEntiers{ O{} m }{%1=options,2=nomliste triée ou non
+ \useKVdefault[TirageAleatoireEntiersEntre]%
+ \setKV[TirageAleatoireEntiersEntre]{#1}%
+ \ifboolKV[TirageAleatoireEntiersEntre]{Repetition}%suivant la possibilité de répéter
+ {%répétitions autorisées
+ %création de la liste (le 1er puis les autres)
+ \xdef#2{\fpeval{randint(\TAEEmin,\TAEEmax)}}%
+ \foreach \i in {2,3,...,\TAEEnb}%
+ {\xdef#2{#2,\fpeval{randint(\TAEEmin,\TAEEmax)}}}%
+ }%
+ {%pas de répétitions
+ %melange des nombres
+ \ClearList{TirageEntiersAleatoires}%on vide la liste aléatoire
+ \xintFor* ##1 in {\xintSeq{\TAEEmin}{\TAEEmax}}%
+ \do{\InsertRandomItem{TirageEntiersAleatoires}{##1}}%
+ %création de la liste (le 1er puis les autres)
+ \xdef#2{\TirageEntiersAleatoires[0]}%
+ \foreach \i in {1,2,...,{\inteval{\TAEEnb-1}}}%
+ {\xdef#2{#2,\TirageEntiersAleatoires[\i]}}%
+ }%
+ %on trie si besoin
+ \IfStrEq{\TAEEtri}{croissant}%si tri croissant
+ {\TriListeCroiss{#2}}%
+ {}%
+ \IfStrEq{\TAEEtri}{decroissant}%si tri décroissant
+ {\TriListeDecroiss{#2}}%
+ {}%
+ \StrSubstitute{#2}{,}{\TAEEsep}[#2]%on change le séparateur si besoin
+}
+
+\endinput \ No newline at end of file