summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/profcollege/PfCTrio.tex
blob: 560258ff59d2781b92d3130e231993a0e6ee5f6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
\newlength\PfCTrioHauteur%
\newcounter{PfCTrioLettre}%

\setKVdefault[Trio]{Largeur=15pt,Graines=false,Repere=false,Cibles=false,Ligne=1,Colonne=1,Vide=false,VideRepere=false,Relatifs=false,Ecole=false,Horizontal=false,Vertical=false,DiagonaleM=false,DiagonaleD=false,NonAlea=false,NbSolutions=false,IntroRelatifs=false}%
\defKV[Trio]{Graine=\setKV[Trio]{Graines}}%
\defKV[Trio]{Cible=\setKV[Trio]{Cibles}}%
\defKV[Trio]{Liste=\setKV[Trio]{NonAlea}}%
\defKV[Trio]{NbSolution=\setKV[Trio]{NbSolutions}}%

\NewDocumentCommand\TrioCalculs{mmm}{%
  Les combinaisons Trio de #1, #2 et #3 sont :%
  \begin{enumerate}%
  \item $#1\times#2+#3=\fpeval{#1*#2+#3}$%
  \item $#1\times#2-#3=\fpeval{#1*#2-#3}$%
  \item $#2\times#3+#1=\fpeval{#2*#3+#1}$%
  \item $#2\times#3-#1=\fpeval{#2*#3-#1}$%
  \item $#3\times#1+#2=\fpeval{#3*#1+#2}$%
  \item $#3\times#1-#2=\fpeval{#3*#1-#2}$%
  \end{enumerate}%
}%

\NewDocumentCommand\TrioTestCible{O{\useKV[Trio]{Cible}}mmm}{%
  \ifboolKV[Trio]{IntroRelatifs}{%
    \xintifboolexpr{%
      \fpeval{#2*#3+#4}==#1%
      || \fpeval{#2*#3-#4}==#1%
      || \fpeval{#3*#4+#2}==#1%
      || \fpeval{#3*#4-#2}==#1%
      || \fpeval{#4*#2+#3}==#1%
      || \fpeval{#4*#2-#3}==#1%
      % ajout pour une cible négative
      || \fpeval{#3-#4*#2}==#1%
      || \fpeval{#4-#2*#3}==#1%
      || \fpeval{#2-#3*#4}==#1%
    }{\xdef\PfCRetourTestCible{1}}{\xdef\PfCRetourTestCible{0}}%
  }{%
    \xintifboolexpr{%
      \fpeval{#2*#3+#4}==#1%
      || \fpeval{#2*#3-#4}==#1%
      || \fpeval{#3*#4+#2}==#1%
      || \fpeval{#3*#4-#2}==#1%
      || \fpeval{#4*#2+#3}==#1%
      || \fpeval{#4*#2-#3}==#1%
    }{\xdef\PfCRetourTestCible{1}}{\xdef\PfCRetourTestCible{0}}%
  }%
}%

\NewDocumentCommand\Trio{o}{%
  \setcounter{PfCTrioLettre}{0}%
  \useKVdefault[Trio]%
  \setKV[Trio]{#1}%
  \xdef\PfCTitiH{0}%
  \xdef\PfCTitiV{0}%
  \xdef\PfCTitiDM{0}%
  \xdef\PfCTitiDD{0}%
  \ifboolKV[Trio]{Horizontal}{\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{Vertical}{\xdef\PfCTitiH{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{DiagonaleM}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{DiagonaleD}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}}{}%
  \ifboolKV[Trio]{Graines}{\PfCGraineAlea{\useKV[Trio]{Graine}}}{}%
  \ifboolKV[Trio]{Ecole}{\xdef\PfCTrioMaxA{5}\xdef\PfCTrioMaxB{3}}{\xdef\PfCTrioMaxA{7}\xdef\PfCTrioMaxB{5}}%
  \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{\fpeval{\PfCTrioMaxA+1}}}{\xdef\PfCTrioNbCases{\PfCTrioMaxA}}%      
  % On définit la liste de nombres
  \ifboolKV[Trio]{NonAlea}{%
    \xdef\faa{\useKV[Trio]{Liste}}%
  }{%
    \ifboolKV[Trio]{Relatifs}{%
      \xdef\PfCTrioFoo{-4,-4,-4,-4,-4,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4}%
    }{%
      \ifboolKV[Trio]{Ecole}{%
         \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5}%
       }{%
         \xdef\PfCTrioFoo{1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9}%
       }%
     }%
     \ifboolKV[Trio]{Ecole}{\MelangeListe{\PfCTrioFoo}{25}}{\MelangeListe{\PfCTrioFoo}{49}}%
  }%
  \setsepchar{,}\ignoreemptyitems%
  \greadlist*\PfCTrioMelange{\faa}%
  \reademptyitems%
  %%%%
  \ifboolKV[Trio]{Repere}{%
    \xdef\PfCTrioAjout{1}%
  }{%
    \xdef\PfCTrioAjout{0}%
  }%
  \setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
  \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines,name=TS]%
    \CodeBefore%
    \ifboolKV[Trio]{Cibles}{%
      \ifboolKV[Trio]{Repere}{%
        \xdef\PfCTrioAjout{1}%
      }{%
        \xdef\PfCTrioAjout{0}%
      }%
     % Calculs des horizontaux
      \ifnum\fpeval{\PfCTitiH}=0\relax
      \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
        \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
          \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
          \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
          \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{\tikz\draw[fill=Cornsilk,line width=2pt] (\fpeval{##2+\PfCTrioAjout}-|\fpeval{##1+\PfCTrioAjout}) rectangle (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+3+\PfCTrioAjout});\xintBreakFor}{}%
        }%
        \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
        \xintifboolexpr{\PfCRetourTestCible==1}{%
          \xintBreakFor
        }{}%
      }%
      \fi
      % Calculs des verticaux
      \ifnum\fpeval{\PfCTitiV}=0\relax
        \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
          \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{\tikz\draw[fill=LightSteelBlue,line width=2pt] (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+\PfCTrioAjout}) rectangle (\fpeval{##1+3+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout});\xintBreakFor}{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi
      % Calculs des diag positives (descendantes)
      \ifnum\fpeval{\PfCTitiDD}=0\relax
        \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
          \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+\PfCTrioAjout}-|\fpeval{##1+\PfCTrioAjout}) rectangle (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+1+\PfCTrioAjout});%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+1+\PfCTrioAjout}-|\fpeval{##1+1+\PfCTrioAjout}) rectangle (\fpeval{##2+2+\PfCTrioAjout}-|\fpeval{##1+2+\PfCTrioAjout});%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+2+\PfCTrioAjout}-|\fpeval{##1+2+\PfCTrioAjout}) rectangle (\fpeval{##2+3+\PfCTrioAjout}-|\fpeval{##1+3+\PfCTrioAjout});%
              \xintBreakFor}{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi
      % Calculs des diagonales négatives (montantes)
      \ifnum\fpeval{\PfCTitiDM}=0\relax
        \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
          \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-2)+##2+2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout+1}-|\fpeval{##2+\PfCTrioAjout}) rectangle (\fpeval{##1+2+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout});%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+1+\PfCTrioAjout}) rectangle (\fpeval{##1+1+\PfCTrioAjout}-|\fpeval{##2+2+\PfCTrioAjout});%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1-1+\PfCTrioAjout}-|\fpeval{##2+2+\PfCTrioAjout}) rectangle (\fpeval{##1+\PfCTrioAjout}-|\fpeval{##2+3+\PfCTrioAjout});%
              \xintBreakFor%
            }{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi
    }{}%
    \Body
    \ifboolKV[Trio]{Repere}{%
      \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
        &\Block[fill=gray!15]{}{\stepcounter{PfCTrioLettre}\Alph{PfCTrioLettre}}%
        }\\
    }{}%
    \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
      \rule{0pt}{\PfCTrioHauteur}%
      \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{##1}}{}%
      \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
        \xintifForFirst{}{&}\Block{}{\num{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}}%
      }\\
    }%
  \end{NiceTabular}%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \ifboolKV[Trio]{NbSolutions}{%
    \xdef\PfCNbSolutionH{0}%
    \xdef\PfCNbSolutionV{0}%
    \xdef\PfCNbSolutionDD{0}%
    \xdef\PfCNbSolutionDM{0}%
    \xdef\NbCibleSolution{\useKV[Trio]{NbSolution}}%
    % Calculs des horizontaux
    \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
      \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
        \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
        \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
        \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
        \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
        \xintifboolexpr{\PfCRetourTestCible==1}{%
          \xdef\PfCNbSolutionH{\fpeval{\PfCNbSolutionH+1}}%
          \modulo{\PfCNbSolutionH}{2}%
          \ifnum\remainder=0\relax%
            \tikz[remember picture,overlay,transform canvas={yshift=0.25\PfCTrioHauteur}]\draw[Crimson,line width=2pt] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) -- (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+3+\PfCTrioAjout-1}.center);%
          \else%
            \tikz[remember picture,overlay,transform canvas={yshift=-0.25\PfCTrioHauteur}]\draw[Crimson,line width=2pt] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) -- (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+3+\PfCTrioAjout-1}.center);%
          \fi%
        }{}%
      }%
    }%
    % Calculs des verticaux
    \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxA}}\do{%
      \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
        \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
        \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
        \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
        \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
        \xintifboolexpr{\PfCRetourTestCible==1}{%
          \xdef\PfCNbSolutionV{\fpeval{\PfCNbSolutionV+1}}%
          \modulo{\PfCNbSolutionV}{2}%
          \ifnum\remainder=0\relax%
            \tikz[remember picture,overlay,transform canvas={xshift=-0.25\PfCTrioHauteur}]\draw[NavyBlue,line width=2pt] (TS-\fpeval{##1+\PfCTrioAjout}-\fpeval{##2+\PfCTrioAjout}.center) -- (TS-\fpeval{##1+3+\PfCTrioAjout-1}-\fpeval{##2+\PfCTrioAjout}.center);%
          \else%
            \tikz[remember picture,overlay,transform canvas={xshift=0.25\PfCTrioHauteur}]\draw[NavyBlue,line width=2pt] (TS-\fpeval{##1+\PfCTrioAjout}-\fpeval{##2+\PfCTrioAjout}.center) -- (TS-\fpeval{##1+3+\PfCTrioAjout-1}-\fpeval{##2+\PfCTrioAjout}.center);% 
          \fi%
        }{}%
      }%
    }%
    % Calculs des diag positives (descendantes)
    \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
      \xintFor* ##1 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
        \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
        \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
        \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
        \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
        \xintifboolexpr{\PfCRetourTestCible==1}{%
          \xdef\PfCNbSolutionDD{\fpeval{\PfCNbSolutionDD+1}}%
          \modulo{\PfCNbSolutionDD}{2}%
          \ifnum\remainder=0\relax%
            \tikz[remember picture,overlay]\draw[Orchid,line width=2pt,transform canvas={xshift=0.25\PfCTrioHauteur,yshift=0.25\PfCTrioHauteur}] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) to (TS-\fpeval{##2+3+\PfCTrioAjout-1}-\fpeval{##1+2+\PfCTrioAjout}.center);%
          \else%
            \tikz[remember picture,overlay]\draw[Orchid,line width=2pt,transform canvas={xshift=-0.25\PfCTrioHauteur,yshift=-0.25\PfCTrioHauteur}] (TS-\fpeval{##2+\PfCTrioAjout}-\fpeval{##1+\PfCTrioAjout}.center) to (TS-\fpeval{##2+3+\PfCTrioAjout-1}-\fpeval{##1+2+\PfCTrioAjout}.center);%
          \fi%
        }{}%
      }%
    }%
    % Calculs des diag négatives (ascendantes)
    \xintFor* ##2 in{\xintSeq{1}{\PfCTrioMaxB}}\do{%
      \xintFor* ##1 in{\xintSeq{2}{\fpeval{\PfCTrioMaxB+1}}}\do{%
        \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
        \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+1}]}%
        \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-2)+##2+2}]}%
        \TrioTestCible[\NbCibleSolution]{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
        \xintifboolexpr{\PfCRetourTestCible==1}{%
          \xdef\PfCNbSolutionDM{\fpeval{\PfCNbSolutionDM+1}}%
          \modulo{\PfCNbSolutionDM}{2}%
          \ifnum\remainder=0\relax%
            \tikz[remember picture,overlay]\draw[Lavender,line width=2pt,transform canvas={xshift=-0.25\PfCTrioHauteur,yshift=0.25\PfCTrioHauteur}] (TS-\fpeval{##1+\PfCTrioAjout+1}-\fpeval{##2+\PfCTrioAjout}.center) to (TS-\fpeval{##1+\PfCTrioAjout-1}-\fpeval{##2+3+\PfCTrioAjout-1}.center);%
          \else%
            \tikz[remember picture,overlay]\draw[Lavender,line width=2pt,transform canvas={xshift=0.25\PfCTrioHauteur,yshift=-0.25\PfCTrioHauteur}] (TS-\fpeval{##1+\PfCTrioAjout+1}-\fpeval{##2+\PfCTrioAjout}.center) to (TS-\fpeval{##1+\PfCTrioAjout-1}-\fpeval{##2+3+\PfCTrioAjout-1}.center);%
          \fi%
        }{}%
      }%
    }%
  }{}%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
}%

\NewDocumentCommand\TrioCourt{o}{%
  \useKVdefault[Trio]%
  \setKV[Trio]{#1}%
  \xdef\PfCTitiH{0}%
  \xdef\PfCTitiV{0}%
  \xdef\PfCTitiDM{0}%
  \xdef\PfCTitiDD{0}%
  \ifboolKV[Trio]{Horizontal}{\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{Vertical}{\xdef\PfCTitiH{1}\xdef\PfCTitiDM{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{DiagonaleM}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDD{1}}{}%
  \ifboolKV[Trio]{DiagonaleD}{\xdef\PfCTitiH{1}\xdef\PfCTitiV{1}\xdef\PfCTitiDM{1}}{}%
  \setcounter{PfCTrioLettre}{\useKV[Trio]{Colonne}-1}%
  \ifboolKV[Trio]{Repere}{\xdef\PfCTrioNbCases{4}}{\xdef\PfCTrioNbCases{3}}%
  \setlength{\PfCTrioHauteur}{\useKV[Trio]{Largeur}+\tabcolsep}%
  \begin{NiceTabular}{*{\PfCTrioNbCases}{m{\useKV[Trio]{Largeur}}}}[hvlines]%
    \CodeBefore%
    \ifboolKV[Trio]{Cibles}{%
      \ifboolKV[Trio]{Repere}{%
        \xdef\PfCTrioAjout{1}%
      }{%
        \xdef\PfCTrioAjout{0}%
      }%
      % Calculs des horizontaux
      \ifnum\fpeval{\PfCTitiH}=0\relax
        \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}+2}}}\do{%
          \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}}}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+1}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1+2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{\tikz\draw[fill=Cornsilk,line width=2pt] (\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});\xintBreakFor}{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi%
      % Calculs des verticaux
      \ifnum\fpeval{\PfCTitiV}=0\relax
        \xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
          \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{\tikz\draw[fill=LightSteelBlue,line width=2pt] (\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});\xintBreakFor}{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi
      % Calculs des diag positives (descendantes)
      \ifnum\fpeval{\PfCTitiDD}=0\relax
        \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Ligne}}{\useKV[Trio]{Ligne}}}\do{%
          \xintFor* ##1 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2-1)+##1}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2)+##1+1}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##2+1)+##1+2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \tikz\draw[fill=MistyRose,line width=2pt] (\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##2+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \xintBreakFor}{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi
      % Calculs des diagonales négatives (montantes)
      \ifnum\fpeval{\PfCTitiDM}=0\relax
        \xintFor* ##2 in{\xintSeq{\useKV[Trio]{Colonne}}{\useKV[Trio]{Colonne}}}\do{%
          \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}}}}\do{%
            \xdef\PfCTrioNombreA{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1+1)+##2}]}%
            \xdef\PfCTrioNombreB{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1)+##2+1}]}%
            \xdef\PfCTrioNombreC{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2+2}]}%
            \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
            \xintifboolexpr{\PfCRetourTestCible==1}{%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+3+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+1+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+2+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \tikz\draw[fill=LavenderBlush,line width=2pt] (\fpeval{##1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+2+\PfCTrioAjout-\useKV[Trio]{Colonne}+1}) rectangle (\fpeval{##1+1+\PfCTrioAjout-\useKV[Trio]{Ligne}+1}-|\fpeval{##2+3+\PfCTrioAjout-\useKV[Trio]{Colonne}+1});%
              \xintBreakFor%
            }{}%
          }%
          \TrioTestCible{\PfCTrioNombreA}{\PfCTrioNombreB}{\PfCTrioNombreC}%
          \xintifboolexpr{\PfCRetourTestCible==1}{%
            \xintBreakFor
          }{}%
        }%
      \fi%
    }{}%
    \Body
    \ifboolKV[Trio]{Repere}{%
      \rule{0pt}{\PfCTrioHauteur}\Block[fill=gray!15]{}{}\xintFor* ##1in{\xintSeq{1}{3}}\do{%
        &\Block[fill=gray!15]{}{\ifboolKV[Trio]{VideRepere}{}{\stepcounter{PfCTrioLettre}\Alph{PfCTrioLettre}}}%
      }\\%
    }{}%
    \xintFor* ##1 in{\xintSeq{\fpeval{\useKV[Trio]{Ligne}}}{\fpeval{\useKV[Trio]{Ligne}+2}}}\do{%%
      \rule{0pt}{\PfCTrioHauteur}%
      \ifboolKV[Trio]{Repere}{\Block[fill=gray!15]{}{\ifboolKV[Trio]{VideRepere}{}{##1}}}{}%
      \ifboolKV[Trio]{Repere}{&}{}\xintFor* ##2 in{\xintSeq{\fpeval{\useKV[Trio]{Colonne}}}{\fpeval{\useKV[Trio]{Colonne}+2}}}\do{%
        \xintifForFirst{}{&}\Block{}{\ifboolKV[Trio]{Vide}{}{\num{\PfCTrioMelange[\fpeval{\PfCTrioMaxA*(##1-1)+##2}]}}}%
      }\\
    }%
  \end{NiceTabular}%
}%