diff options
author | Karl Berry <karl@freefriends.org> | 2023-04-16 21:32:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-04-16 21:32:07 +0000 |
commit | 7728a037ac7173905c75c47ebc419f8dd2c276be (patch) | |
tree | e2518f6d23ff0403c882731ec6e9ae4057df8f53 /Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex | |
parent | 242aa83a3506678f846588dcd907b5234f896ac5 (diff) |
proflycee
git-svn-id: svn://tug.org/texlive/trunk@66864 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex new file mode 100644 index 00000000000..943a28d0fb5 --- /dev/null +++ b/Master/texmf-dist/tex/latex/proflycee/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 |