(* 21-01 基本変形の定義 *)

(* 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=4;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}];
RC=RandomChoice[{"R","C"}];c=Rnz[3];
If[RC=="R",
{i,j}=RandomSample[Table[i,{i,1,m}],2],
{i,j}=RandomSample[Table[i,{i,1,n}],2]];
PQR=RandomChoice[{"P","Q","R"}];
QtList=Append[QtList,{1,{m,n,i,j,c,PQR,RC,MC}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

GetET[m_,n_,i_,j_,c_,PQR_,RC_]:=Module[{ETs,ET},
Which[PQR=="P",
If[RC=="R",
ETs="\\("<>TOT[j]<>"\\)行の\\("<>TOT[c]<>"\\)倍を\\("<>TOT[i]<>"\\)行に加える";ET=GetPnijc[m,i,j,c],
ETs="\\("<>TOT[i]<>"\\)列の\\("<>TOT[c]<>"\\)倍を\\("<>TOT[j]<>"\\)列に加える";
ET=GetPnijc[n,i,j,c]],
PQR=="Q",
If[RC=="R",
ETs="\\("<>TOT[i]<>"\\)行を\\("<>TOT[c]<>"\\)倍する";ET=GetQnic[m,i,c],
ETs="\\("<>TOT[i]<>"\\)列を\\("<>TOT[c]<>"\\)倍する";ET=GetQnic[n,i,c]],
True,
If[RC=="R",
ETs="\\("<>TOT[i]<>"\\)行と\\("<>TOT[j]<>"\\)行を交換する";ET=GetRnij[m,i,j],
ETs="\\("<>TOT[i]<>"\\)列と\\("<>TOT[j]<>"\\)列を交換する";ET=GetRnij[n,i,j]]];
Return[{ETs,ET}]];

QtextF[mm_]:=Module[{Cn,m,n,i,j,c,PQR,RC,MC,ETs,ET},
{Cn,{m,n,i,j,c,PQR,RC,MC}}=QtList[[mm]];
{ETs,ET}=GetET[m,n,i,j,c,PQR,RC];
Return["行列\\(A="<>TOT[MC]<>"\\)に対し, 基本変形「"<>ETs<>"」を行って得られるものをえらびなさい."]];

CListF[mm_]:=Module[{Cn,m,n,i,j,c,PQR,RC,MC,MC1,ETs,ET,fs,ret={}},
{Cn,{m,n,i,j,c,PQR,RC,MC}}=QtList[[mm]];fs="正解です.";
{ETs,ET}=GetET[m,n,i,j,c,PQR,RC];
If[RC=="R",MC1=ET.MC,MC1=MC.ET];
ret=Append[ret,{"\\("<>TOT[MC1]<>"\\)",fs}];
Return[RandomSample[ret,Cn]]]

CListF[20]

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]];
MC1=ET.MC,
{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]];
MC1=MC.ET];
ret=Append[ret,{"\\("<>TOT[MC1]<>"\\)",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]];
MC1=ET.MC,
{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]];
MC1=MC.ET];
ret=Append[ret,{"\\("<>TOT[MC1]<>"\\)",fs2}]];
Return[RandomSample[ret,SELNUM-Cn]]];

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

QtextF[30]

CListF[30]

ICListF[43];