diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCGrades.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCGrades.tex | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCGrades.tex b/macros/latex/contrib/profcollege/latex/PfCGrades.tex new file mode 100644 index 0000000000..6155c43ca1 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCGrades.tex @@ -0,0 +1,104 @@ +%%% +% Grades +%%% +\setKVdefault[Grades]{Solution=false,Longueur=9,Largeur=9,Echelle=8mm,Graines=false} +\defKV[Grades]{Graine=\setKV[Grades]{Graines}} + +\NewDocumentCommand\Grades{o}{% + \useKVdefault[Grades]% + \setKVdefault[Grades]{#1}% + \BuildGrades% +} + +\NewDocumentCommand\BuildGrades{}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + boolean Graines,Solution; + Graines=\useKV[Grades]{Graines}; + Solution=\useKV[Grades]{Solution}; + + if Graines: + randomseed:=\useKV[Grades]{Graine}; + fi; + + numeric Longueur,Largeur; + Longueur=\useKV[Grades]{Longueur}; + Largeur=\useKV[Grades]{Largeur}; + + u:=\useKV[Grades]{Echelle}; + + p:=0; + pair A[];%centre des carrés. + boolean Allume[][]; + numeric Nombre[][]; + + for k=-1 upto Largeur+1: + for l=-1 upto Longueur+1: + Allume[k][l]=false; + endfor; + endfor; + + for k=0 upto Longueur-1: + for l=0 upto Largeur-1: + p:=p+1; + A[p]=u*(k,-l); + trace (unitsquare scaled u) shifted A[p]; + endfor; + endfor; + + for k=0 upto Largeur-1: + for l=0 upto Longueur-1: + if Allume[k][l]: + else: + Allume[k][l]:=true; + m:=uniformdeviate(1); + if m<0.5: + % on ne met pas de nombre + else: + % on met un nombre + Nombre[k][l]=floor(1+uniformdeviate(9)); + Allume[k][l+1]:=true; + Allume[k+1][l-1]:=true; + Allume[k+1][l]:=true; + Allume[k+1][l+1]:=true; + if Solution: + label(TEX(decimal(Nombre[k][l])),u*(l+0.5,-k+0.5)); + fi; + fi; + fi; + endfor; + endfor; + + % on compte le nombre de chiffres dans les lignes et on les ajoute + for k=0 upto Largeur-1: + p:=0; + Somme:=0; + for l=0 upto Longueur-1: + if unknown Nombre[k][l]: + else: + p:=p+1; + Somme:=Somme+Nombre[k][l]; + fi; + endfor; + label(TEX(decimal(p)),u*(-0.5,-k+0.5)); + label(TEX(decimal(Somme)),u*(Longueur+0.5,-k+0.5)); + endfor; + + % on compte le nombre de chiffres dans les colonnes et on les ajoute + for k=0 upto Longueur-1: + p:=0; + Somme:=0; + for l=0 upto Largeur-1: + if unknown Nombre[l][k]: + else: + p:=p+1; + Somme:=Somme+Nombre[l][k]; + fi; + endfor; + label(TEX(decimal(p)),u*(k+0.5,1.5)); + label(TEX(decimal(Somme)),u*(k+0.5,-Largeur+0.5)); + endfor; + \end{mplibcode} + \fi +}%
\ No newline at end of file |