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

(* Global Options *)
Shuffle="true";Numbering="abc";
(* Numbers of select options and questions *)
SELNUM=5;Single="false";NUM=300;Title="1次方程式のパラメータ表示(3変数)";

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,8}]];
ci2tex[c_,s_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,5}]];
ci2tex[c_,s_,tx_]:=StringReplace[s,Table["\\text{"<>c<>TOT[i]<>"}"->"{"<>tx<>" "<>c<>"}_"<>TOT[i],{i,1,8}]];
TOTci2tex[c_,s_]:=StringReplace[TOT[s],Table["\\text{"<>c<>TOT[i]<>"}"->"{\\mathbf "<>c<>"}_"<>TOT[i],{i,1,8}]];
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]]];
GCDL[L_]:=Module[{ct,ret=0},For[ct=1,ct≤Length[L],ct++,ret=GCD[ret,L[[ct]]]];Return[ret]];

GCDL[{6,9,15,22}]

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

(* select pairs of matrices *)
MAlist={-3,-2,-1,0,0,0,0,1,2,3};
QtList={}; For[ct=1,ct≤300,ct++,
Cn=RandomChoice[{1,1,2,2,2,3,3}];
MA=Table[RandomChoice[MAlist],3];
Mx0=Table[Rnz[3],3];
While[MA=={0,0,0},MA=Table[RandomChoice[MAlist],3]];
g=GCDL[MA];MA=MA/g;Mb=MA.Mx0;
QtList=Append[QtList,{Cn,MA,Mx0,Mb}]];
(* QtList=DeleteDuplicates[QtList]; *)
QtList=RandomSample[QtList,NUM];Length[QtList]

QtList[[80]]

Clear[QtextF];QtextF[mm_]:=Module[{Cn,MA,Mx0,Mb,eqS,ret},
{Cn,MA,Mx0,Mb}=QtList[[mm]];
eqS=TOT[{x,y,z}.MA];
ret="\\(x,y,z\\)の1次方程式\\("<>eqS<>"="<>TOT[Mb]<>"\\)のパラメータ表示として適切なものをすべて選べ.";
Return[ret]];

CListF[mm_]:=Module[{Cn,MA,Mx0,Mx1,Mb,pr,pS,ct,NB,V1,V2,fs,Wx,ret={}},
{Cn,MA,Mx0,Mb}=QtList[[mm]];fs="正解です.";Mx1=Mx0;
For[ct=1,ct≤3,ct++,If[MA[[ct]]==0,Mx1[[ct]]=0]];
NB=NullSpace[{MA}];
V1={NB[[1]]};V2={NB[[2]]};
pr=Sort[RandomSample[{p,q,r,s,t},2]];
Wx=TOTT[{{x,y,z}}];
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[V1]<>"+"<>TOT[pr[[2]]]<>TOTT[V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
pr=Sort[RandomSample[{p,q,r,s,t},2]];
pS=TOTT[{Mx1}+V1]<>"+"<>TOT[pr[[1]]]<>TOTT[V1+V2]<>"+"<>TOT[pr[[2]]]<>TOTT[V1-V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
pr=Sort[RandomSample[{p,q,r,s,t},2]];
pS=TOTT[{Mx1}+V2]<>"+"<>TOT[pr[[1]]]<>TOTT[V1-2*V2]<>"+"<>TOT[pr[[2]]]<>TOTT[2*V1+V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
Return[RandomSample[ret,Cn]]];

QtextF[30]

ICListF[mm_]:=Module[{Cn,MA,Mx0,Mx1,Mb,pr,pS,k,ct,NB,V1,V2,fs,Wx,ret={}},
{Cn,MA,Mx0,Mb}=QtList[[mm]];fs="正解です.";Mx1=Mx0;
For[ct=1,ct≤3,ct++,If[MA[[ct]]==0,Mx1[[ct]]=0]];Wx=TOTT[{{x,y,z}}];
pr=Sort[RandomSample[{p,q,r,s,t},2]];
NB=NullSpace[{MA}];V1={NB[[1]]};V2={NB[[2]]};
(* case 1 *)
fs="\\(p=q=0\\)と置くと\\({\\mathbf 0}\\)になってしまいますが, \\(x=y=z=0\\)は解ではありません.";
pS=TOT[pr[[1]]]<>TOTT[V1]<>"+"<>TOT[pr[[2]]]<>TOTT[V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
k=Rnz[2];pS=TOT[pr[[1]]]<>TOTT[V1+k*V2]<>"+"<>TOT[pr[[2]]]<>TOTT[V2-k*V1];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
(* case 2 *)
fs="\\(p,q\\)の係数となるベクトルはどのような方程式を満たすか考えてみよう.";
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[{Mx1}+V1]<>"+"<>TOT[pr[[2]]]<>TOTT[{Mx1}+V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
k=Rnz[2];
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[{Mx1}+k*V1+V2]<>"+"<>TOT[pr[[2]]]<>TOTT[{Mx0}+V1-k*V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
k=Rnz[2];
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[{Mx1}+V1-k*V2]<>"+"<>TOT[pr[[2]]]<>TOTT[{Mx1}+k*V1+V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
(* case 3 *)
fs="\\(p=q=0\\)としたときのベクトル,\\(p,q\\)の係数となるベクトルがどのような方程式の解なのか考えよう.";
pS=TOTT[{Mx1+Table[Rnz[1],3]}]<>"+"<>TOT[pr[[1]]]<>TOTT[{Mx1}+V1]<>"+"<>TOT[pr[[2]]]<>TOTT[{Mx1}+V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[{Table[Rnz[1],3]}+V1]<>"+"<>TOT[pr[[2]]]<>TOTT[V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
pS=TOTT[{Mx1}]<>"+"<>TOT[pr[[1]]]<>TOTT[V1]<>"+"<>TOT[pr[[2]]]<>TOTT[{Table[Rnz[1],3]}+V2];
pS=pS<>","<>TOT[pr[[1]]]<>","<>TOT[pr[[2]]]<>"\\in {\\mathbb R}\n";
ret=Append[ret,{"\\("<>Wx<>"="<>pS<>"\\)",fs}];
ret=DeleteDuplicates[ret];
Return[RandomSample[ret,SELNUM-Cn]]];

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

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

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

col=5

Permutations[Range[2,5]] /. Range[2,5]->Nothing

ICListF[30]

{x,y,z}.{1,2,3}