(* ::Package:: *) BeginPackage["Symbexv27`"]; (* Author Dara O Shayda, Nov 2012 - Present *) qPanel1::usage = "Sample question"; qPanel2::usage = "Sample question"; qPanel3::usage = "Sample question"; qPanel4::usage = "Sample question"; qPanel5::usage = "Sample question"; qPanel6::usage = "Sample question"; qPanel7::usage = "Sample question"; qPanel8::usage = "Sample question"; qSend::usage = "Send the clicks out"; qSendHD::usage = "Send the clicks out into hard disk"; qSendLocal::usage = "Send the clicks out"; readTitle::usage="Output test info + initialize"; readName::usage = "Send the clicks out"; Begin["`Private`"]; examIDString = "MTH140, Jan 2015, Prof. Nara Jung"; examIDString2 = "MTH140, Jan 2015, Prof. Nara Jung"; examName = "Logarithm Module"; examName2 = "Logarithm"; qMagnification = 1.2; bigNumber = 1000102010004455; (* [[2]] told me, I told [[3]], [[4]] book, it is all [[5]] *) qNamesList={{"Boza", "he", "him", "his", "his"}, {"Dara", "he", "him", "his", "his"} , {"Jack", "he", "him", "his", "his"}, {"Ginger", "she", "her", "her", "hers"}, {"Wayne", "he", "him", "his", "his"}, {"Spomenka", "she", "her", "her", "hers"}, {"George", "he", "him", "his", "his"}, {"Kevin", "he", "him", "his", "his"}, {"Tina", "she", "her", "her", "hers"}, {"Lucia", "she", "her", "her", "hers"}, {"Ahmad", "he", "him", "his", "his"},{"Abaz", "he", "him", "his", "his"}}; qNumList={{"one",1}, {"two",2}, {"three",3}, {"four",4}, {"five",5}, {"six",6}, {"seven",7}, {"eight",8}, {"nine",9}, {"ten",10}}; qConstants={"zero", "one", "two", "three", "four", "five", "six", "seven"}; qColorList={"red", "green", "blue", "yellow", "black", "white", "pink", "brown", "purple"}; qRandList[list0_]:=list0[[RandomInteger[{1, Length[list0]}]]] qCaps[x0_]:=Module[{x=x0}, x=Characters[x]; StringJoin[Join[{ToUpperCase[x[[1]]]}, Drop[x,1]]] ] (* only counts the True click *) qClick[n0_]:=DynamicModule[{n=n0}, (*qClicks[[n]][[2]] = 1;*) qAppend[{n,1,0}]; ] qClickPlus[n0_]:=DynamicModule[{n=n0}, (*qClicks[[n]][[3]] = 1;*) qAppend[{n,0,1}]; ] qTryAgainNOT[n_]:="" qNum = 0; (* number of questions *) qFlush[text_,id_]:=Module[{s,fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname=FileNameJoin[{$UserDocumentsDirectory,If[id==="","NOID",StringDrop[StringDrop[id,1],-1]]<>StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}]; s=OpenWrite[fname]; Write[s,text]; {Close[s], fname} ] qLog[text_,id_]:=Module[{s,fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname=FileNameJoin[{$UserDocumentsDirectory,If[id==="","NOID",StringDrop[StringDrop[id,1],-1]]<>StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}]; s=OpenAppend[fname]; Write[s,text]; {Close[s], fname} ] qAppend[text_]:=Module[{s,fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname=FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]; s=OpenAppend[fname]; Write[s,text]; {Close[s], fname} ] qFlushLAN[text_, id_, path_] := Module[{s, fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[ DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname = FileNameJoin[{path, If[id === "", "NOID", id] <> StringReplace[DateString[], {" " -> "_", ":" -> "_"}] <> "symbolix.txt"}]; s = OpenWrite[fname]; Write[s, text]; {Close[s], fname} ] qFlush2[dir_, prefix_,text_]:=Module[{s,fname}, fname=FileNameJoin[{dir,prefix<>"symbolix.txt"}]; s=OpenWrite[fname]; Write[s,text]; Close[s] ] qFlushLAN2[text_]:=Module[{s,fname}, fname=FileNameJoin[{"\\\\trinity.arts.ryerson.ca\\artslabshare\\dropbox","symbolix.txt"}]; s=OpenWrite[fname]; Write[s,text]; Close[s] ] qFlush2[dir_, prefix_,text_]:=Module[{s,fname}, fname=FileNameJoin[{dir,prefix<>"symbolix.txt"}]; s=OpenWrite[fname]; Write[s,text]; Close[s] ] writeID[id_]:=Module[{s,fname}, fname=FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]; s=OpenWrite[fname]; Write[s,id]; {Close[s], fname}; ] readID[]:=Module[{s,fname}, fname=FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]; Off[Import::nffil]; If[Import[fname,"Text"]===$Failed, "",Import[fname,"Text"]] ] qSendHD[]:=DynamicModule[{status="",a, body,text,ret1,ret2,tmp="",msg,res=False, track,res2,arg,Gg2, Gg3={},qClicks,q,first=True,studentID="", buttonEnable=False ,resF ,ID}, Manipulate[ (*Refresh[If[first==True,studentID=readID[], If[readID[]==="",studentID,studentID=readID[]]],UpdateInterval->1];*) text=Dynamic[status]; buttonEnable=Dynamic[If[studentID!="", True]]; body={{Dynamic[If[res==True,Text[Style["Checked Marks Indicate Correct Answers\n"<>"\nTo Track this test: email "<>ToString[track]<>", "<>IntegerString[Hash[ToString[Gg2]<>ToString[track]<>"Mehran1339","MD5"],16]<>" to Deidre Lam \n"<>"Test results stored in file: "<>res2[[2]],Red,Background->Yellow]], ""]],Dynamic[If[res==True,CheckboxBar[Range[qNum]*Gg3,Range[qNum], Appearance->"Vertical",Enabled->False], ""]], Dynamic[Which[(Length[Gg3]-Total[Gg3]<=1)&& (res == True), "\n\!\(\* StyleBox[\"Congratulations\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"!\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"You\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"passed\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"..\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]],(Length[Gg3]-Total[Gg3]>1)&& (res == True), "\n \!\(\* StyleBox[\"Please\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"study\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\"and\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"write\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"this\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"test\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"again\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\) "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]],True,""]]},{"","",""}}; Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left,Spacings->{4,0.5}(*,ItemSize->20)*)],text,ImageMargins->1],DefaultOptions->{InputField->{ContinuousAction->True},FontSize->Large}]], {{a, 0,""}, Column[{InputField[Dynamic[studentID], String, ContinuousAction->True,FieldHint->"Enter your ID"],Style[Dynamic[ Button["Send Answers",Off[Import::nffil];Off[DeleteFile::nffil]; If[ first == True,q=Import[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}],"List"]; Gg2=DeleteDuplicates[Table[ToExpression[q[[i]]],{i, 1, Length[q]}]]; Table[qClicks[[Gg2[[i]][[1]]]]=Gg2[[i]],{i,1 Length[Gg2]}]]; Gg2=qClicks[[1;;qNum]]; Gg3=Gg2[[1;;qNum,2]]; res=True; arg=studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"gilan1339","MD5"],16];res2=qFlush[arg,studentID]; resF=URLFetch["http://symbolicexams.lossofgenerality.com/wp-content/plugins/test-receiver/results.php","Parameters"->{"results"->studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"Mehran1339","MD5"],16]},"ReadTimeout"->10,"ConnectTimeout"->50,"Method"->"POST"]; (*qLog[ToString[resF],studentID];*) status=If[resF===$Failed,"Failure to Send Answers, see MY DOCUMENTS for results file\nTake snapshot of the screen","Answers Sent, Good Luck!\n"];If[ first==True,DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]]];first=False;DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]];(*<>ToString[res2[[1]]]*)(*Clear["Global`*"];ClearAll[qClickPlus,qClick,readName]*),Method->"Queued" ,Enabled->buttonEnable]],DynamicEvaluationTimeout->Infinity] }]&}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,SynchronousUpdating->False,ContinuousAction->False, Initialization:>(track=RandomInteger[{100000,900000}];qClicks = {{1, 0, -1, ""}, {2, 0, -1, ""}, {3, 0, -1, ""}, {4, 0, -1, ""}, {5, 0, -1, ""}, {6, 0, -1, ""},{7, 0, -1, ""},{8, 0, -1, ""},{9, 0, -1, ""},{10, 0, -1, ""}};first=True;studentID="";buttonEnable=False;Gg3={})] ] qSendLocal[path_,name_]:=DynamicModule[{status="",a, body,text,ret1,ret2,tmp="",msg,res=False, track,res2,arg,Gg2, Gg3={},qClicks,q,first=True,studentID="", buttonEnable=False ,resF ,ID}, Manipulate[ (*Refresh[If[first==True,studentID=readID[], If[readID[]==="",studentID,studentID=readID[]]],UpdateInterval->1];*) text=Dynamic[status]; buttonEnable=Dynamic[If[studentID!="", True]]; body={{Dynamic[If[res==True,Text[Style["Checked Marks Indicate Correct Answers\n"<>"\nTo Track this test: email "<>ToString[track]<>", "<>IntegerString[Hash[ToString[Gg2]<>ToString[track]<>"Mehran1339","MD5"],16]<>" to Deidre Lam \n"<>"Test results stored in file: "<>res2[[2]],Red,Background->Yellow]], ""]],Dynamic[If[res==True,CheckboxBar[Range[qNum]*Gg3,Range[qNum], Appearance->"Vertical",Enabled->False], ""]], Dynamic[Which[(Length[Gg3]-Total[Gg3]<=1)&& (res == True), "\n\!\(\* StyleBox[\"Congratulations\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"!\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"You\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"passed\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"..\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]],(Length[Gg3]-Total[Gg3]>1)&& (res == True), "\n \!\(\* StyleBox[\"Please\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"study\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\"and\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"write\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"this\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"test\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"again\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\) "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]],True,""]]},{"","",""}}; Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left,Spacings->{4,0.5}(*,ItemSize->20)*)],text,ImageMargins->1],DefaultOptions->{InputField->{ContinuousAction->True},FontSize->Large}]], {{a, 0,""}, Column[{InputField[Dynamic[studentID], String, ContinuousAction->True,FieldHint->"Enter your ID"],Style[Dynamic[ Button["Send Answers",Off[Import::nffil];Off[DeleteFile::nffil]; If[ first == True,q=Import[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}],"List"]; Gg2=DeleteDuplicates[Table[ToExpression[q[[i]]],{i, 1, Length[q]}]]; Table[qClicks[[Gg2[[i]][[1]]]]=Gg2[[i]],{i,1 Length[Gg2]}]]; Gg2=qClicks[[1;;qNum]]; Gg3=Gg2[[1;;qNum,2]]; res=True; arg=studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"gilan1339","MD5"],16];res2=qFlushLAN[arg,studentID,path]; resF=URLFetch["http://symbolicexams.lossofgenerality.com/wp-content/plugins/test-receiver/results.php","Parameters"->{"results"->studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"Mehran1339","MD5"],16]},"ReadTimeout"->10,"ConnectTimeout"->50,"Method"->"POST"]; (*qLog[ToString[resF],studentID];*) status=If[resF===$Failed,"Failure to Send Answers, see MY DOCUMENTS for results file\nTake snapshot of the screen","Answers Sent, Good Luck!\n"];If[ first==True,DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]]];first=False;DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]];(*<>ToString[res2[[1]]]*)(*Clear["Global`*"];ClearAll[qClickPlus,qClick,readName]*),Method->"Queued" ,Enabled->buttonEnable]],DynamicEvaluationTimeout->1000000] }]&}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,SynchronousUpdating->False,ContinuousAction->False, Initialization:>(track=RandomInteger[{100000,900000}];qClicks = {{1, 0, -1, ""}, {2, 0, -1, ""}, {3, 0, -1, ""}, {4, 0, -1, ""}, {5, 0, -1, ""}, {6, 0, -1, ""},{7, 0, -1, ""},{8, 0, -1, ""},{9, 0, -1, ""},{10, 0, -1, ""}};first=True;studentID="";buttonEnable=False;Gg3={};examName2=name;examName=name; examIDString2=name;)] ] readTitle[logo_,course_,prof_]:=DynamicModule[{x="",a, body,inputs, text=Null,studentID}, Manipulate[ Pane@"", "", TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,SynchronousUpdating->False, Initialization:>(Off[Import::nffil];Off[DeleteFile::nffil];qClicks = {{1, 0, -1, ""}, {2, 0, -1, ""}, {3, 0, -1, ""}, {4, 0, -1, ""}, {5, 0, -1, ""}, {6, 0, -1, ""},{7, 0, -1, ""},{8, 0, -1, ""},{9, 0, -1, ""},{10, 0, -1, ""}};qNum=0;studentID=""; DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]];DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}];qNum=0;](*If[DayCount[dateIssued, DateList[]] > experationInterval, Exit[]];*);SetOptions[EvaluationNotebook[],PrivateNotebookOptions->{"PluginToolbarEnabled"->False}, DockedCells->Cell[BoxData[ToBoxes[Row[{Column[{Image[logo,ImageSize->200],course, prof},ItemSize->{20,Automatic}],PopupMenu[Dynamic[CurrentValue[EvaluationNotebook[],"Magnification"]],Range[0.5,3,0.5]]},Spacer[5]]]],"DockedCell"]];),Paneled->False] ] readName[]:=DynamicModule[{x="",a, body,inputs, text=Null,studentID}, Manipulate[ (* If has to use TrueQ[]!!! *) text=Dynamic[If[TrueQ[x==Null], "", "ID Registered: "<>studentID]]; inputs=InputField[Dynamic[x], String, FieldHint->"Enter your ID"]; body={{inputs,Text[Style[examName<>"\n"<>examIDString,Red]]},{"",""}}; (*Refresh[studentID=studentID2 ,UpdateInterval->2,TrackedSymbols:>{studentID2}];*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left,Spacings->{4,0.5}(*,ItemSize->20)*)],text,ImageMargins->1],DefaultOptions->{InputField->{ContinuousAction->True},FontSize->Large}]], {{a, 0,""}, Button["Press To Register ID", studentID = x;writeID[studentID]]&}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,SynchronousUpdating->False, Initialization:>(Off[Import::nffil];Off[DeleteFile::nffil];studentID=""; (*DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]];*)DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]]),Paneled->False] ] qTrunc1[a0_]:=If[IntegerQ[Ceiling[100*a0]/100], Ceiling[100*a0]/100, N[Ceiling[100*a0]/100]] qTrunc2[a0_]:=N[Floor[100*a0]/100] qTrunc3[a0_]:=N[Ceiling[10*a0]/10] qTrunc4[a0_]:=N[Floor[10*a0]/10] qTrunc5[a0_]:=N[Round[10*a0]/10] qSign[a0_]:=Which[a0>0, "+"<>ToString[Abs[a0]], a0<0, "-"<>ToString[Abs[a0]], a0==0, "0"] qSign2[a0_]:=Which[a0>0, "+", a0<0, "-", a0==0, ""] qSign3[a0_]:=Which[a0>0, "+"<>ToString[Abs[a0]], a0<0, "-"<>ToString[Abs[a0]], a0==0, "-0"] qSign4[a0_]:=Which[a0>0, "+"<>ToString[Abs[a0]], a0<0, "-"<>ToString[Abs[a0]], a0==0, "+0"] qSign5[a0_]:=Which[a0>0, "+"<>ToString[Abs[a0],StandardForm], a0<0, "-"<>ToString[Abs[a0],StandardForm], a0==0, ""] qSign6[a0_]:=Which[a0==1, "",a0>0, "+"<>ToString[Abs[a0],StandardForm], a0<0, "-"<>ToString[Abs[a0],StandardForm], a0==0, ""] not0[x_]:=If[x==0, 1, x] threeDifferent[list_]:=Module[{i,j,k}, i=1;j=1;k=1; While[i==j||j==k||i==k, i=RandomInteger[{1, Length[list]}];j=RandomInteger[{1, Length[list]}];k=RandomInteger[{1, Length[list]}];]; {list[[i]], list[[j]], list[[k]]} ] twoDifferent[list_]:=Module[{i,j}, i=1;j=1; While[i==j, i=RandomInteger[{1, Length[list]}];j=RandomInteger[{1, Length[list]}];]; {list[[i]], list[[j]]} ] qPanelsolution1[vars_]:=DynamicModule[{body,a,b,m,n,lhs,rhs,nn,sols,x,xx}, {a,b,m,n,lhs,rhs}=vars; nn=2^n; x=.; body={{ ToString[lhs, TraditionalForm]<>"=("<>ToString[(2^m), TraditionalForm]<>")("<>ToString[nn^"x", TraditionalForm]<>")\n", ToString[lhs, TraditionalForm]<>"=("<>ToString[(2^m), TraditionalForm]<>")("<>ToString[2^(ToString[n]*"x"), TraditionalForm]<>")\n", ToString[lhs, TraditionalForm]<>"=("<>ToString[2^ToString[m], TraditionalForm]<>")("<>ToString[2^(ToString[n]*"x"), TraditionalForm]<>")\n", (*ToString[lhs, TraditionalForm]<>"="<>ToString[2^(ToString[qSign2[n]*"x"]<>ToString[qSign2[m],TraditionalForm])<>ToString[Abs[m],TraditionalForm], TraditionalForm]<>"\n",*) ToString[lhs, TraditionalForm]<>"="<>ToString[2^ToString[(n*x+m)/.{x->"x"},TraditionalForm], TraditionalForm]<>"\n", "(bases equal so exponents must be equal)\n", ToString[(a*"x"+b),TraditionalForm]<>"="<>ToString[n*"x"+m,TraditionalForm]<>"\n", sols=Solve[a*x+b == n*x+m,x,Reals];xx=x/.sols[[1]];"x="<>ToString[xx, TraditionalForm]<>"\n",(* Plot[{lhs/.{"x"->x},rhs/.{"x"->x}},{x,xx-1,xx+1},PlotLegends->Placed[{lhs,ToString[(2^m), TraditionalForm]<>"\[Cross]"<>ToString[nn^"x", TraditionalForm]},Above]]*)"" }, {Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation1[pn_, vars_]:=Module[{a,b,m,n,lhs,rhs,nn}, {a,b,m,n,lhs,rhs}=vars; nn=2^n; variations={{"Solve "<>ToString[lhs, TraditionalForm]<>"=("<>ToString[(2^m), TraditionalForm]<>")"<>ToString[nn^"x", TraditionalForm]} }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers1[vars_]:=Module[{a,b,m,n,lhs,rhs,nn,xx,sols,x}, {a,b,m,n,lhs,rhs}=vars; {sols=Solve[a*x+b == n*x+m,x,Reals];xx=x/.sols[[1]];"x="<>ToString[2+xx, TraditionalForm],sols=Solve[a*x+b == n*x+m,x,Reals];xx=x/.sols[[1]];"x="<>ToString[xx-1, TraditionalForm],sols=Solve[a*x+b == n*x+m,x,Reals];xx=x/.sols[[1]];"x="<>ToString[xx, TraditionalForm],sols=Solve[a*x+b == n*x+m,x,Reals];xx=x/.sols[[1]];"x="<>ToString[xx+1, TraditionalForm]} ] qPanelTRYAGAIN1[]:=Module[{a,b,m,n,x}, a=1; n=1; While[a==n, a=not0[RandomInteger[{-5,5}]]; b=not0[RandomInteger[{-5,5}]]; m=not0[RandomInteger[{-5,5}]]; n=not0[RandomInteger[{-5,5}]];]; {a,b,m,n, 2^(a*x+b), (2^m)*((2^n)^x)}/.{x->"x"} ] qPaneHint1[vars_]:=Module[{}, body={{ "Convert each power to a common base.", "" }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR1[]:="" qPanel1[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN1[]; text=qPanelVariation1[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers1[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR1[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN1[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint1[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution1[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN1[]; text=qPanelVariation1[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers1[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR1[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution2[vars_]:=DynamicModule[{body,a,n,c,sqrtdelta,m,f,y,f2,f3,x,sols,t,xx1,xx2,sign}, {a,n,c,sqrtdelta,m,f,sign}=vars; f2=((a^(2*m*x))-y*a^(m*x) - c); f3=(t^2 - y*t-c); body={{ If[sign==1, "Bring all terms to left side:", "Multiply both sides by -1 and then bring all to left side:"], ToString[f, TraditionalForm]<>If[c>0,ToString[-c,TraditionalForm],"+"<>ToString[-c,TraditionalForm] ]<>"= 0", "Note:", ToString[(a^n)*a^(m*"x"),TraditionalForm]<>"=("<>ToString[(a^ToString[n]),TraditionalForm]<>")"<>ToString[a^(m*"x"),TraditionalForm]<>"="<>ToString[(a^n)*"t",TraditionalForm], ToString[(a^2)^(m*"x"),TraditionalForm]<>"="<>ToString[(a^"2")^(m*"x"),TraditionalForm]<>"="<>ToString[a^(2*m*"x"),TraditionalForm]<>"="ToString["t"^2, TraditionalForm], "Substitute t for "<>ToString[a^(m*"x"),TraditionalForm]<>" and "<>ToString["t"^2, TraditionalForm]<>" for "<>ToString[a^(2*m*"x"),TraditionalForm]<>"which is "<>ToString[(a^2)^(m*"x"),TraditionalForm]<>":\n", ToString[(f-c), TraditionalForm]<>"="<>ToString[f3/.{t->"t", y->a^n},TraditionalForm]<>"=0\n", "Solve the quadratic t ="<>ToString[((-"b")\[PlusMinus]Sqrt["b"^2-"4ac"])/"2a",TraditionalForm]<>":\n", sols=Solve[f3==0,{t}]/.{y->a^n};xx2=Max[{t/.sols[[1]], t/.sols[[2]]}];xx1=Min[{t/.sols[[1]], t/.sols[[2]]}]; "t = "<>ToString[xx1, TraditionalForm]<>", "<>ToString[xx2, TraditionalForm], "Solve x from by taking Log of each side: t="<>ToString[a^(m*"x"),TraditionalForm], sols=Solve[f3==0,{t}]/.{y->a^n};xx2=Max[{Log[(t/.sols[[1]])]/(m*Log[a]), Log[(t/.sols[[2]])]/(m*Log[a])}];xx1=Min[{Log[(t/.sols[[1]])]/(m*Log[a]), Log[(t/.sols[[2]])]/(m*Log[a])}]; (*If[xx1!=xx2, "Two Solutions:\n"<>ToString[Log[a,(X/.sols[[1]])]/(m), StandardForm]<>"\n"<>ToString[Log[a,(X/.sols[[2]])]/(m), StandardForm], "One Solution:\n"<>ToString[{a,(X/.sols[[1]]),Log[a, (X/.sols[[1]])]/(m)},StandardForm]]<>"\n",*) If[xx1!=xx2, "Two Solutions:\n"<>If[Log[a,(t/.sols[[1]])]/(m)!=0,If[a!=(t/.sols[[1]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[1]]), TraditionalForm]/m,TraditionalForm],ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[1]]), TraditionalForm]],ToString[1/m,TraditionalForm]] , "0"]<>"\n"<> If[Log[a,(t/.sols[[2]])]/(m)!=0,If[a!=(t/.sols[[2]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[2]]), TraditionalForm]/m,TraditionalForm],ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[2]]), TraditionalForm]],ToString[1/m,TraditionalForm]],"0"] , "One Solution:\n"<>If[Log[a,(t/.sols[[1]])]/(m)!=0 ,If[a!=(t/.sols[[1]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[1]]), TraditionalForm]/m,TraditionalForm],ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[(t/.sols[[1]]), TraditionalForm]],ToString[1/m,TraditionalForm]], "0"]]<>"\n", (*If [ xx1!=xx2, Plot[{f/.{"x"->x},c},{x,xx1-1,xx2+1},PlotLegends->Placed[{ToString[f, TraditionalForm],ToString[c]},Above]],Plot[{f/.{"x"->x},c},{x,xx1-1,xx1+1},PlotLegends->Placed[{ToString[f, TraditionalForm],ToString[c]},Above]]]*)"" }, {Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation2[pn_, vars_]:=Module[{a,n,c,sqrtdelta,m,f,sign}, {a,n,c,sqrtdelta,m,f,sign}=vars; variations={{"Solve for : "<>ToString[sign*f, TraditionalForm]<>"="<>ToString[sign*c]} }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers2[vars_]:=Module[{a,n,c,sqrtdelta,m,f,f3,X,y,xx1,xx2,sols,sols2,sols3,m1,m2,m3,a2,xxx1,xxx2,sign}, {a,n,c,sqrtdelta,m,f,sign}=vars; f3=f3=X^2 - y*X-c; sols=Solve[f3==0,{X}]/.{y->a^n}; xx1=Log[(X/.sols[[1]])]/(m*Log[a]); xx2=Log[(X/.sols[[2]])]/(m*Log[a]); m1=Abs[m]+1; m2=Abs[m]+2; m3=Abs[m]+3; a2=Abs[a]+1; xxx1=Abs[xx1]+1; xxx2=Abs[xx2]+2; sols2=Abs[{X/.sols[[1]],X/.sols[[2]]}]+1; sols3=Abs[{X/.sols[[1]],X/.sols[[2]]}]+RandomInteger[{2,4}]; { If[xxx1!=xxx1, "Two Solutions:\n"<>If[Log[a,(sols2[[1]])]/(m1)!=0,If[a!=(sols2[[1]]),If[m1!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]/m1,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]],ToString[1/m1,StandardForm]] , "0"]<>", "<> If[Log[a,(sols2[[2]])]/(m1)!=0,If[a!=(sols2[[2]]),If[m2!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[2]]), StandardForm]/m2,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[2]]), StandardForm]],ToString[1/m2,StandardForm]],"0"] , "One Solution: "<>If[Log[a,(sols2[[1]])]/(m1)!=0 ,If[a!=(sols2[[1]]),If[m1!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]/m1,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]],ToString[1/m1,StandardForm]], "0"]], If[xx1==xx2, "Two Solutions:\n"<>If[Log[a,(sols2[[1]])]/(m1)!=0,If[a!=(sols2[[1]]),If[m1!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]/m1,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]],ToString[1/m1,StandardForm]] , "0"]<>", "<> If[Log[a,(sols2[[2]])]/(m3)!=0,If[a!=(sols2[[2]]),If[m3!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[2]]), StandardForm]/m3,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[2]]), StandardForm]],ToString[1/m3,StandardForm]],"0"] , "One Solution: "<>If[Log[a,(sols2[[1]])]/(m3)!=0 ,If[a!=(sols2[[1]]),If[m3!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]/m3,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols2[[1]]), StandardForm]],ToString[1/m3,StandardForm]], "0"]], If[xx1!=xx2, "Two Solutions:\n"<>If[Log[a,(X/.sols[[1]])]/(m)!=0,If[a!=(X/.sols[[1]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[1]]), StandardForm]/m,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[1]]), StandardForm]],ToString[1/m,StandardForm]] , "0"]<>", "<> If[Log[a,(X/.sols[[2]])]/(m)!=0,If[a!=(X/.sols[[2]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[2]]), StandardForm]/m,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[2]]), StandardForm]],ToString[1/m,StandardForm]],"0"] , "One Solution: "<>If[Log[a,(X/.sols[[1]])]/(m)!=0 ,If[a!=(X/.sols[[1]]),If[m!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[1]]), StandardForm]/m,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(X/.sols[[1]]), StandardForm]],ToString[1/m,StandardForm]], "0"]], If[xxx1!=xxx2, "Two Solutions:\n"<>If[Log[a,(sols3[[1]])]/(m1)!=0,If[a!=(sols3[[1]]),If[m1!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[1]]), StandardForm]/m1,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[1]]), StandardForm]],ToString[1/m1,StandardForm]] , "0"]<>", "<> If[Log[a,(sols3[[2]])]/(m3)!=0,If[a!=(sols3[[2]]),If[m3!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[2]]), StandardForm]/m3,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[2]]), StandardForm]],ToString[1/m3,StandardForm]],"0"] , "One Solution: "<>If[Log[a,(sols3[[1]])]/(m3)!=0 ,If[a!=(sols3[[1]]),If[m3!=1,ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[1]]), StandardForm]/m3,StandardForm],ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(sols3[[1]]), StandardForm]],ToString[1/m3,StandardForm]], "0"]] } ] qPanelTRYAGAIN2[]:=Module[{a,n,c,sqrtdelta,m,sign}, {a,n,c,sqrtdelta,m}=makeVARS2[]; sign=1; sign=not0[RandomInteger[{-1,1}]]; {a,n,c,sqrtdelta,m,(((a^2)^(m*x))-a^(m*x+n)),sign }/.{x->"x"} (* add -c later on*) ] qPaneHint2[vars_]:=Module[{}, body={{ "Break down exponents and use a substitution", "" }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR2[]:="" (* this was also separated in order to allow for multiple versions in future without need to change TRYAGAIN *) makeVARS2[]:=Module[{list},list=DeleteCases[Flatten[Table[If[ a!=0&&Abs[a]!=1&&a>0&&EvenQ[-Sqrt[(a^(2*n))+4*c] +(a^n)]==True &&0<(-Sqrt[(a^(2*n))+4*c] +(a^n))<200&&(-Sqrt[(a^(2*n))+4*c] +(a^n))!=0,{a,n,c,Sqrt[(a^(2*n))+4*c]}],{a,-5,5},{n,-5,5},{c,-5,5}],2],Null]; Join[list[[RandomInteger[{1,Length[list]}]]], {not0[RandomInteger[{-5,5}]]}] ] qPanel2[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN2[]; text=qPanelVariation2[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers2[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR3[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN2[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint2[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution2[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN2[]; text=qPanelVariation2[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers2[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR2[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution3[vars_]:=DynamicModule[{body,a,b,c,d,lhs,rhs,f,y,f2,f3,x,sols,X,xx,xx2,expr1,expr2,num,fr,dem}, {a,b,c,d,lhs,rhs}=vars; body={{ "Apply Log function to each side of the equality\n", ToString[Log[ToString[a]^"x"],TraditionalForm]<>"=x"<>ToString[Log[ToString[a]],TraditionalForm]<>"="<>ToString[PowerExpand[Log[lhs]], TraditionalForm], ToString[Log[ToString[rhs, TraditionalForm]], TraditionalForm]<>"="<>ToString[Log[b],TraditionalForm]<>"("<>ToString[ToString[(c*"x"+d),TraditionalForm],TraditionalForm]<>")", ToString[expr1=PowerExpand[Log[lhs]], TraditionalForm]<>"="<>ToString[expr2=PowerExpand[Log[rhs]], TraditionalForm]<>"\n", "ln(ab) might be broken up to ln(a) + ln(b)\n", "Solve by moving x to one side and constants to other and factor x\n", ToString[expr1-expr2, TraditionalForm]<>"=0", ToString[ToString[expr1,TraditionalForm]<>ToString[-Expand[expr2],TraditionalForm],TraditionalForm]<>")=0", ToString[Collect[expr1-expr2,"x"], TraditionalForm]<>"=0", sols=Solve[((expr2-expr1)/.{"x"->x})==0,x ,Reals];"x="<>ToString[xx=(x/.sols[[1]]), TraditionalForm]; (*ANNA*) (*** KLUDGE :*) dem = Denominator[xx]; num = Numerator[xx]; "x="<>Which[((IntegerQ[num]==False && IntegerQ[dem]==False ) && xx!=0 ), Which[xx< 0 ,fr=ToString[((ToString[Abs[num],TraditionalForm])/(ToString[-Abs[dem],TraditionalForm])),TraditionalForm], xx>=0 , ToString[(ToString[num,TraditionalForm]/ToString[dem,TraditionalForm]),TraditionalForm]],True, ToString[xx, TraditionalForm] ](* ]*) (***) (*ANNA*) (*Plot[{lhs/.{"x"->x},rhs/.{"x"->x}},{x,xx-1,xx+1},PlotLegends->Placed[{ToString[lhs, TraditionalForm],ToString[rhs, TraditionalForm]},Above]]*) }, {Null,Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation3[pn_, vars_]:=Module[{a,b,c,d,lhs,rhs}, {a,b,c,d,lhs,rhs}=vars; variations={{"Solve : "<>ToString[lhs, TraditionalForm]<>"="<>ToString[rhs, TraditionalForm]} }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers3[vars_]:=Module[{a,b,c,d,lhs,rhs,f,f3,X,y,xx1,xx2,sols,sols2,sols3,m1,m2,m3,a2,x,xx,expr1,expr2,dem,num,fr}, {a,b,c,d,lhs,rhs}=vars; expr1=PowerExpand[Log[a^x]]; expr2=PowerExpand[Log[b^(c*x+d)]]; sols=Solve[(expr2-expr1)==0,x ,Reals]; xx=x/.sols[[1]]; { (*start: ANNA*) "x = "<>ToString[((Abs[d]+1) Log[b])/(-Log[a]+(c+1) Log[b]),TraditionalForm], "x = "<>ToString[(((Abs[d]+1) Log[b])/(Log[a]-(c+1) Log[b])),TraditionalForm], dem = Denominator[xx]; num = Numerator[xx]; "x = "<>Which[((IntegerQ[num]==False && IntegerQ[dem]==False ) && xx!=0 ), (*here should be also this condition, but with this <>ToString it is not working ok*) Which[xx< 0 ,fr=ToString[((ToString[Abs[num],TraditionalForm])/(ToString[-Abs[dem],TraditionalForm])),TraditionalForm], xx>=0 , ToString[(ToString[num,TraditionalForm]/ToString[dem,TraditionalForm]),TraditionalForm]],True, ToString[xx, TraditionalForm] ] , "x = "<>ToString[((d Log[b])/(Log[a]-(c+1) Log[b])),TraditionalForm] (*end: ANNA*) (*original: ToString[((Abs[d]+1) Log[b])/(-Log[a]+(c+1) Log[b]),TraditionalForm], ToString[-(((Abs[d]+1) Log[b])/(-Log[a]+(c+1) Log[b])),TraditionalForm], ToString[xx,TraditionalForm], ToString[-((d Log[b])/(-Log[a]+(c+1) Log[b])),TraditionalForm] *) } ] qPanelTRYAGAIN3[]:=Module[{a,b,c,d,lhs,rhs}, {a,b,c,d,lhs,rhs}=makeVARS3[]; {a,b,c,d,lhs,rhs} ] qPaneHint3[vars_]:=Module[{}, body={{ "Take Log of both sides.", "" }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR3[]:="" makeVARS3[]:=Module[{a,b,c,d,x}, a=2; b=2; c=1; (*While[a==b && Log[a]-c*Log[b]\[Equal]0, a=RandomInteger[{2,10}]; b=RandomInteger[{2,10}]; c=RandomInteger[{2,10}]; d=RandomInteger[{2,10}];];*) While[a==b , a=RandomInteger[{2,10}]; b=RandomInteger[{2,10}]; d=RandomInteger[{2,10}]; c=RandomInteger[{2,10}]; While[Log[a]-c*Log[b]==0, c=RandomInteger[{2,10}]; ]; ]; {a,b,c,d, a^x, b^(c*x+d)}/.{x->"x"} ] qPanel3[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN3[]; text=qPanelVariation3[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers3[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR3[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN3[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint3[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution3[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN3[]; text=qPanelVariation3[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers3[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR3[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution4[vars_]:=DynamicModule[{body,a,b,c,d,lhs,rhs,f,y,f2,f3,x,sols,X,xx1,xx2,expr1,expr2,yy1,yy2}, {a,b,c,d,f}=vars; f2=x*(b*x+c)-a^d; sols=Solve[f2==0,x,Reals]; {xx1,xx2}={x/.sols[[1]],x/.sols[[2]]}; f3=Log[a,x]+Log[a,b*x+c] -d; sols=Solve[f3==0,x,Reals]; If[Length[sols]==2,{yy1,yy2}={x/.sols[[1]],x/.sols[[2]]}, yy1=x/.sols[[1]]]; body={{ (*ToString[StringReplace[f,{"a"->ToString[a], "b"->ToString[b],"d"->ToString[d]}], TraditionalForm]<>"="<>ToString[d,StandardForm],*) Row[{f,"="<>ToString[d,StandardForm]}], ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString["x"*(b*"x"+c),TraditionalForm]<>"="<>ToString[d,StandardForm], ToString["x"*(b*"x"+c),TraditionalForm]<>"="<>ToString[a^ToString[d],TraditionalForm]<>"="<>ToString[a^d,TraditionalForm], ToString[Expand[x*(b*x+c)-a^d]/.{x->"x"},TraditionalForm]<>"=0", "Factor or solve the quadratic x ="<>ToString[((-"b")\[PlusMinus]Sqrt["b"^2-"4ac"])/"2a",StandardForm], "x="<>ToString[xx1,TraditionalForm]<>", "<>ToString[xx2,TraditionalForm], "Substitute x into original question to get valid outputs", If[Length[sols]==2, "Two valid solutions: "<>"x="<>ToString[yy1,TraditionalForm]<>", "<>ToString[yy2,TraditionalForm], "Only one valid solution: "<> ToString[yy1,TraditionalForm]],(* If[Length[sols]==1,Plot[{(f3+d)/.{"x"->x},d},{x,yy1-1,yy1+1},PlotLegends->Placed[{ToString[f, StandardForm],ToString[d, StandardForm]},Above]]]*)"" }, {Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation4[pn_, vars_]:=Module[{variations,a,b,c,d,f}, {a,b,c,d,f}=vars; (*variations={{"Solve : "<>ToString[StringReplace[f,{"a"->ToString[a], "b"->ToString[b],"d"->ToString[d]}], TraditionalForm]<>"="<>ToString[d]} };*) variations={Row@{"Solve : ",f,"="<>ToString[d]} }; (*text=ToString[pn]<>". "<>qRandList[variations]*) Row[{ToString[pn],". ",qRandList[variations]}] ] qPanelAnswers4[vars_]:=Module[{a,b,c,d,lhs,rhs,f,f3,X,y,xx1,xx2,sols,sols2,sols3,m1,m2,m3,a2,x,xx,expr1,expr2,yy1,yy2}, {a,b,c,d,f}=vars; f3=Log[a,x]+Log[a,b*x+c] -d; sols=Solve[f3==0,x]; If[Length[sols]==2,{yy1,yy2}={x/.sols[[1]],x/.sols[[2]]}, yy1=x/.sols[[1]];yy2=RandomInteger[{-5,5}]]; {"Only one valid solution: x="<> ToString[yy1-1,StandardForm],"Two valid solutions: "<>"x="<>ToString[yy1-1,StandardForm]<>", "<>ToString[yy2,StandardForm],If[Length[sols]==2, "Two valid solutions: "<>"x="<>ToString[yy1,StandardForm]<>", "<>ToString[yy2,StandardForm], "Only one valid solution: x="<> ToString[yy1,StandardForm]],"Two valid solutions: "<>"x="<>ToString[yy1,StandardForm]<>", "<>ToString[yy2+1,StandardForm]} ] (* the Solve is taking too long perhaps, hardwire the solutions in case *) qPanelTRYAGAIN4[]:=Module[{a,b,c,d,x}, {a,b,c,d}=makeVARS4[]; {a,b,c,d,ToString[Subscript[Log, ToString[a]],StandardForm]<>"x+"<>ToString[Subscript[Log, ToString[a]],StandardForm]<>StringReplace["(bxc)", {"b"->ToString[b],"c"->If[c!=0,qSign[c],""] }]} ] qPaneHint4[vars_]:=Module[{}, body={{ ToString[Subscript[Log, ToString["a"]],StandardForm]<>"("<>ToString["bc",StandardForm]<>")="<>ToString[Subscript[Log, ToString["a"]],StandardForm]<>ToString["(b)",StandardForm]<>"+"<>ToString[Subscript[Log, ToString["a"]],StandardForm]<>ToString["(c)",StandardForm], ToString[Subscript[Log, ToString["a"]],StandardForm]<>"("<>ToString["b"/"c",StandardForm]<>")="<>ToString[Subscript[Log, ToString["a"]],StandardForm]<>ToString["(b)",StandardForm]<>"-"<>ToString[Subscript[Log, ToString["a"]],StandardForm]<>ToString["(c)",StandardForm] }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR4[]:="" makeVARS4[]:=Module[{a,b,c,d,list},list=DeleteCases[Flatten[Table[If[IntegerQ[Sqrt[4 a^d b+c^2]]==True, {a,b,c,d}],{a, 2, 10},{b, 1, 10}, {c,-12, 12} , {d, -4, 4}], 3],Null]; list[[RandomInteger[{1, Length[list]}]]] ] qPanel4[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN4[]; text=qPanelVariation4[pn, vars]; answer="?"; (* answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; *) answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];Row[{text,"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)"}],C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;Row[{text,"\n\nAnswer Correct"}],B1,qClickPlus[pn];myEnabled=False;Row[{text,"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)"}],D1, myEnabled=False;qClickPlus[pn];Row[{text,"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)"}], True, Row[{text,"\n\nAnswer ?"}]]]; answers=qPanelAnswers4[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR4[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN4[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint4[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution4[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN4[]; text=qPanelVariation4[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers4[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR4[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution5v2[vars_]:=DynamicModule[{body,a,b,c,d,lhs,rhs,f,y,f2,f3,x,sols,X,xx1,xx2,expr1,expr2,yy1,yy2,lhs2,rhs2,min,max,sols2}, {a,b,c,lhs,rhs,lhs2,rhs2}=vars; rhs=Log[a, Sqrt[a*x+b]]; lhs=Log[a^2, x^2-c]; sols=Solve[(x^2-c-(a*x+b))==0,x,Reals]; {xx1,xx2}={x/.sols[[1]],x/.sols[[2]]}; sols=Solve[(lhs-rhs)==0,x,Reals]; Which[Length[sols]==2 && ((x/.sols[[1]])!=(x/.sols[[2]])),sols2={yy1,yy2}={x/.sols[[1]],x/.sols[[2]]},Length[sols]==2 && ((x/.sols[[1]])==(x/.sols[[2]])),yy1=x/.sols[[1]];sols2={yy1},Length[sols]==1, yy1=x/.sols[[1]];sols2={yy1},Length[sols]==0, sols2={}]; body={{ ToString[lhs2,TraditionalForm]<>"=y="<>ToString[rhs2,TraditionalForm], "Right hand side:", ToString[ToString[a]^"y", TraditionalForm]<>"="<>ToString[Sqrt[a*"x"+b],TraditionalForm], "Square both sides:", ToString[ToString[ToString[a]^"y", TraditionalForm]^2,TraditionalForm]<>"="<>ToString[ToString[a]^"2y", TraditionalForm]<>"="<>ToString[ToString[a^2,TraditionalForm]^"y", TraditionalForm]<>"="<>ToString[a*"x"+b,TraditionalForm], "Left hand side:", ToString[ToString[a^2]^"y", TraditionalForm]<>"="<>ToString["x"^2-c,TraditionalForm], (*ToString[lhs2,StandardForm]<>"="<>ToString[Subscript[Log, ToString[ToString[a]^2,StandardForm]],StandardForm]<>ToString[Sqrt[a*"x"+b]^"2", StandardForm], ToString[lhs2,StandardForm]<>"="<>ToString[Subscript[Log, ToString[ToString[a^2],StandardForm]],StandardForm]<>"("<>ToString[a*"x"+b, StandardForm]<>")",*) "\[DoubleLongRightArrow]"<>ToString["x"^2-c, TraditionalForm]<>"="<>ToString[a*"x"+b, TraditionalForm], "\[Therefore]"<>ToString[(x^2-c-(a*x+b))/.{x->"x"}, TraditionalForm]<>"=0", "Factor or solve the quadratic x ="<>ToString[((-"b")\[PlusMinus]Sqrt["b"^2-"4ac"])/"2a",TraditionalForm], "x = "<>ToString[xx1, TraditionalForm]<>", "<>ToString[xx2, TraditionalForm], "Substitute these solutions into the original f and g to validate:", Which[Length[sols2]==2, Framed["Two valid intersections"],Length[sols2]==1, Framed["One valid intersection"],Length[sols2]==0,Framed["No valid intersection"] ], Which[Length[sols2]==2, min=Min[{yy1,yy2}];max=Max[{yy1,yy2}];Plot[{lhs,rhs},{x,min-1,max+1},PlotLegends->Placed[{ToString[lhs2, TraditionalForm],ToString[rhs2, TraditionalForm]},Above]],Length[sols2]==1,Plot[{lhs,rhs},{x,yy1-1,yy1+1},PlotLegends->Placed[{ToString[lhs2, TraditionalForm],ToString[rhs2, TraditionalForm]},Above]]] }, {Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelsolution5[vars_]:=DynamicModule[{body,a,b,c,d,lhs,rhs,f,y,f2,f3,x,sols,X,xx1,xx2,expr1,expr2,yy1,yy2,lhs2,rhs2,min,max,sols2}, {a,b,c,lhs,rhs,lhs2,rhs2}=vars; rhs=Log[a, Sqrt[a*x+b]]; lhs=Log[a^2, x^2-c]; sols=Solve[(x^2-c-(a*x+b))==0,x,Reals]; {xx1,xx2}={x/.sols[[1]],x/.sols[[2]]}; sols=Solve[(lhs-rhs)==0,x,Reals]; Which[Length[sols]==2 && ((x/.sols[[1]])!=(x/.sols[[2]])),sols2={yy1,yy2}={x/.sols[[1]],x/.sols[[2]]},Length[sols]==2 && ((x/.sols[[1]])==(x/.sols[[2]])),yy1=x/.sols[[1]];sols2={yy1},Length[sols]==1, yy1=x/.sols[[1]];sols2={yy1},Length[sols]==0, sols2={}]; body={{ "Let f(x)=g(x):", ToString[lhs2,TraditionalForm]<>"="<>ToString[rhs2,TraditionalForm], ToString[lhs2,TraditionalForm]<>"="<>ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[(a*"x"+b)^ToString[1/2,TraditionalForm], TraditionalForm], ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString["x"^2-c, TraditionalForm]<>")"/(ToString[Subscript[Log, ToString[a]],TraditionalForm]<>ToString[a^2,TraditionalForm]),TraditionalForm]<>"="<>ToString[1/2,TraditionalForm]<>ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString[(a*"x"+b), TraditionalForm]<>")", ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString["x"^2-c, TraditionalForm]<>")"/2,TraditionalForm]<>"="<>ToString[1/2,TraditionalForm]<>ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString[(a*"x"+b), TraditionalForm]<>")", ToString[ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString["x"^2-c, TraditionalForm]<>")",TraditionalForm]<>"="<>ToString[Subscript[Log, ToString[a]],StandardForm]<>"("<>ToString[(a*"x"+b), TraditionalForm]<>")", "\[DoubleLongRightArrow]"<>ToString["x"^2-c, TraditionalForm]<>"="<>ToString[a*"x"+b, TraditionalForm], "\[Therefore]"<>ToString[(x^2-c-(a*x+b))/.{x->"x"}, TraditionalForm]<>"=0", "Factor or solve the quadratic x ="<>ToString[((-"b")\[PlusMinus]Sqrt["b"^2-"4ac"])/"2a",TraditionalForm], "x = "<>ToString[xx1, TraditionalForm]<>", "<>ToString[xx2, TraditionalForm], "Substitute these solutions into the original f and g to validate:", Which[Length[sols2]==2, Framed["Two valid intersections"],Length[sols2]==1, Framed["One valid intersection"],Length[sols2]==0,Framed["No valid intersection"] ],(*, Which[Length[sols2]==2, min=Min[{yy1,yy2}];max=Max[{yy1,yy2}];Plot[{lhs,rhs},{x,min-1,max+1},PlotLegends->Placed[{ToString[lhs2, TraditionalForm],ToString[rhs2, TraditionalForm]},Above]],Length[sols2]==1,Plot[{lhs,rhs},{x,yy1-1,yy1+1},PlotLegends->Placed[{ToString[lhs2, TraditionalForm],ToString[rhs2, TraditionalForm]},Above]]]*)"" }, {Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation5[pn_, vars_]:=Module[{a,b,c,d,lhs,rhs,lhs2,rhs2}, {a,b,c,lhs,rhs,lhs2,rhs2}=vars; variations={{"Consider the graphs of\n f(x)="<>ToString[lhs2,TraditionalForm]<>" , g(x)="<>ToString[rhs2,TraditionalForm]<>"\n Find the NUMBER of points of intersection of f(x) and g(x)."} }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers5[vars_]:=Module[{a,b,c,d,lhs,rhs,f,f3,X,y,xx1,xx2,sols,sols2,sols3,m1,m2,m3,a2,x,xx,expr1,expr2,yy1,yy2,lhs2,rhs2,lhs3,rhs3}, {a,b,c,lhs,rhs,lhs2,rhs2}=vars; rhs3=Log[a, Sqrt[a*x+b]]; lhs3=Log[a^2, x^2-c]; sols=Solve[(lhs3-rhs3)==0,x,Reals]; Which[Length[sols]==2 && ((x/.sols[[1]])!=(x/.sols[[2]])),sols2={yy1,yy2}={x/.sols[[1]],x/.sols[[2]]},Length[sols]==2 && ((x/.sols[[1]])==(x/.sols[[2]])),yy1=x/.sols[[1]];sols2={yy1},Length[sols]==1, yy1=x/.sols[[1]];sols2={yy1},Length[sols]==0, sols2={}]; {Which[Length[sols2]==2,"One Intersection",Length[sols2]==1, "No Intersection", Length[sols2]==0,"Two Intersection"], "Cannot be determined", Which[Length[sols2]==2,"Two Intersections",Length[sols2]==1, "One Intersection",Length[sols2]==0,"No Intersection" ], Which[Length[sols2]==2,"No Intersection",Length[sols2]==1,"Two Intersection",Length[sols2]==0,"One Intersection" ]} ] qPanelTRYAGAIN5[]:=Module[{a,b,c,x,rhs,lhs}, {a,b,c}=makeVARS5[]; rhs=Log[a, Sqrt[a*x+b]]; lhs=Log[a^2, x^2-c]; {a,b,c,lhs,rhs, ToString[Subscript[Log, ToString[a^2]],StandardForm]<>"("<>ToString["x"^2-c, TraditionalForm]<>")", ToString[Subscript[Log, ToString[a]],StandardForm]<>ToString[Sqrt[a*"x"+b], TraditionalForm]}/.{x->"x"} ] qPaneHint5[vars_]:=Module[{}, body={{ "Equate and make bases the same using properties of Logarithms\n OR Express each function in exponential form and make the bases the same", "" }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR5[]:="" makeVARS5[]:=Module[{a,b,c,list}, list=DeleteCases[Flatten[Table[If[IntegerQ[Sqrt[a^2+4 b+4 c]]==True, {a,b,c}], {a,2 , 10}, {b, -10, 10}, {c, -10,10}], 2], Null]; list[[RandomInteger[{1,Length[list]}]]] ] qPanel5[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN5[]; text=qPanelVariation5[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers5[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR5[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN5[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint5[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution5[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN5[]; text=qPanelVariation5[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers5[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR5[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution6[vars_]:=DynamicModule[{body,a,b,c,d,p,q,lhs,rhs,f,y,f2,f3,x,sols,X,xx1,xx2,expr1,expr2,yy1,yy2,lhs2,rhs2,min,max,fc,fx,n1,n2,n3,nn1,nn2,nn3}, {p,q,d,c,x}=vars; fc=FactorInteger[c]; {n1,n2,n3}=If[Length[fc]==3, {n1,n2,n3}=fc[[All,2]],{n1,n2}=fc[[All,2]];{n1,n2,0}]; fx=FactorInteger[x]; {nn1,nn2,nn3}=fx[[All,2]]; body={{ ToString[Subscript[Log, ToString[c]],StandardForm]<>ToString[x,StandardForm]<>"=y \[DoubleLongRightArrow] "<>ToString[x,StandardForm]<>"="<>ToString[c]^"y", "Factor "<>ToString[c]<>"="<>ToString[ToString[p]^ToString[n1],StandardForm]<>"\[Cross]"<>ToString[ToString[q]^ToString[n2],StandardForm]<>"\[Cross]"<>ToString[ToString[d]^ToString[n3],StandardForm], "Use the given logarithm equations and substitute 2nd and 3rd factors:", ToString[Subscript[Log, ToString[p]],StandardForm]<>ToString[q]<>"=a"<>" \[DoubleLongRightArrow] "<>ToString[q]<>"="<>ToString[ToString[p]^"a",StandardForm], ToString[Subscript[Log, ToString[p]],StandardForm]<>ToString[d]<>"=b"<>" \[DoubleLongRightArrow] "<>ToString[d]<>"="<>ToString[ToString[p]^"b",StandardForm], ToString[c]<>"="<>ToString[ToString[p]^ToString[n1],StandardForm]<>"\[Cross]"<>ToString[ToString[q]^ToString[n2],StandardForm]<>"\[Cross]"<>ToString[ToString[d]^ToString[n3],StandardForm]<>"="<>ToString[ToString[p]^ToString[n1],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"a"<>"\[Cross]"<>ToString[n2],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"b"<>"\[Cross]"<>ToString[n3],StandardForm], ToString[ToString[c]^"y",StandardForm]<>"="<>ToString["("<>ToString[ToString[p]^ToString[n1],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"a"<>"\[Cross]"<>ToString[n2],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"b"<>"\[Cross]"<>ToString[n3],StandardForm]<>")"^"y", StandardForm]<>"="<>ToString["("<>ToString[x,StandardForm]<>")"^"y",StandardForm], "Factor "<>ToString[x,StandardForm]<>"="<>ToString[ToString[p]^ToString[nn1],StandardForm]<>"\[Cross]"<>ToString[ToString[q]^ToString[nn2],StandardForm]<>"\[Cross]"<>ToString[ToString[d]^ToString[nn3],StandardForm], "Again substitute 2nd and 3rd factors:", ToString[x,StandardForm]<>"="<>ToString[ToString[p]^ToString[nn1],StandardForm]<>"\[Cross]"<>ToString[ToString[q]^ToString[nn2],StandardForm]<>"\[Cross]"<>ToString[ToString[d]^ToString[nn3],StandardForm]<>"="<>ToString[ToString[p]^ToString[nn1],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"a"<>"\[Cross]"<>ToString[nn2],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"b"<>"\[Cross]"<>ToString[nn3],StandardForm], ToString["("<>ToString[ToString[p]^ToString[n1],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"a"<>"\[Cross]"<>ToString[n2],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"b"<>"\[Cross]"<>ToString[n3],StandardForm]<>")"^"y", StandardForm]<>"="<>ToString[ToString[p]^ToString[nn1],StandardForm]<>"\[Cross]"<>ToString[ToString[q]^ToString[nn2],StandardForm]<>"\[Cross]"<>ToString[ToString[d]^ToString[nn3],StandardForm]<>"="<>ToString[ToString[p]^ToString[nn1],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"a"<>"\[Cross]"<>ToString[nn2],StandardForm]<>"\[Cross]"<>ToString[ToString[p]^"b"<>"\[Cross]"<>ToString[nn3],StandardForm], "("<>ToString[n1]<>"+"<>"a"<>"\[Cross]"<>ToString[n2]<>"+"<>"b"<>"\[Cross]"<>ToString[n3]<>")"<>"\[Cross]"<>"y"<>"="<>"("<>ToString[nn1]<>"+"<>"a"<>"\[Cross]"<>ToString[nn2]<>"+"<>"b"<>"\[Cross]"<>ToString[nn3]<>")", "Solve for y = "<>ToString[(nn1+"a"*nn2+"b"*nn3)/(n1+"a"*n2+"b"*n3),StandardForm] }, {Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation6[pn_, vars_]:=Module[{a,b,c,d,lhs,rhs,lhs2,rhs2,p,q,x}, {p,q,d,c,x}=vars; variations={{"If "<>ToString[Subscript[Log, ToString[p]],StandardForm]<>ToString[q]<>"=a and "<>ToString[Subscript[Log, ToString[p]],StandardForm]<>ToString[d]<>"=b , find "<>ToString[Subscript[Log, ToString[c]],StandardForm]<>ToString[x,StandardForm]<>" in terms of a and b." } }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers6[vars_]:=Module[{a,b,c,d,lhs,rhs,f,f3,X,y,xx1,xx2,sols,sols2,sols3,m1,m2,m3,a2,x,xx,expr1,expr2,yy1,yy2}, {"","","",""} ] qPanelTRYAGAIN6[]:=Module[{a,b,c,x,rhs,lhs,p,q,d}, {p,q,d,c,x}=makeVARS6[]; {p,q,d,c,x} ] qPaneHint6[vars_]:=Module[{}, body={{ "", "" }, {Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR6[]:="" makeVARS6[]:=Module[{list, i, y1,y2,y3, p,q,d,c,x}, list=Table[Prime[i], {i, 1, 5}]; y1=2;y2=2;y3=2; While[y1==y2||y2==y3||y1==y3,y1=list[[RandomInteger[{1, Length[list]}]]]; y2=list[[RandomInteger[{1, Length[list]}]]]; y3=list[[RandomInteger[{1, Length[list]}]]];]; {p,q,d}=Sort[{y1,y2,y3}]; c=101;x=101; (*While[c\[Equal]x || (Numerator[c]>100 || Numerator[x]>100 ||Denominator[c]>100 ||Denominator[x] >100),*) While[c==x || (c>100 || Numerator[x]>100 ||Denominator[x] >100), c=(p^RandomInteger[{1,2}])*(q^RandomInteger[{1,2}])*(d^RandomInteger[{0,2}]); x=(p^not0[RandomInteger[{-2,2}]])*(q^not0[RandomInteger[{-2,2}]])*(d^not0[RandomInteger[{-2,1}]]);]; {p,q,d,c,x} ] qPanel6[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN6[]; text=qPanelVariation6[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers6[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR6[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];vars=qPanelTRYAGAIN6[];myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint6[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution6[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN6[]; text=qPanelVariation6[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers6[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR6[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] qPanelsolution7[vars_]:=DynamicModule[{body,q,m,n,up, down,a,b}, {q,m,n,up, down,a,b}=vars; body={{ (*old: ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m*q^2]/ToString[(q*n)^2], StandardForm]<>"="<>ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m]*"("<>ToString[ToString[q]^2,StandardForm]<>")"/ToString[ToString[(q*n)]^2,StandardForm], StandardForm], *) ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m*q^2]/ToString[(q*n)^2], StandardForm]<>"="<>ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[Simplify[(m*q^2)/((q*n)^2)],TraditionalForm], "="<>ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m]/ToString[ToString[(n)]^2,StandardForm], StandardForm], "="<>ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[m]/ToString[ToString[(n)]^2,StandardForm], StandardForm]/ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>"("<>ToString["("<>ToString[q]<>")"*"("<>ToString[n]<>")",StandardForm]<>")", StandardForm],StandardForm], "="<>ToString[(ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[m], StandardForm]-ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[ToString[(n)]^2,StandardForm], StandardForm])/(ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[q],StandardForm], StandardForm]+ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[n],StandardForm], StandardForm]),StandardForm], "="<>ToString[(ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[m], StandardForm]-"(2)"*ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[ToString[(n)],StandardForm], StandardForm])/(ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[q],StandardForm], StandardForm]+ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[n],StandardForm], StandardForm]),StandardForm], "="<>ToString[(ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[m], StandardForm]-"(2)"*ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[ToString[(n)],StandardForm], StandardForm])/(1+ToString[ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[ToString[n],StandardForm], StandardForm]),StandardForm], (*Anna:*) "Substitue the Logs:\n="<> ToString[(ToString[(ToString[-2*b,TraditionalForm]<>"+"<>ToString[a,TraditionalForm]),TraditionalForm]<>" ")/ToString[ToString[1,TraditionalForm]<>"+"<>ToString[b,TraditionalForm],TraditionalForm], TraditionalForm] , (**) "="<>ToString[Together[(a-2*b)/(1+b)],StandardForm] }, {Null,Null,Null,Null,Null,Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelVariation7[pn_, vars_]:=Module[{variations,q,m,n,up, down,a,b}, {q,m,n,up, down,a,b}=vars; variations={{"If "<>ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[m, StandardForm]<>"="<>ToString[a,TraditionalForm]<>" and "<>ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[n, StandardForm]<>"="<>ToString[b,TraditionalForm]<>", find "<>ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m*q^2]/ToString[(q*n)^2], StandardForm]<>" in terms of "<>ToString[Last[Level[a,{-1}]]]<>" and "<>ToString[Last[Level[b,{-1}]]] }, {"Find "<>ToString[Subscript[Log, ToString[q*n]],StandardForm]<>ToString[ToString[m*q^2]/ToString[(q*n)^2], StandardForm]<>" given " <>ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[m, StandardForm]<>"="<>ToString[a,TraditionalForm]<>" and "<>ToString[Subscript[Log, ToString[q]],StandardForm]<>ToString[n, StandardForm]<>"="<>ToString[b,TraditionalForm]<>", in terms of "<>ToString[Last[Level[a,{-1}]]]<>" and "<>ToString[Last[Level[b,{-1}]]] } }; text=ToString[pn]<>". "<>qRandList[variations] ] qPanelAnswers7[vars_]:=Module[{q,m,n,up, down,a,b}, {q,m,n,up, down,a,b}=vars; {ToString[Together[(a-b)/(1+b)],StandardForm],ToString[Together[(a-2*b)/(2+b)],StandardForm],ToString[Together[(a-2*b)/(1+b)],StandardForm],ToString[Together[(a-2*b)/(b)],StandardForm]} ] qPanelTRYAGAIN7[]:=Module[{q,m,n,up, down,a,b}, {q,m,n,up, down,a,b}=makeVARS7[]; {q,m,n,up, down,a,b} ] qPaneHint7[vars_]:=Module[{}, body={{ "Use change of base rule:", ToString[Subscript[Log, ToString["x"]],StandardForm]<>ToString["y", StandardForm]<>" = "<>ToString[(ToString[Subscript[Log, ToString["b"]],StandardForm]<>ToString["y", StandardForm]/(ToString[Subscript[Log, ToString["b"]],StandardForm]<>ToString["x", StandardForm])), StandardForm], "" }, {Null,Null,Null}}; Panel[Grid[Transpose[body]]] ] qPanelEXPR7[]:="" makeVARS7[]:=Module[{list,list2,q,m,n,a,b}, list={2,3,5}; list2={"a","b","c"+2,"w","x"+1,"z"-1}; {q,m,n}=threeDifferent[list]; {a,b}=twoDifferent[list2]; {q,m,n,m*q^2, (q*n)^2,a,b} ] qPanel7[pn0_,diag0_]:= DynamicModule[{xxx, pn=pn0,text,person,variations,A1=False,B1=False,C1=False,D1=False,vars,answer,b,bb,c,cc,aa,a,d,dd,rem,m,n,myEnabled=True,text2,body, answers, checks,answersShuffled,checksShuffled,index,answerStudent,tryAgain=True, state=False, stateH=False,diag=diag0,g }, qNum +=1; If[diag==False, (* this is diagnosis training test *) Style[Manipulate[ xxx=xxx; (* kludge *) vars=qPanelTRYAGAIN7[]; text=qPanelVariation7[pn, vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"\n\nAnswer Correct",B1,qClickPlus[pn];myEnabled=False;text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)",D1, myEnabled=False;qClickPlus[pn];text<>"\n\nAnswer \!\(\* StyleBox[\"Incorrect\",\nFontColor->RGBColor[1, 0, 0]]\)", True, text<>"\n\nAnswer ?"]]; answers=qPanelAnswers7[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR7[]}],ImageMargins->10]]], {{xxx,1,""}, (* initial value of xxx, xxx=RandomReal[0.5] has to be in the button or else the test would not repeat*) Grid[{ {OpenerView[{Button["New Question",qTryAgain[pn];xxx=RandomReal[0.5];(*vars=qPanelTRYAGAIN7[];*)myEnabled=True;A1=False; B1=False;C1=False; D1= False], "Try again"}], OpenerView[{Button["Hint",qTryAgain[pn];stateH=Not[stateH]],qPaneHint7[vars]},stateH], OpenerView[{Button["Solution",qTryAgain[pn];state=Not[state]],qPanelsolution7[vars]},state]} ,{Null,Null,Null}}] &}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] , (* Else if actual test *) Style[Manipulate[ vars=qPanelTRYAGAIN7[]; text=qPanelVariation7[pn,vars]; answer="?"; answerStudent=Dynamic[Which [A1,myEnabled=False;qClickPlus[pn];text<>"",C1,qClick[pn];qTryAgainNOT[pn];myEnabled=False;text<>"",B1,qClickPlus[pn];myEnabled=False;text<>"",D1, myEnabled=False;qClickPlus[pn];text<>"", True, text<>""]]; answers=qPanelAnswers7[vars]; checks = {Checkbox[Dynamic[A1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[B1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[C1],Enabled->Dynamic[myEnabled]],Checkbox[Dynamic[D1],Enabled->Dynamic[myEnabled]]}; (* Shuffle the answer keys *) index = RandomSample[Range[Length[answers]]]; answersShuffled = Table[answers[[index[[i]]]], {i, 1,Length[answers]}]; checksShuffled = Table[checks[[index[[i]]]], {i, 1,Length[answers]}]; body = { (* First row/colum the answer key *) {"A","B","C","D"}, (* First row/colum the proposed answers key *) answersShuffled, (* First row/colum the answer check boxes*) checksShuffled }; (* Kludge: answerStudent has problem with <>, so concatenated earlier*) Deploy[ Style[Panel[Grid[Transpose[body],Alignment->Left],Column[{answerStudent,qPanelEXPR7[]}],ImageMargins->10]]], "", TrackedSymbols->Manipulate, SaveDefinitions->True, AppearanceElements->None,Initialization:>(qClicks = {{1, 0, 0, ""}, {2, 0, 0, ""}, {3, 0, 0, ""}, {4, 0, 0, ""}, {5, 0, 0, ""}, {6, 0, 0, ""},{7, 0, 0, ""},{8, 0, 0, ""},{9, 0, 0, ""},{10, 0, 0, ""}})] (*Manipulate*) , DynamicBoxOptions -> {BaseStyle -> Magnification -> qMagnification}] ] ] End[]; EndPackage[];