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

(* Global Options *)
Shuffle="true";Numbering="abc";
(* Numbers of select options and questions *)
SELNUM=5;Single="false";NUM=300;Title="パラメータの置き方";

TTS[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TTSt[eq_]:=ToString[TeXForm[StandardForm[eq]]];
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]]}];
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
ai2tex[s_]:=StringReplace[TOT[s],Table["\\text{a"<>TOT[i]<>"}"->"{\\mathbf a}_"<>TOT[i],{i,1,5}]];
ci2tex[c_,s_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
TOTci2tex[c_,s_]:=StringReplace[TOT[s],Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
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]]];

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

(* select pairs of matrices *)
QtList={}; For[ct=1,ct≤300,ct++,
Cn=RandomChoice[{2,2,3,3,3}];
Vars=RandomChoice[{{x,y,z},{x1,x2,x3}}];
row=2;col=3;
MA=RandomEchelonPV2[row,col,{1,2},{-3,-2,-1,1,2,3,4}];
Mb=Table[Rnz[3],row];
QtList=Append[QtList,{Cn,{Vars,MA,Mb}}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,row,col,Ri,MA,Mb,Vars,ret},
{Cn,{Vars,MA,Mb}}=QtList[[mm]];
ret="次の連立1次方程式のパラメータ表示として適切なものをすべて選べ\n";
row=Length[MA];col=Length[MA[[1]]];
ret=ret<>"\\(\\left\\{\\begin{array}{ccc}\n";
For[Ri=1,Ri≤row,Ri++,
ret=ret<>TOTci2tex["x",MA[[Ri]].Vars]<>"&=&"<>TOT[Mb[[Ri]]];
If[Ri<row,ret=ret<>"\\\\"];ret=ret<>"\n"];
ret=ret<>"\\end{array}\\right.\\)\n";Return[ret]];

CListF[mm_]:=Module[{Cn,row,col,Ct,MA,Mb,Vars,vx,vy,vz,fs,fs1,eqS,pars={p,s,t},ret={}},
{Cn,{Vars,MA,Mb}}=QtList[[mm]];fs="正解です.";
fs1=fs<>"パラメータは\\(z=p\\)といても\\(z=-t\\)とおいても構いません.";
vx=Vars[[1]];vy=Vars[[2]];vz=Vars[[3]];
For[Ct=1,Ct<=Length[pars],Ct++,eqS="\\(";
eqS=eqS<>TOTci2tex["x",vx]<>"="<>TTSt[Mb[[1]]-MA[[1,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vy]<>"="<>TTSt[Mb[[2]]-MA[[2,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vz]<>"="<>TOT[pars[[Ct]]]<>","<>TOT[pars[[Ct]]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs}]];
For[Ct=1,Ct<=Length[pars],Ct++,eqS="\\(";
eqS=eqS<>TOTci2tex["x",vx]<>"="<>TTSt[Mb[[1]]+MA[[1,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vy]<>"="<>TTSt[Mb[[2]]+MA[[2,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vz]<>"="<>TOT[-pars[[Ct]]]<>","<>TOT[pars[[Ct]]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs1}]];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,row,col,Ct,MA,Mb,Vars,vx,vy,vz,pm,fs1,fs2,fs3,eqS,pars={p,s,t},ret={}},
{Cn,{Vars,MA,Mb}}=QtList[[mm]];
fs1="未知変数の文字を残してはいけません. たとえ, \\(z=t\\)であっても置き換えることによってパラメータ表示が意味を持ちます.";
fs2="代入して等式を満たすかどうか確かめよう.";
fs3="パラメータは必要最低限にしなければなりません.";
eqS="\\(";vx=Vars[[1]];vy=Vars[[2]];vz=Vars[[3]];
eqS=eqS<>ci2tex["x",TOT[vx]<>"="<>TTSt[Mb[[1]]-MA[[1,3]]*vz]]<>",";
eqS=eqS<>ci2tex["x",TOT[vy]<>"="<>TTSt[Mb[[2]]-MA[[2,3]]*vz]]<>",";
eqS=eqS<>ci2tex["x",TOT[vz]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs1}];
(* For[Ct=1,Ct<=Length[pars],Ct++, *)
Ct=RandomChoice[Range[Length[pars]]];
eqS="\\(";
eqS=eqS<>TOTci2tex["x",vx]<>"="<>TTSt[-Mb[[1]]-MA[[1,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vy]<>"="<>TTSt[-Mb[[2]]-MA[[2,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vz]<>"="<>TOT[pars[[Ct]]]<>","<>TOT[pars[[Ct]]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs2}];
eqS="\\(";
eqS=eqS<>TOTci2tex["x",vx]<>"="<>TTSt[-Mb[[1]]-MA[[1,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vy]<>"="<>TTSt[-Mb[[2]]-MA[[2,3]]*pars[[Ct]]]<>",";
eqS=eqS<>TOTci2tex["x",vz]<>"="<>TOT[-pars[[Ct]]]<>","<>TOT[pars[[Ct]]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs2}];
(* ] *)
pm=Permutations[pars,{2}];
(* For[Ct=1,Ct<=Length[pm],Ct++,eqS="\\("; *)
eqS="\\(";
Ct=RandomChoice[Range[Length[pm]]];
eqS=eqS<>TOTci2tex["x",vx]<>"="<>TTSt[Mb[[1]]-MA[[1,3]]*pm[[Ct,1]]]<>",";
eqS=eqS<>TOTci2tex["x",vy]<>"="<>TTSt[Mb[[2]]-MA[[2,3]]*pm[[Ct,2]]]<>",";
eqS=eqS<>TOTci2tex["x",vz]<>"="<>TOT[pm[[Ct,1]]]<>","<>TOT[pm[[Ct,1]]]<>","<>TOT[pm[[Ct,2]]]<>"\\in{\\mathbb R}";
eqS=eqS<>"\\)";ret=Append[ret,{eqS,fs3}];
(*];*)
Return[RandomSample[ret,SELNUM-Cn]]];

ICListF[40]

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

GenerateMCxml[DFname[],Category<>Title<>"(MC2)",Title,NUM,Single,QtextF,CListF,ICListF]

QtextF[40]

#->Nothing &/@ Permutations[{1,2,3},{2}]

RandomEchelonRank[3,4,0,{-1,1}]