diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCDefiTables.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCDefiTables.tex | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCDefiTables.tex b/macros/latex/contrib/profcollege/latex/PfCDefiTables.tex new file mode 100644 index 0000000000..279b7a4ad7 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCDefiTables.tex @@ -0,0 +1,211 @@ +%%% +% Defi Table +%%% + +\setKVdefault[DefiTable]{Solution=false,Math=false,LargeurT=5mm,Graines=false,Creation=false} +\defKV[DefiTable]{Graine=\setKV[DefiTable]{Graines}}% + +\newcommand\MelangeListeNew[2]{% + % #1 Liste à mélanger + % #2 Nombre d'éléments à conserver + \setsepchar[*]{/}\ignoreemptyitems% + \readlist*\ListeInter{#1}% + \xdef\faa{}% Liste construite + \xdef\fii{}% Liste détruite + % on crée les #2 premieres solutions. + \xintFor* ##1 in {\xintSeq{1}{#2}}\do{% + \xintifboolexpr{\ListeInterlen>1}{% + \xdef\Alea{\fpeval{randint(\ListeInterlen)}}% + \xdef\faa{\faa \ListeInter[\Alea]/}% + \xdef\fii{}% + \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{% + \xintifboolexpr{##2 == \Alea}{% + }{% + \xdef\fii{\fii \ListeInter[##2]/}% + }% + }% + }{% + \xdef\faa{\faa \ListeInter[1]}% + }% + \readlist*\ListeInter{\fii}% + }% + \reademptyitems% +}% + +\newcommand\DefiTableNombreLettreduCode[1]{% + \xdef\ListeDesCaracteresFoo{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/à/é/è/ê/ï/î/ô/ö/ù/ç/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/À/É/È/,/$?$/$;$/./$!$/$:$/-} + \savecomparemode% + \comparestrict% + \xdef\PfCFooDepart{} + \StrLen{#1}[\LongueurMot]% + \xintFor* ##1 in{\xintSeq{1}{\LongueurMot}}\do{% + \StrChar{#1}{##1}[\LettreMot] + \xdef\PfCFooDepart{\PfCFooDepart \LettreMot/} + }% + \setsepchar[*]{/}\reademptyitems% + \readlist*\ListeDesLettres{\PfCFooDepart}% + \xdef\PfCFooArrivee{\ListeDesLettres[1]}% + \xintFor* ##1 in{\xintSeq{2}{\LongueurMot}}\do{% + \StrCompare{\ListeDesLettres[##1]}{\\}[\PfCRetiensEtoile] + \StrCompare{\ListeDesLettres[##1]}{ }[\PfCRetiensPara] + \xintifboolexpr{\PfCRetiensEtoile==0 || \PfCRetiensPara==0}{}{% + \xdef\PfCTotal{0}% + \xintFor* ##2 in{\xintSeq{1}{\fpeval{##1-1}}}\do{% + \StrCompare{\ListeDesLettres[##1]}{\ListeDesLettres[##2]}[\PfCRetiens] + \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}% + }% + \xintifboolexpr{\PfCTotal==\fpeval{##1-1}}{\xdef\PfCFooArrivee{\PfCFooArrivee/\ListeDesLettres[##1]}}{}% + }% + }% + %Arrivee = \PfCFooArrivee\par + \setsepchar[*]{/}\ignoreemptyitems% + \readlist*\ListeDesLettresUniques{\PfCFooArrivee}% + %La liste des lettres uniques ainsi créée :\par + %\showitems\ListeDesLettresUniques[]% + % Il faut retirer les lettres uniques de la liste des caracteres + \readlist*\ListeTotaleDesCaracteres{\ListeDesCaracteresFoo}% + %\par + %La liste totale des caractères est :\par + %\showitems\ListeTotaleDesCaracteres[] + %\par + \xdef\ListeCaracteresUniques{}% + \xintFor* ##1 in{\xintSeq{1}{\ListeTotaleDesCaractereslen}}\do{% + %Le caractère testé est \ListeTotaleDesCaracteres[##1]. On le compare à :% + \xdef\PfCTotal{0}% + \xintFor* ##2 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{% + \StrCompare{\ListeTotaleDesCaracteres[##1]}{\ListeDesLettresUniques[##2]}[\PfCRetiens] + \xdef\PfCTotal{\fpeval{\PfCTotal+\PfCRetiens}}% + }% + \xintifboolexpr{\PfCTotal==\ListeDesLettresUniqueslen}{\xdef\ListeCaracteresUniques{\ListeCaracteresUniques\ListeTotaleDesCaracteres[##1]/}}{}% + }% + %La liste des caractères uniques à ajouter + \MelangeListeNew{\ListeCaracteresUniques}{\fpeval{42-\ListeDesLettresUniqueslen}}% + %\par La liste des éléments à mélanger est :\par + \xdef\ListeDesCaracteresAUtiliser{} + \xintFor* ##1 in{\xintSeq{1}{\ListeDesLettresUniqueslen}}\do{% + \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \ListeDesLettresUniques[##1]/}% + }% + \xdef\ListeDesCaracteresAUtiliser{\ListeDesCaracteresAUtiliser \faa} + \MelangeListeNew{\ListeDesCaracteresAUtiliser}{42} + %Finalement, on utilise ces caractères :\par + \ignoreemptyitems% + \readlist*\ListeFinaleDesCaracteres{\faa} + \xdef\ListeDesProduitsFoo{1/2/3/4/5/6/7/8/9/10/12/14/16/18/20/15/21/24/27/30/28/32/36/40/25/35/45/50/42/48/54/60/49/56/63/70/64/72/80/81/90/100} + \MelangeListeNew{\ListeDesProduitsFoo}{42} + %Les produits mélangés sont :\par + \readlist*\ListeDesProduits{\faa}% + \restorecomparemode + \reademptyitems +} + +\newcommand\DefiTable[2][]{% + % 1 les clés + % 2 la table de décodage + \useKVdefault[DefiTable]% + \setKV[DefiTable]{#1}% + \ifboolKV[DefiTable]{Creation}{ + \ifboolKV[DefiTable]{Graines}{\PfCGraineAlea{\useKV[DefiTable]{Graine}}}{}% + \DefiTableNombreLettreduCode{#2} + \begin{center} + \begin{tabular}{|>{\columncolor{gray!15}}c|*{10}{c|}} + \hline + \rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{% + \xintifForFirst{}{&}##1% + }\\\hline% + \xintFor* ##1 in{\xintSeq{1}{10}}\do{% + ##1\xintFor* ##2 in{\xintSeq{1}{10}}\do{% + &\xintFor* ##3 in{\xintSeq{1}{42}}\do{% + \xintifboolexpr{\fpeval{##1*##2}==\ListeDesProduits[##3]}{\ListeFinaleDesCaracteres[##3]}{}% + }% + }\\\hline% + }% + \end{tabular}% + \end{center} + }{% + \setsepchar[*]{§* }% + \readlist*\ListeDefiTableCode{#2}% + \begin{NiceTabular}{>{\columncolor{gray!15}}{c}*{10}{c}}[hvlines] + \rowcolor{gray!15}$\times$&\xintFor* ##1 in {\xintSeq {1}{10}}\do{% + \xintifForFirst{}{&}##1} + \\ + 1\xintFor* ##1 in {\xintSeq {1}{10}}\do{% + &\ListeDefiTableCode[1,##1]% + }\\ + \xintFor* ##1 in {\xintSeq {2}{9}}\do{% + ##1\xintFor* ##2 in {\xintSeq {1}{##1}}\do{% + &\ListeDefiTableCode[##2,\fpeval{##1-##2+1}]% + }\xintFor* ##2 in {\xintSeq {1}{\fpeval{10-##1}}}\do{% + &\ListeDefiTableCode[##1,\fpeval{##2+1}]% + }% + \\ + }% + 10&\ListeDefiTableCode[1,10]&\ListeDefiTableCode[2,9]&\ListeDefiTableCode[3,8]&\ListeDefiTableCode[4,7]&\ListeDefiTableCode[5,6]&\ListeDefiTableCode[6,5]&\ListeDefiTableCode[7,4]&\ListeDefiTableCode[8,3]&\ListeDefiTableCode[9,2]&\ListeDefiTableCode[10,1]\\ + \end{NiceTabular}% + }% +}% + +\newcommand\DefiTableTexte[3][]{% + \useKVdefault[DefiTable]% + \setKV[DefiTable]{#1}% + \ifboolKV[DefiTable]{Creation}{% + \setsepchar[*]{\\* }% + \readlist*\ListeDefiTableTableau{#3}% + \xdef\ListeDefiTableMax{0}% + \xintFor* ##1 in{\xintSeq{1}{\ListeDefiTableTableaulen}}\do{% + \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]% + \xintifboolexpr{\ListeDefiTableMax<\PfCDTLongueur}{\xdef\ListeDefiTableMax{\fpeval{\PfCDTLongueur}}}{}%% + }% + %\par Le max est \ListeDefiTableMax + \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}} + \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{% + \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]% + \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{% + \xintifForFirst{}{&}% + \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]% + \IfStrEq{\DefiTableMaLettre}{ }{\Block[]{1-1}{}}{\Block[borders={bottom}]{1-1}{\ifboolKV[DefiTable]{Solution}{\StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}}{}}}% + }\\ + \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]% + \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{% + \xintifForFirst{}{&}% + \StrMid{\ListeDefiTableTableau[##1]}{##2}{##2}[\DefiTableMaLettre]% + \IfStrEq{\DefiTableMaLettre}{*}{}{% + \xintFor* ##3 in{\xintSeq{1}{42}}\do{% + \IfStrEq{\DefiTableMaLettre}{\ListeFinaleDesCaracteres[##3]}{\Block{}{\footnotesize\ListeDesProduits[##3]}}{}% + }% + }% + }\\ + \StrLen{\ListeDefiTableTableau[##1]}[\PfCDTLongueur]% + \xintFor* ##2 in {\xintSeq {1}{\PfCDTLongueur}}\do{% + \xintifForFirst{}{&} + }\\ + }% + \end{NiceTabular}% + }{% + \setsepchar[*]{§*/}% + \readlist*\ListeDefiTableTableau{#2}% + \xdef\ListeDefiTableMax{0}% + \setsepchar{§}% + \readlist*\ListeDefiTablePhrase{#3}% + \foreachitem\compteur\in\ListeDefiTableTableau{% + \xintifboolexpr{\ListeDefiTableMax<\listlen\ListeDefiTableTableau[\compteurcnt]}{\xdef\ListeDefiTableMax{\fpeval{\listlen\ListeDefiTableTableau[\compteurcnt]}}}{}% + }% + \begin{NiceTabular}{*{\fpeval{\ListeDefiTableMax}}{>{\centering\arraybackslash}m{\useKV[DefiTable]{LargeurT}}}} + \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeDefiTableTableaulen}}}\do{% + \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{% + \xintifForFirst{}{&}\ifboolKV[DefiTable]{Solution}{% + \StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}[\DefiTableMaLettre]% + \IfStrEq{\DefiTableMaLettre}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{\StrMid{\ListeDefiTablePhrase[##1]}{##2}{##2}}}% + }{% + \IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{\Block[]{2-1}{}}{\Block[borders={bottom}]{2-1}{}}% + }%% + }\\ + \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{% + \xintifForFirst{}{&} + }\\ + \xintFor* ##2 in {\xintSeq {1}{\listlen\ListeDefiTableTableau[##1]}}\do{% + \xintifForFirst{}{&}\IfStrEq{\ListeDefiTableTableau[##1,##2]}{*}{}{\footnotesize\ifboolKV[DefiTable]{Math}{\ListeDefiTableTableau[##1,##2]}{\num{\ListeDefiTableTableau[##1,##2]}}}% + }\\ + }% + \end{NiceTabular}% + }% +}%
\ No newline at end of file |