(* 05_04 *)

(* 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 *)
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],{"{"->"(","}"->")"}];
TOPt[A_]:="\\(("<>TOT[A[[1]]]<>","<>TOT[A[[2]]]<>","<>TOT[A[[3]]]<>")\\)";
Title="ねじれの位置";
SELNUM=5;NUM=200;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤1000,ct++,
Wp={Rnz[3],Rnz[2],Rnz[1]};Wu={Rnz[2],Rnz[3],Rnz[1]};
WvL={};
While[Length[WvL]≤SELNUM,a=Rpos[1];b=Rpos[1];c=Rpos[1];
Wv={Rnz[a],Rnz[b],Rnz[c]};
While[MatrixRank[{Wv,Wu}]==1,Wv={Rnz[a],Rnz[b],Rnz[c]}];
WvL=Append[WvL,Wv];WvL=DeleteDuplicates[WvL]];
QtList=Append[QtList,{RandomChoice[{1,2,2,2,3,3}],Wp,Wu,WvL}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];
Length[QtList]

QtextF[mm_]:=Module[{Cn,Wp,Wu,WvL,Wx},{Cn,Wp,Wu,WvL}=QtList[[mm]];
Wx=TOTT[{{x,y,z}}];
Return["次のパラメータ表示を持つ直線のうち, 直線\\("<>Wx<>"="<>TOTT[{Wp}]
<>"+s"<>TOTT[{Wu}]<>", s\\in{\\mathbb R}\\)とねじれの位置の位置の関係にあるものをすべて選びなさい"]];

QtextF[3]

QtList[[3]]

CListF[mm_]:=Module[{Cn,Wp,Wu,WvL,Wx,Wq,Wn,ct,fs,ret={}},
{Cn,Wp,Wu,WvL}=QtList[[mm]];Wx=TOTT[{{x,y,z}}];fs="正解です.";
For[ct=1,ct≤Length[WvL],ct++,
Wn=NullSpace[{Wu,WvL[[ct]]}][[1]];Wq=Wp+Rnz[0]*Wu+Rnz[0]*Wn;
 (* While[Wq.Wq>3*13^2,Wq=Wp+Rnz[0]*Wu+Rnz[0]*Wn]; *)
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{Wq}]<>"+t"<>TOTT[{WvL[[ct]]}]<>"\\)",fs}]];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,Wp,Wu,WvL,Wx,Wq,Wn,ct,s1,t1,fs1,fs2,fs,ret1={},ret2={}},
Wx=TOTT[{{x,y,z}}];{Cn,Wp,Wu,WvL}=QtList[[mm]];
fs1="与えられた直線と平行です.";
fs2="与えられた直線と交点を持つようです.";
(* pattern fs1 *)
For[ct=1,ct≤Length[WvL],ct++,
Wq=Wp+Rnz[1]*WvL[[ct]];
ret1=Append[ret1,{"\\("<>Wx<>"="<>TOTT[{Wq}]<>"+t"<>TOTT[{Wu}]<>"\\)",fs1}]];
(* pattern fs2 *)
For[ct=1,ct≤Length[WvL],ct++,
s1=Rnz[2];t1=RandomChoice[{-1,-1,0,1,1,2}];
Wq=Wp+s1*Wu-t1*WvL[[ct]];
fs=fs2<>"\\(s="<>TOT[s1]<>",t="<>TOT[t1]<>"\\)です";
ret2=Append[ret2,{"\\("<>Wx<>"="<>TOTT[{Wq}]<>"+t"<>TOTT[{WvL[[ct]]}]<>"\\)",fs}]];
ret1=RandomSample[ret1,1];
ret2=RandomSample[ret2,SELNUM-Cn-1];
Return[Join[ret1,ret2]]];

QtextF[10]

CListF[10]

ICListF[10]

Solve[{1,2,-1}+s{2,-1,1}=={1,2,-1}+t{4,2,2},{s,t}]

GenerateMCxml[DFname[],"LA/05-04."<>Title<>"(MC1)",Title,NUM,"false",QtextF,CListF,ICListF]