(* Require XMLgen_MC.nb ver >=0.24 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
DebugMode=False;
ThisNo=StringReplace[StringSplit[ NotebookFileName[],"/"][[-1]],{"LA_"->"",".nb"->"","_"->"-"}];
Category="LA/"<>ThisNo<>".";

(* Global Options *)
Shuffle="false";Single="true";Title="行列の積(計算可能な場合のみ)";
SELNUM=8;NUM=300;Numbering="abc";
GeneralFeedback="";

TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TTSt[eq_]:=ToString[TeXForm[StandardForm[eq]]];
TOC[mt_,c_]:=TOTT[{Transpose[mt][[c]]}];
TTD[r_]:=StringReplace[TT[r],"\\frac"->"\\dfrac"];
MFT[m_]:=MatrixForm[Transpose[m]];
MF[m_]:=MatrixForm[m];
Rnz[m_]:=(RandomInteger[m]+1)*(2*RandomInteger[1]-1); (* \\pm 1,\pm2,...,\pm(m+1) *)
Rpos[m_]:=RandomInteger[m]+1; (* 1,2,...,m+1 *)
Rbtw[m_]:=RandomInteger[2m]-m;
TTC[A_,n_]:=TOTT[{(Transpose[A])[[n]]}];
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
ai2tex[s_]:=StringReplace[TOT[s],Table["\\text{a"<>TOT[i]<>"}"->"{\\mathbf a}_"<>TOT[i],{i,1,8}]];
ci2tex[c_,s_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
ci2tex[c_,s_,tx_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{"<>tx<>c<>"}_"<>TOT[i],{i,1,8}]];
TOTci2tex[c_,s_]:=StringReplace[TOT[s],Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,8}]];
TeXArray2Matrix[s_,mtx_]:=StringReplace[s,Join[{"array"->mtx,"\\left("->"","\\right)"->""},#->"" &/@ ("{"<>StringRepeat["c",#]<>"}" &/@ Reverse[Range[20]])]];
TAM[s_,mtx_]:=TeXArray2Matrix[TOT[s],mtx];
TpStr[L_]:="\\("<>TOT[L[[1]]]<>"\\times"<>TOT[L[[2]]]<>"\\)";
TpTpse[L_]:=If[L=={},{},{L[[2]],L[[1]]}];
PType[A_,B_]:=If[A=={}||B=={},Return[{}],
If[A[[2]]===B[[1]],Return[{A[[1]],B[[2]]}],Return[{}]]];
PTypeL[L_]:=Module[{ct,len,tmp},len=Length[L];
Which[len==0,Return[{}],len==1,Return[L[[1]]],
len==2,Return[PType[L[[1]],L[[2]]]],
True,tmp=L[[1]];For[ct=2,ct≤len,ct++,tmp=PType[tmp,L[[ct]]]];Return[tmp]]];
GCDL[L_]:=Module[{ct,ret=0},For[ct=1,ct≤Length[L],ct++,ret=GCD[ret,L[[ct]]]];Return[ret]];

Clear[p,q,r,s,t,u,v,x,y,z]

(* select pairs of matrices *)
MAlist={-3,-2,-2,-1,-1,-1,0,1,1,1,1,1,2,2,2,3};
MBlist={-2,-1,-1,-1,1,1,1,1,1,2,2,2,2,3};
QtList={}; For[ct=1,ct≤NUM*1.05,ct++,
Cn=RandomChoice[{0,0,1,1,1}];
r1=RandomChoice[{2,2,2,3,3}];
c2=RandomChoice[{2,2,3,3,3}];
If[{r1,c2}=={3,3},r2=c1=RandomChoice[{2,2,2,2,2,3,3,4}],
r2=c1=RandomChoice[{2,3,3,3,3,4,4,4}]];
MA=Table[Table[RandomChoice[MAlist],c1],r1];
MB=Table[Table[RandomChoice[MBlist],c2],r2];
QtList=Append[QtList,{Cn,r1,c1,r2,c2,MA,MB}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,r1,c1,r2,c2,MA,MB,MC,mx,ret},mx="pmatrix";
{Cn,r1,c1,r2,c2,MA,MB}=QtList[[mm]];MC=MA.MB;ret=IfDeb[{MatrixForm[#] &/@ {MA,MB,MC}},
"次の行列の積を計算し, 下記から選びなさい.\\("<>TAM[MA,mx]<>TAM[MB,mx]<>"\\)"];
Return[ret]];

DebOn[];QtextF[205]

AListF[mm_]:=Module[{Cn,r1,c1,r2,c2,MA,MB,MC,MC1,mx,Tmp,fsL={},ret={}},
{Cn,r1,c1,r2,c2,MA,MB}=QtList[[mm]];MC=MA.MB;mx="pmatrix";
fsL=Append[fsL,"正解です."];fsL=Append[fsL,"正解です. この中に正解はありません."];
fsL=Append[fsL,"違います. 他に正解があります."];
fsL=Append[fsL,"違います. 計算ミスではありませんか?"];
If[Cn==1,
ret=Append[ret,{"C",IfDeb[MF[MC],"\\("<>TAM[MC,mx]<>"\\)"],fsL[[1]]}]];
While[Length[ret]<SELNUM-1,
MC1=MC;MC1[[RandomChoice[Range[r1]],RandomChoice[Range[c2]]]]=RandomInteger[10]-5;
If[MC1≠MC,ret=Append[ret,{"I",IfDeb[MF[MC1],"\\("<>TAM[MC1,mx]<>"\\)"],fsL[[4]]}]];
ret=DeleteDuplicates[ret]];
ret=RandomSample[ret];(* Require pre-Shuffle *)
If[Cn==0,
ret=Append[ret,{"C",IfDeb[Null,"この中に正解はない."],fsL[[2]]}],
ret=Append[ret,{"I",IfDeb[Null,"この中に正解はない."],fsL[[3]]}]];
Return[Join[{{1,SELNUM-1}},ret]]];

QtextF[5]

AListF[20]

For[ct=1,ct≤NUM,ct++,Print[ct];QtextF[ct];AListF[ct]]; (* Error Check *)

DebOn[];QtextF[1]

DebOff[];GenMCxmlV2[DFname[1],Category<>Title<>"(MC1)",Title,NUM,Single,QtextF,AListF]

#->Nothing &/@ Permutations[{1,2,3},{2}]