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

(* Global Options *)
DebugMode=False;Shuffle="true";Numbering="abc";
(* Numbers of select options and questions *)
Single="true";SELNUM=8;NUM=300;Title="逆行列の計算(4次)";

TTSt[mt_]:=ToString[TeXForm[StandardForm[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) *)
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]]];

ZSweepOutDemo[MA_]:=Module[{MA1,EM,EM1,En,ct,sz},sz=Length[MA];
En=IdentityMatrix[sz];EM=En;MA1=MA;
For[ct=1,ct≤sz,ct++,
{MA1,EM1}=ZSweepOut1[MA1,ct,ct];EM=EM1.EM;
Print[{MatrixForm[MA1],MatrixForm[EM1]}];
While[EM1≠En,{MA1,EM1}=ZSweepOut1[MA1,ct,ct];EM=EM1.EM];
If[MA1[[ct,ct]]==0,Print["The matrix is not regular."];Return[Null]]];
Return[EM]]

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

(* select pairs of matrices *)
QtList={}; For[ct=1,ct≤NUM*1.3,ct++,
(* row=col=RandomChoice[{2,2,3,3,3}]; *)
Cn=RandomChoice[{0,0,1,1,1,1,1,1}];
sz=4;
While[!MemberQ[{1,2},Abs[Det[MA=Table[Table[Rnz[1],sz],sz]]]]];
MAI=Inverse[MA];
QtList=Append[QtList,{Cn,{sz,MA,MAI}}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

MemberQ[{1,2},2]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,sz,MA,MAI,ret},
{Cn,{sz,MA,MAI}}=QtList[[mm]];
If[DebugMode,ret=MatrixForm[ColCat[{MA,MAI}]],
ret="\\("<>TOT[sz]<>"\\)次正方行列\\(A="<>TOT[MA]<>"\\)の"
<>"逆行列を計算し, 以下より選べ"];
Return[ret]];

(* For using GenMCxmlV2 *)

AListF[mm_]:=Module[{Cn,sz,MA,MAI,Tmp,fsL={},i,j,retC={},retI={}},
{Cn,{sz,MA,MAI}}=QtList[[mm]];
fsL=Append[fsL,"正解です."];
fsL=Append[fsL,"その通り, 正解はこの中にはありませんね."];
fsL=Append[fsL,"違います. かけ算を正確に検算をしよう."];
fsL=Append[fsL,"違います. 列変形を混ぜてはいませんか?"];
fsL=Append[fsL,"違います. 正解はこの中にあります."];
If[Cn==0,retC=Append[retC,{"C","この中に他に正解はない.",fsL[[2]]}],retC=Append[retC,{"C",IfDeb[MatrixForm[MAI],"\\("<>TOT[MAI]<>"\\)"],fsL[[1]]}]];
If[Cn==1,retI=Append[retI,{"I","この中に他に正解はない.",fsL[[5]]}]];
Tmp=GetRnij[sz,1,2].MAI;If[Tmp≠MAI,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[3]]}]];
Tmp=GetRnij[sz,1,3].MAI;If[Tmp≠MAI,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[3]]}]];
Tmp=MAI.GetRnij[sz,2,3];If[Tmp≠MAI,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[4]]}]];
While[Length[retI]<SELNUM-1,
Tmp=MAI;{i,j}=RandomChoice[Range[sz],2];Tmp[[i,j]]=Tmp[[i,j]]+Rnz[1];If[Tmp≠MAI,
retI=Append[retI,{"I",IfDeb[MatrixForm[Tmp],"\\("<>TOT[Tmp]<>"\\)"],fsL[[3]]}]]];
Return[Join[{{1,SELNUM-1}},retC,retI]]];

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

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