%%%
% Multiplication par jalousie
%%%
\def\filedateMulJal{2024/08/04}%
\def\fileversionMulJal{0.1}%
\message{-- \filedateMulJal\space v\fileversionMulJal}%
%
\setKVdefault[MulJal]{Solution=false,CouleurTab=gray!15}%
\defKV[MulJal]{CouleurSolution=\setKV[MulJal]{Solution}}%
%
\NewDocumentCommand\MulJalousie{om}{%
  \useKVdefault[MulJal]%
  \setKV[MulJal]{#1}%
  \setsepchar{x}\ignoreemptyitems%
  \readlist*\PfCMulJal{#2}%
  \ifboolKV[MulJal]{Solution}{\colorlet{CouleurSolution}{\useKV[MulJal]{CouleurSolution}}}{\colorlet{CouleurSolution}{black}}%
  % Les facteurs sont \showitems\PfCMulJal[].
 \BuildTabMulJal%
}%

\NewDocumentCommand\BuildTabMulJal{}{%
  \StrLen{\PfCMulJal[1]}[\PremierFacteurlen]%
  \StrLen{\PfCMulJal[2]}[\DeuxiemeFacteurlen]%
  \xdef\PfCMulJalPdt{\fpeval{\PfCMulJal[1]*\PfCMulJal[2]}}%
  \StrLen{\PfCMulJalPdt}[\Produitlen]%
  \StrChar{\PfCMulJal[1]}{1}[\PfCMulA]%
  \StrChar{\PfCMulJal[2]}{1}[\PfCMulB]%
  \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
  \quotient{\PfCMulC}{10}\relax%
  \xdef\Report{\the\intquotient/}%
  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{%
    \xintFor* ##2 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
      \xintFor* ##3 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        \xintifboolexpr{##2+##3==##1}{%
          \ifnum##2=1%
            \ifnum##3<\PremierFacteurlen%
              \StrChar{\PfCMulJal[1]}{\fpeval{##3+1}}[\PfCMulA]%
              \StrChar{\PfCMulJal[2]}{##2}[\PfCMulB]%
              \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
              \quotient{\PfCMulC}{10}\relax%
              \xdef\Report{\Report \the\intquotient}%
            \fi%
          \fi%
          \StrChar{\PfCMulJal[1]}{##3}[\PfCMulA]%
          \StrChar{\PfCMulJal[2]}{##2}[\PfCMulB]%
          \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
          \modulo{\PfCMulC}{10}\relax%
          \ifnum##3=\PremierFacteurlen%
            \xdef\Report{\Report \the\remainder}%
          \else%
            \xdef\Report{\Report,\the\remainder}%
          \fi%
          \ifnum##2<\DeuxiemeFacteurlen%
            \StrChar{\PfCMulJal[1]}{##3}[\PfCMulA]%
            \StrChar{\PfCMulJal[2]}{\fpeval{##2+1}}[\PfCMulB]%
            \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
            \quotient{\PfCMulC}{10}\relax%
            \xdef\Report{\Report,\the\intquotient}%
          \fi%
        }{}%
      }%
    }%
    \xdef\Report{\Report/}%
  }%
  \setsepchar[*]{/*,}\ignoreemptyitems%
  \readlist*\Lesdiagonales{\Report}%
  %Calculs les sommes en diagonales.
  \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+\DeuxiemeFacteurlen}}}\do{%
    \xdef\PfCFoo{\Lesdiagonales[##1]}%
    \setsepchar{,}\ignoreemptyitems%
    \readlist*\LaDiagonale{\PfCFoo}%
    \xdef\LaSomme{0}%
    \foreachitem\compteur\in\LaDiagonale{\xdef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}%
  }%
  %
  \colorlet{PfCFondTab}{\useKV[MulJal]{CouleurTab}}%
  \begin{NiceTabular}{*{1}{p{25pt}}*{\PremierFacteurlen}{p{25pt}}c}%
    \rule{0pt}{25pt}\xintFor* ##1 in{\xintSeq{1}{1}}\do{%
      &}\xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
      \Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfCMulJal[1]}{##1}}&%
    }\Block[fill=PfCFondTab,draw,v-center]{}{$\times$}\\%
    \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
      \rule{0pt}{25pt}%
      \xintFor* ##3 in{\xintSeq{1}{1}}\do{%
        &}\xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        &}\Block[fill=PfCFondTab,draw,v-center]{}{\StrChar{\PfCMulJal[2]}{##1}}\\%
    }%
    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\PremierFacteurlen+2}}}\do{%
      \rule{0pt}{25pt}\xintifForLast{}{&}%
    }\\%
    \CodeAfter%
    \ifboolKV[MulJal]{Solution}{%
      \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
        \xintFor* ##2 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
          \StrChar{\PfCMulJal[1]}{##2}[\PfCMulA]%
          \StrChar{\PfCMulJal[2]}{##1}[\PfCMulB]%
          \xdef\PfCMulC{\fpeval{\PfCMulA*\PfCMulB}}%
          \xintifboolexpr{\PfCMulC>9}{%
            \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\StrChar{\PfCMulC}{1}};}%
            \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\StrChar{\PfCMulC}{2}};}%
          }{%
            \tikz{\node[anchor=north west] at (\fpeval{##1+1}-|\fpeval{##2+1}) {0};}%
            \tikz{\node[anchor=south east] at (\fpeval{##1+2}-|\fpeval{##2+2}) {\PfCMulC};}%
          }%
        }%
      }%
    }{}%
    % Affichage des diagonales
    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{%
      \xintFor* ##2 in {\xintSeq{1}{\fpeval{\PremierFacteurlen+1}}}\do{%
        \tikz{\draw (\fpeval{##1+1}-|\fpeval{##2+1})--(\fpeval{##1+2}-|##2);}%
      }%
    }%
    % affichage du quadrillage interieur
    \xintFor* ##1 in {\xintSeq{1}{\PremierFacteurlen}}\do{%
      \tikz{\draw (2-|\fpeval{##1+1}) -- (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{##1+1});}%
    }%
    \xintFor* ##1 in {\xintSeq{1}{\fpeval{\DeuxiemeFacteurlen+1}}}\do{%
      \tikz{\draw (\fpeval{##1+1}-|2)--(\fpeval{##1+1}-|last);}%
    }%
    % Affichage du produit
    \ifboolKV[MulJal]{Solution}{%
      \xintFor* ##1 in{\xintSeq{1}{\PremierFacteurlen}}\do{%
        \StrChar{\PfCMulJalPdt}{\fpeval{\Produitlen+1-##1}}[\PfCMulJalChiffre]%
        \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+2+0.5}-|\fpeval{\PremierFacteurlen+2-##1}) {\PfCMulJalChiffre};}%
      }%
      \xintFor* ##1 in{\xintSeq{1}{\DeuxiemeFacteurlen}}\do{%
        \StrChar{\PfCMulJalPdt}{\fpeval{\Produitlen+1-\PremierFacteurlen-##1}}[\PfCMulJalChiffre]%
        \tikz{\node[CouleurSolution] at (\fpeval{\DeuxiemeFacteurlen+3-##1}-|\fpeval{1.5}) {\PfCMulJalChiffre};}%
      }%
      % Affichage des retenues
      \xdef\Retenue{0}%
      \xintFor* ##1 in{\xintSeq{2}{\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen}}}\do{%
        \xdef\PfCFoo{\Lesdiagonales[\fpeval{\DeuxiemeFacteurlen+\PremierFacteurlen+1-##1}]}%
        \setsepchar{,}\ignoreemptyitems%
        \readlist*\LaDiagonale{\PfCFoo}%
        \xdef\LaSomme{0}%
        \foreachitem\compteur\in\LaDiagonale{\xdef\LaSomme{\fpeval{\LaSomme+\LaDiagonale[\compteurcnt]}}}%
        \xdef\LaSomme{\fpeval{\LaSomme+\Retenue}}%
        \ifnum\LaSomme>9%
          \quotient{\LaSomme}{10}%
          \xdef\Retenue{\the\intquotient}%
          \ifnum##1<\PremierFacteurlen%
            \tikz{\node[anchor=north,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+2}-|\fpeval{\PremierFacteurlen+1.5-##1}) {\tiny$+\the\intquotient$};}%
          \else%
            \tikz{\node[anchor=east,inner sep=1pt] at (\fpeval{\DeuxiemeFacteurlen+1.5-(##1-\PremierFacteurlen)}-|2) {\tiny$\the\intquotient+$};}%
          \fi%
        \fi%
      }%
    }{}%
  \end{NiceTabular}%
}%