(* 10-03 *)

(* Require XMLgen_MC.nb ver >=0.04 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
TTS[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]]}];
Col[A_,n_]:=Transpose[{A[[Range[Length[A]],n]]}];
ColCat[CL_]:=Join@@@(Transpose@CL);
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
Title="2次正方行列とベクトルの積";
SELNUM=6;NUM=100;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤300,ct++,
V={{Rnz[4]},{Rnz[4]}};
QtList=Append[QtList,{RandomInteger[1]+2,V}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

ColCat[{{{1},{2}},{{3},{4}}}]

V={{1},{2}};V1={{3},{4}};
RV=Transpose[V];RV1=Transpose[V1];

Join[RV,RV1]

QtextF[mm_]:=Module[{Cn,V},{Cn,V}=QtList[[mm]];
Return["次の行列とベクトルの積の結果が\\("<>TOT[V]<>"\\)となるものをすべて選べ"]];

CListF[mm_]:=Module[{Cn,V,V1,V2,RV,RV1,M2,ve1,ve2,va,fs,ret={}},
{Cn,V}=QtList[[mm]];fs="正解です.";
ve1={{1},{0}};ve2={{0},{1}};
V1={{Rnz[3]},{Rnz[3]}};While[V1==V,V1={{Rnz[3]},{Rnz[3]}}];
M2=ColCat[{V,V1}];
ret=Append[ret,{"\\("<>TOT[M2]<>TOT[ve1]<>"\\)",fs}];
M2=ColCat[{V1,V}];
ret=Append[ret,{"\\("<>TOT[M2]<>TOT[ve2]<>"\\)",fs}];
V2=V-V1;va=ve1+ve2;
M2=ColCat[{V1,V2}];
ret=Append[ret,{"\\("<>TOT[M2]<>TOT[va]<>"\\)",fs}];
Return[RandomSample[ret,Cn]]];

QtextF[3]

CListF[3]

ICListF[mm_]:=Module[{Cn,V,V1,V2,RV,RV1,RV2,M2,ve1,ve2,va,fs1,fs2,ret1={},ret2={},sel1,sel2},
{Cn,V}=QtList[[mm]];sel1=Rpos[1];sel2=SELNUM-Cn-sel1;
fs1="数ベクトル(縦ベクトル)\\(\\times\\)行列は定義されません.";
fs2="行ベクトル\\(\\times\\)行列は定義されますが, 結果は行ベクトルになります.行と列を混同してはいけません.";
ve1={{1},{0}};ve2={{0},{1}};
V1={{Rnz[3]},{Rnz[3]}};While[V1==V,V1={{Rnz[3]},{Rnz[3]}}];
M2=ColCat[{V,V1}];
ret1=Append[ret1,{"\\("<>TOT[ve1]<>TOT[M2]<>"\\)",fs1}];
M2=ColCat[{V1,V}];
ret1=Append[ret1,{"\\("<>TOT[ve2]<>TOT[M2]<>"\\)",fs1}];
V2=V-V1;va=ve1+ve2;
M2=ColCat[{V1,V2}];
ret1=Append[ret1,{"\\("<>TOT[va]<>TOT[M2]<>"\\)",fs1}];
ret1=RandomSample[ret1,sel1];
RV=Transpose[V];RV1={{Rnz[3],Rnz[3]}};M2=Join[RV,RV1];
ret2=Append[ret2,{"\\("<>TOTT[ve1]<>TOT[M2]<>"\\)",fs2}];
RV=Transpose[V];RV1={{Rnz[3],Rnz[3]}};M2=Join[RV1,RV];
ret2=Append[ret2,{"\\("<>TOTT[ve2]<>TOT[M2]<>"\\)",fs2}];
RV1={{Rnz[3],Rnz[3]}};RV2=RV-RV1;M2=Join[RV1,RV2];
ret2=Append[ret2,{"\\("<>TOTT[va]<>TOT[M2]<>"\\)",fs2}];
ret2=RandomSample[ret2,sel2];
Return[Join[ret1,ret2]]];

QtextF[3]

QtList[[5]]

ICListF[5]

GenerateMCxml[DFname[],"LA/10-03."<>Title<>"(MC1)",Title,NUM,"false",QtextF,CListF,ICListF]

Col[{{1,2},{3,4}},1]

Join[{a,b},{c,d}]

RandomSample[Append[{a,b},c],2]