diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCYohaku.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCYohaku.tex | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCYohaku.tex b/macros/latex/contrib/profcollege/latex/PfCYohaku.tex new file mode 100644 index 0000000000..c710834b93 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCYohaku.tex @@ -0,0 +1,187 @@ +%%% +% Yohaku +%%% +\setKVdefault[Yohaku]{Taille=2,Largeur=1cm,Hauteur=1cm,Addition,Multiplication=false,Perso=false,Limite=50,Relatif=false,Negatif=false,Pair=false,Impair=false,Premier=false,Solution=false,Visible=false,Bordure=false,CouleurResultat=gray!15,Ligne=0,Colonne=0,PasL=0,PasC=0,CouleurZone=gray!25}% +\defKV[Yohaku]{Case=\setKV[Yohaku]{Visible}}% + +\newlength\PfCYohaku% + +\xdef\PfCYHKpremier{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}% + +\NewDocumentCommand\Yohaku{o m}{% + \useKVdefault[Yohaku]% + \setKV[Yohaku]{#1}% + \xdef\PfCYHKlast{\fpeval{\useKV[Yohaku]{Taille}+1}}% + \xdef\PfCYHKnombre{1}% + \xdef\PfCYHKpair{2}% + \xdef\PfCYHKimpair{1}% + \xdef\PfCYHKnegatif{}% + \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{% + \xdef\PfCYHKnegatif{\PfCYHKnegatif -##1,}% + }% + \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{% + \xdef\PfCYHKnombre{\PfCYHKnombre,##1}% + }% + \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{% + \xdef\PfCYHKpair{\PfCYHKpair,\fpeval{##1*2}}% + }% + \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[Yohaku]{Limite}}}}\do{% + \xdef\PfCYHKimpair{\PfCYHKimpair,\fpeval{##1*2+1}}% + }% + % + \ifboolKV[Yohaku]{Perso}{% + \setsepchar[*]{,*/}\ignoreemptyitems% + \readlist*\PfCYHKListe{#2}% + \setsepchar{,}% + \xdef\PfCYHKListeFoo{}% + \foreachitem\compteur\in\PfCYHKListe[1]{% + \xdef\PfCYHKListeFoo{\PfCYHKListeFoo \PfCYHKListe[1,\compteurcnt],}% + }% + \ignoreemptyitems\readlist*\PfCYHKListeNA{\PfCYHKListeFoo}% + \xdef\PfCYHKListeFoo{}% + \foreachitem\compteur\in\PfCYHKListe[2]{% + \xdef\PfCYHKListeFoo{\PfCYHKListeFoo \PfCYHKListe[2,\compteurcnt],}% + }% + \ignoreemptyitems\readlist*\PfCYHKListeP{\PfCYHKListeFoo}% + }{% + \ifboolKV[Yohaku]{Negatif}{% + \xdef\PfCYHKListe{\PfCYHKnegatif}% + }{% + \ifboolKV[Yohaku]{Premier}{% + \xdef\PfCYHKListe{\PfCYHKpremier}% + }{% + \ifboolKV[Yohaku]{Impair}{% + \xdef\PfCYHKListe{\PfCYHKimpair}% + }{% + \ifboolKV[Yohaku]{Pair}{% + \xdef\PfCYHKListe{\PfCYHKpair}% + }{% + \xdef\PfCYHKListe{\PfCYHKnombre}% + }% + }% + }% + }% + \ifboolKV[Yohaku]{Relatif}{% + \xdef\PfCMoitieCase{\fpeval{floor((\useKV[Yohaku]{Taille}**2)/2)}}% + \xdef\PfCAutreMoitieCase{\fpeval{\useKV[Yohaku]{Taille}**2-\PfCMoitieCase}}% + \xdef\PfCFooRelatifYohaku{}% + \xdef\PfCYohakuAlea{\fpeval{randint(1,2)}}% + \xintifboolexpr{\PfCYohakuAlea==1}{% on choisit M1 négatifs, M2 positifs + \MelangeListe{\PfCYHKnegatif}{\PfCMoitieCase}% + \xdef\PfCYohakuInter{\faa}% + \MelangeListe{\PfCYHKnombre}{\PfCAutreMoitieCase}% + \xdef\PfCYohakuInter{\PfCYohakuInter,\faa}% + }{% on choisit M1 positifs, M2 négatifs + \MelangeListe{\PfCYHKnombre}{\PfCMoitieCase}% + \xdef\PfCYohakuInter{\faa}% + \MelangeListe{\PfCYHKnegatif}{\PfCAutreMoitieCase}% + \xdef\PfCYohakuInter{\PfCYohakuInter,\faa}% + }% + \MelangeListe{\PfCYohakuInter}{\fpeval{\useKV[Yohaku]{Taille}**2}}% + }{% + \MelangeListe{\PfCYHKListe}{\fpeval{\useKV[Yohaku]{Taille}**2}}% + }% + \ignoreemptyitems\readlist*\PfCYHKListeNA{\faa}% + %Sommes/Produits + \xdef\PfCYHKListeProduit{}% + %verticaux + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \ifboolKV[Yohaku]{Multiplication}{% + \xdef\PfCYHKTampon{1}% + \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Yohaku]{Taille}-1}}}\do{% + \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon*\PfCYHKListeNA[\fpeval{##2+##1*\useKV[Yohaku]{Taille}}]}}% + }% + }{% + \xdef\PfCYHKTampon{0}% + \xintFor* ##1 in {\xintSeq{0}{\fpeval{\useKV[Yohaku]{Taille}-1}}}\do{% + \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon+\PfCYHKListeNA[\fpeval{##2+##1*\useKV[Yohaku]{Taille}}]}}% + }% + }% + \xdef\PfCYHKListeProduit{\PfCYHKListeProduit,\PfCYHKTampon}% + }% + % horizontaux + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \ifboolKV[Yohaku]{Multiplication}{% + \xdef\PfCYHKTampon{1}% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon*\PfCYHKListeNA[\fpeval{(\useKV[Yohaku]{Taille}-##2)*\useKV[Yohaku]{Taille}+##1}]}}% + }% + }{% + \xdef\PfCYHKTampon{0}% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \xdef\PfCYHKTampon{\fpeval{\PfCYHKTampon+\PfCYHKListeNA[\fpeval{(\useKV[Yohaku]{Taille}-##2)*\useKV[Yohaku]{Taille}+##1}]}}% + }% + }% + \xdef\PfCYHKListeProduit{\PfCYHKListeProduit,\PfCYHKTampon}% + }% + \readlist*\PfCYHKListeP{\PfCYHKListeProduit}% + }% + \setlength{\PfCYohaku}{\useKV[Yohaku]{Largeur}-\tabcolsep}% + \colorlet{PfCFondYohaku}{\useKV[Yohaku]{CouleurResultat}}% + \colorlet{PfCZoneYohaku}{\useKV[Yohaku]{CouleurZone}}% + \begin{NiceTabular}{*{\fpeval{\useKV[Yohaku]{Taille}+1}}{m{\PfCYohaku}}}[hvlines-except-borders] + \CodeBefore + \xintifboolexpr{\useKV[Yohaku]{Ligne}==0 || \useKV[Yohaku]{Colonne}==0}{}{% + \tikz\draw[fill=PfCZoneYohaku](row-\fpeval{\useKV[Yohaku]{Ligne}}-|col-\fpeval{\useKV[Yohaku]{Colonne}}) rectangle (row-\fpeval{\useKV[Yohaku]{Ligne}+\useKV[Yohaku]{PasL}}-|col-\fpeval{\useKV[Yohaku]{Colonne}+\useKV[Yohaku]{PasC}});% + }% + \ifboolKV[Yohaku]{Bordure}{% + \tikz\fill[PfCFondYohaku] (last-|1)--(last-|last)--(1-|last)--(1-|\fpeval{\useKV[Yohaku]{Taille}+1})--(\fpeval{\useKV[Yohaku]{Taille}+1}-|\fpeval{\useKV[Yohaku]{Taille}+1})--(\fpeval{\useKV[Yohaku]{Taille}+1}-|1)--cycle; + }{} + \Body + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}+1}}}\do{% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}+1}}}\do{% + \xintifForFirst{\rule{0pt}{\useKV[Yohaku]{Hauteur}}}{&} + }\\% + }% + \CodeAfter + \ifboolKV[Yohaku]{Bordure}{% + \tikz\draw (last-|1)--(last-|last)--(1-|last); + }{}% + \tikz\draw (1-|1)--(1-|last); + \tikz\draw (1-|1)--(last-|1); + \tikz\draw[line width=2pt] (1-|1)--(\fpeval{\useKV[Yohaku]{Taille}+1}-|1)--(\fpeval{\useKV[Yohaku]{Taille}+1}-|\fpeval{\useKV[Yohaku]{Taille}+1})--(1-|\fpeval{\useKV[Yohaku]{Taille}+1})--cycle; + \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\Huge\ifboolKV[Yohaku]{Multiplication}{$\times$}{$+$}}; + % Affichage des termes/facteurs + \ifboolKV[Yohaku]{Solution}{% + \ifboolKV[Yohaku]{Perso}{% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \tikz\node at (\fpeval{##2+0.5}-|\fpeval{##1+0.5}) {\PfCYHKListeNA[\fpeval{(##2-1)*\useKV[Yohaku]{Taille}+##1}]}; + }% + }% + }{% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{ + \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{ + \tikz\node at (\fpeval{##2+0.5}-|\fpeval{##1+0.5}) {\num{\PfCYHKListeNA[\fpeval{(##2-1)*\useKV[Yohaku]{Taille}+##1}]}}; + }% + }% + }% + }{}% + % Affichage d'un terme/facteur + \ifboolKV[Yohaku]{Visible}{% + \xdef\PfCYohakuCaseAFL{\fpeval{floor((\useKV[Yohaku]{Case}-1)/\useKV[Yohaku]{Taille})}}% + \xdef\PfCYohakuCaseAFC{\fpeval{\useKV[Yohaku]{Case}-\useKV[Yohaku]{Taille}*\PfCYohakuCaseAFL}}% + \ifboolKV[Yohaku]{Perso}{% + \tikz\node at (\fpeval{\PfCYohakuCaseAFL+1+0.5}-|\fpeval{\PfCYohakuCaseAFC+0.5}) {\PfCYHKListeNA[\fpeval{\useKV[Yohaku]{Case}}]}; + }{% + \tikz\node at (\fpeval{\PfCYohakuCaseAFL+1+0.5}-|\fpeval{\PfCYohakuCaseAFC+0.5}) {\num{\PfCYHKListeNA[\fpeval{\useKV[Yohaku]{Case}}]}}; + }% + }{}% + %% Affichage des sommes/produits horizontalement + \ifboolKV[Yohaku]{Perso}{% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{##2+0.5}) {\PfCYHKListeP[##2]}; + }% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \tikz\node at (\fpeval{\useKV[Yohaku]{Taille}+1-##2+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\PfCYHKListeP[\fpeval{\useKV[Yohaku]{Taille}+##2}]}; + }% + }{% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \tikz\node at (\fpeval{\PfCYHKlast+0.5}-|\fpeval{##2+0.5}) {\num{\PfCYHKListeP[##2]}}; + }% + \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[Yohaku]{Taille}}}}\do{% + \tikz\node at (\fpeval{\useKV[Yohaku]{Taille}+1-##2+0.5}-|\fpeval{\PfCYHKlast+0.5}) {\num{\PfCYHKListeP[\fpeval{\useKV[Yohaku]{Taille}+##2}]}}; + }% + }% + \end{NiceTabular} +}%
\ No newline at end of file |