(* 12-02 *)

(* 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="対角行列の定義と性質";
Numbering="abc";
GeneralFeedback="対角成分以外が \\(0\\) である行列を対角行列という.";
GeneralFeedback=GeneralFeedback<>"対角行列同士の積は可換である.";
GeneralFeedback=GeneralFeedback<>"一般に対角行列同士の積は可換である.";
GeneralFeedback=GeneralFeedback<>"行列に対角行列\\((d_{ij})\\)を左からかけると\\(i\\)行が"
GeneralFeedback=GeneralFeedback<>"行列に対角行列\\((d_{ij})\\)を右からかけると\\(i\\)列が"
GeneralFeedback=GeneralFeedback<>"それぞれ\\(d_{ii}\\)倍されます.";
SELNUM=4;NUM=200;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤300,ct++,
sz=RandomChoice[{2,2,2,2,3,3,3}];
MA=Table[Table[Rnz[2],{j,1,sz}],{i,1,sz}];
DM=DiagonalMatrix[RandomSample[Join[Range[-4,-1],Range[2,5]],sz]];
QtList=Append[QtList,{1,{sz,MA,DM,LR=RandomChoice[{"L","R"}]}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

QtextF[mm_]:=Module[{Cn,sz,MA,DM,LR,MB},{Cn,{sz,MA,DM,LR}}=QtList[[mm]];
MB=If[LR=="L",DM.MA,MA.DM];
Return["行列\\(A="<>TOT[MA]<>"\\)にある対角行列をかけたところ, \\("<>TOT[MB]<>"\\)となった.何をどのようにかけたのか."]];

CListF[mm_]:=Module[{Cn,sz,MA,DM,LR,LRs,MB,fs,ret={}},
{Cn,{sz,MA,DM,LR}}=QtList[[mm]];fs="正解です.";
LRs=If[LR=="L","左","右"];
MB=If[LR=="L",DM.MA,MA.DM];
ret=Append[ret,{"\\("<>TOT[DM]<>"\\)を"<>LRs<>"から",fs}];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,ct,sz,MA,DM,LR,LRs,LRs1,MB,DM1,PatL={},fs1,fs2,fs3,ret={}},
{Cn,{sz,MA,DM,LR}}=QtList[[mm]];
fs1="左からと右からとでかけられた行列がどうなるか考えてみよう.";
fs2="対角行列の定義をおさらいしよう.";
fs3="その対角行列でいいのでしょうか?";
LRs=If[LR=="L","左","右"];
LRs1=If[LR=="L","右","左"];
(* fs1 *)
PatL=Append[PatL,{DM,LRs1,fs1}];
(* fs2 *)
DM1=DM;DM1[[1,2]]=Rnz[1];
PatL=Append[PatL,{DM1,LRs,fs2}];
DM1=DM;DM1[[sz,1]]=Rnz[1];
PatL=Append[PatL,{DM1,LRs,fs2}];
PatL=Append[PatL,{DM1,LRs1,fs1<>fs2}];
(* fs3 *)
DM1=DM;DM1[[2,2]]=DM[[1,1]];DM1[[1,1]]=DM[[2,2]];
PatL=Append[PatL,{DM1,LRs,fs3}];
If[sz>2,DM1=DM;DM1[[sz,sz]]=DM[[1,1]];DM1[[1,1]]=DM[[sz,sz]];
PatL=Append[PatL,{DM1,LRs,fs3}]];
For[ct=1,ct≤Length[PatL],ct++,
ret=Append[ret,{"\\("<>TOT[PatL[[ct,1]]]<>"\\)を"<>PatL[[ct,2]]<>"から",PatL[[ct,3]]}]];
Return[RandomSample[ret,SELNUM-Cn]]];

QtextF[3]

QtList[[5]]

QtextF[5]

CListF[5]

ICListF[10]

GenerateMCxml[DFname[],"LA/12-02."<>Title<>"(MC1)",Title,NUM,"true",QtextF,CListF,ICListF]

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

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

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

RandomSample[Range[3],2]

MA={{2,4,6},{3,6,9},{5,10,15}}

GCD[Flatten[MA[[2]]]]

? GCD

? Flatten

? GCD

GCD[MA[[2,1]],MA[[2,2]],MA[[2,3]]]

sz=3

? List

DM=DiagonalMatrix[RandomSample[Join[Range[-4,-1],Range[2,5]],sz]]

DM

DM

s