(* 21-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],{"{"->"(","}"->")"}];
(* xi2tex[fm_]:=StringReplace[TOT[fm],{"\\text{x"->"x_","}"->""}]; *)
xi2tex[s_]:=StringReplace[TOT[s],Table["\\text{x"<>TOT[i]<>"}"->"x_"<>TOT[i],{i,1,5}]];
Title="基本変形に対応する基本行列との積";Numbering="abc";
SELNUM=5;NUM=200;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤400,ct++,
m=RandomChoice[{3,3,3,3,4,4,4}];
n=RandomChoice[{3,3,4,4,4,4,4,5,5}];
MC=Table[Table[Rnz[3],{j,1,n}],{i,1,m}];
r=RandomChoice[{"R","C"}];c=Rnz[3];
If[r=="R",
{i,j}=RandomSample[Table[i,{i,1,m}],2],
{i,j}=RandomSample[Table[i,{i,1,n}],2]];
p=RandomChoice[{"P","Q","R"}];
QtList=Append[QtList,{1,{m,n,i,j,c,p,r,MC}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

GetET[m_,n_,i_,j_,c_,p_,r_]:=Module[{ETs,ET,LR,mn,i1,j1},
If[r=="R",LR="左";mn=m,LR="右";mn=n];
Which[p=="P",ET=GetPnijc[mn,i,j,c];
ETs="\\("<>p<>"_"<>TOT[mn]<>"("<>TOT[i]<>","<>TOT[j]<>";"<>TOT[c]<>")="<>TOT[ET]
<>"\\)を"<>LR<>"からかける",
p=="Q",ET=GetQnic[mn,i,c];ETs="\\("<>p<>"_"<>TOT[mn]<>"("<>TOT[i]<>";"<>TOT[c]<>")="<>TOT[ET]
<>"\\)を"<>LR<>"からかける",
True,{i1,j1}=Sort[{i,j}];ET=GetRnij[mn,i,j];
ETs="\\("<>p<>"_"<>TOT[mn]<>"("<>TOT[i1]<>","<>TOT[j1]<>")="<>TOT[ET]
<>"\\)を"<>LR<>"からかける"];
Return[{ETs,ET}]];

QtextF[mm_]:=Module[{Cn,m,n,i,j,c,p,r,MC,MC1,ETs,ET},
{Cn,{m,n,i,j,c,p,r,MC}}=QtList[[mm]];
{ETs,ET}=GetET[m,n,i,j,c,p,r];
MC1=If[r=="R",ET.MC,MC.ET];
Return["次の変形はある基本変形を1回行ったものである."
<>"どのような基本行列をどのようにかけたものか次のうち正しいものを選びなさい.<br/>"
<>"\\("<>TOT[MC]<>"\\rightarrow"<>TOT[MC1]<>"\\)"]];

CListF[mm_]:=Module[{Cn,m,n,mn,i,j,c,p,r,MC,MCs,ETs,ET,fs,ret={}},
{Cn,{m,n,i,j,c,p,r,MC}}=QtList[[mm]];fs="正解です.";
{ETs,ET}=GetET[m,n,i,j,c,p,r];
ret=Append[ret,{ETs,fs}];
Return[RandomSample[ret,Cn]]]

ICListF[mm_]:=Module[{Cn,m,n,i,j,i1,j1,c,p,PQR1,r,r1,MC,MC1,ETs,ET,fs1,fs2,ret={}},
{Cn,{m,n,i,j,c,p,r,MC}}=QtList[[mm]];
fs1="変化しているのは行か列か確認してみよう";
fs2="どの行(列)が変化していますか?2行(列)が変化していれば交換です";
PQR1=StringPartition[StringReplace["PQR",{p->""}],1];
r1=StringPartition[StringReplace["RC",{r->""}],1][[1]];
(* pattern fs1 *)
For[ct=1,ct≤3,ct++,p={"P","Q","R"}[[ct]];
If[r1=="R",{i1,j1}=RandomSample[Table[i,{i,1,m}],2];
{ETs,ET}=If[Max[{i,j}]≤m,GetET[m,n,j,i,c,p,r1],GetET[m,n,i1,j1,c,p,r1]],
{i1,j1}=RandomSample[Table[i,{i,1,n}],2];
{ETs,ET}=If[Max[{i,j}]≤n,GetET[m,n,j,i,c,p,r1],GetET[m,n,i1,j1,c,p,r1]]];
ret=Append[ret,{ETs,fs1}]];
(* pattern fs2 *)
For[ct=1,ct≤2,ct++,p=PQR1[[ct]];
If[r=="R",{i1,j1}=RandomSample[Table[i,{i,1,m}],2];
{ETs,ET}=If[Max[{i,j}]≤m,GetET[m,n,i,j,c,p,r],GetET[m,n,i1,j1,c,p,1]],
{i1,j1}=RandomSample[Table[i,{i,1,n}],2];
{ETs,ET}=If[Max[{i,j}]≤n,GetET[m,n,i,j,c,p,r],GetET[m,n,i1,j1,c,p,r]]];
ret=Append[ret,{ETs,fs2}]];
Return[RandomSample[ret,SELNUM-Cn]]];

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

QtextF[30]

CListF[30]

ICListF[30]

TOT[(3,5)]