(* 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="true";Single="true";Title="行に関する基本変形と基本行列の積";
SELNUM=6;NUM=300;Numbering="abc";

IfDeb[a_,b_]:=If[DebugMode,a,b];DebOn[]:=DebugMode=True;DebOff[]:=DebugMode=False;
TTSt[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TOC[mt_,c_]:=TOTT[{Transpose[mt][[c]]}];
TTD[r_]:=StringReplace[TT[r],"\\frac"->"\\dfrac"];
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}]];
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]];
IfDeb[a_,b_]:=If[DebugMode,a,b];

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

(* select pairs of matrices *)
MAlist=Range[-3,3];
QtList={}; For[ct=1,ct≤NUM*1.3,ct++,
row=RandomChoice[{2,2,2,3,3}];
col=RandomChoice[{2,3,3,3,4,4}];
MA=Table[Table[Rnz[2],col],row];
MPL={};While[Length[MPL]<SELNUM+5,
{i,j}=RandomSample[Range[row],2];
P1=GetPnijc[row,i,j,Rnz[2]]; Q1=GetQnic[row,RandomChoice[Range[row]],Rnz[0]];
{i,j}=RandomSample[Range[row],2];R1=GetRnij[row,i,j];
MPL=Join[MPL,RandomSample[{P1.Q1,P1.R1,Q1.R1,Q1.P1,R1.P1,R1.Q1},3]];MPL=DeleteDuplicates[MPL]];
QtList=Append[QtList,{1,{row,col,MA,RandomSample[MPL,SELNUM]}}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,row,col,MA,MPL,P1,ret},
{Cn,{row,col,MA,MPL}}=QtList[[mm]];P1=MPL[[1]];
If[DebugMode,ret=MatrixForm[ColCat[{P1.MA,P1}]],
ret="以下は, ある\\(n\\)行\\(m\\)列の行列\\(A\\)について,"
<>"\\(A\\)と\\(n\\)次単位行列\\(E_n\\)を横にならべた行列 \\((A E_n)\\)を"
<>"行に関する基本変形により変形している途中で得られたものである."
<>"\\(A\\)は何か? 答えよ.<br/>\n"
<>"\\(A = "<>TOT[ColCat[{P1.MA,P1}]]<>"\\)"];
Return[ret]];

QtextF[3]

(* For using GenMCxmlV2 *)

AListF[mm_]:=Module[{Cn,row,col,MA,MA1,MPL,P1,fsL={},ct,Tmp,retC={},retI={}},
{Cn,{row,col,MA,MPL}}=QtList[[mm]];fsL=Append[fsL,"正解です."];
fsL=Append[fsL,"違います. 単位行列のあった場所の行列は基本変形の何を表しますか?"];
fsL=Append[fsL,"違います. 列変形をしていませんか?"];
P1=MPL[[1]];MA1=P1.MA;
retC=Append[retC,{"C",IfDeb[MatrixForm[MA],"\\("<>TOT[MA]<>"\\)"],fsL[[1]]}];
Tmp=MPL[[1]].MA1;
If[Tmp≠MA,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[2]]}]];
If[row==col,Tmp=MA1.Inverse[MPL[[1]]];
If[Tmp≠MA,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[3]]}]]];
ct=2;While[Length[retI]<SELNUM-1,P1=MPL[[ct]];ct++;Tmp=Inverse[P1].MA1;
If[Tmp≠MA,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[2]]}]];
retI=DeleteDuplicates[retI]];
Return[Join[{{1,SELNUM-1}},retC,retI]]];

QtextF[3]

Inverse[{{1,0,0},{0,1,1},{0,0,2}}]

QtList[[2]]

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

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

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

col=5

ToExpression[QtextF[3],TeXForm]

QtextF[3]

ToExpression[AListF[3][[2,2]],TeXForm]