(* ::Package:: *) 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]; qTrunc6[a0_]:=If[IntegerQ[Ceiling[100*a0]/100], Ceiling[100*a0]/100, If[FractionalPart[a0*100]>=0.5, N[Ceiling[a0*100]/100], If[IntegerQ[Floor[a0*100]/100],Floor[a0*100]/100,N[Floor[a0*100]/100]]] ]; qTrunc7[a0_]:=If[FractionalPart[a0]>=0.5, Ceiling[a0], Floor[a0]]; (*rounding only from 2 to 6 decimal places *) (*ANNA: changed qTrunc8*) qTrunc8[a0_,n_]:= If[RealDigits[a0][[1]][[RealDigits[a0][[2]]+n+1]]>=5, (*rounding up*) (*TO DO : simpler method to do rounding up*) If[ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]==ToExpression[StringJoin[ToString/@ConstantArray[9,n]]], ToString[ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])]+1] (*example 2.9999999999*) , If[ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]<9, (*example 2.0000007 : rounding to 6 decimal places*) StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])<> Which[Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]!= 0, ".", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]!= 0, ".0", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]!= 0, ".00", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}] [[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]!= 0, ".000" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]!= 0, ".0000" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+6,RealDigits[a0][[2]]+6}][[1]]!= 0, ".00000" ] <>ToString[ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]+1] , If[Mod[b123=ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]+1,10]==0, StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])<> If[Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]== 0, Which[ Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]!= 0, ".", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]!= 0, ".0", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}] [[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]!= 0, ".00" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]!= 0, ".000" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+6,RealDigits[a0][[2]]+6}][[1]]!= 0, ".0000" ], "."] <> ToString[(ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]+1)/ If[Mod[b123,10000]==0,10000,If[Mod[b123,1000]==0,1000 ,If[Mod[b123,100]==0,100,If[Mod[b123,10]==0,10 ] ]]] ] , StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])<> (*TO DO : check if all cases are included in below Which*) Which[Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]!= 0, ".", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]!= 0, ".0", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]!= 0, ".00", Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}] [[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]!= 0, ".000" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]!= 0, ".0000" , Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+1}][[1]]==0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+2,RealDigits[a0][[2]]+2}][[1]] == 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+3,RealDigits[a0][[2]]+3}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+4,RealDigits[a0][[2]]+4}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+5,RealDigits[a0][[2]]+5}][[1]]== 0 && Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+6,RealDigits[a0][[2]]+6}][[1]]!= 0, ".00000" ] <>ToString[ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])]+1] ] ] ] , (*Rounding down: everything is ok *) If[Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}]==ConstantArray[0,n], (*example: 2.000000000*) StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]]) , If[Mod[a123=ToExpression[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}])],10]==0, StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])<> "." <>ToString[StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+ If[Mod[a123,100000]==0,n-5,If[Mod[a123,10000]==0,n-4,If[Mod[a123,1000]==0,n-3, If[ Mod[a123,100]==0,n-2,n-1 ] ]]] }])] , StringJoin@(ToString/@Take[RealDigits[a0][[1]],RealDigits[a0][[2]]])<> "." <>StringJoin@(ToString/@Take[RealDigits[a0][[1]],{RealDigits[a0][[2]]+1,RealDigits[a0][[2]]+n}]) ] ] ]; (* sol is the solution provided by the Module, a1 is the SPLIT student answer, a2 is the original from inputfield *) (* TODO: this is very specific to a particular Module, but could be generalized *) err1[sol_,a1_,a2_]:=Module[{pr}, pr=MemberQ[WordStem[StringSplit[StringReplace[ToLowerCase[a2],{","->" ",";"->" ",":"-> " ","."->" "}]]],#]&/@{sol,IntegerName[ToExpression[sol]],"increas", "mark", "score", "grade" }; If[(pr[[1]]||pr[[2]]==True)&& Count[pr, True]>=2, True, False] ]; (* this error function compares the two results and only equates *) errNO[sol_,a1_,a2_]:=ToExpression[sol]===ToExpression[a1]; errNO3[sol_,a1_,a2_]:= sol===a1; errNO31[sol_,a1_,a2_]:= sol===a2; errNO4[sol_,a1_,a2_]:= MemberQ[sol,a2]; err2[sol_,a1_,a2_]:=qTrunc6[ToExpression[sol]]===ToExpression[a2]; err3[sol_,a1_,a2_]:=If[IntegerQ[ToExpression[a2]]==True, If[(*IntegerQ[ToExpression[sol]]\[Equal]True, *) Take[RealDigits[ToExpression[sol]][[1]],{RealDigits[ToExpression[sol]][[2]] + 1,RealDigits[ToExpression[sol]][[2]] +2}]=={0,0}, qTrunc7[ToExpression[sol]]===ToExpression[a2], Abs[ToExpression[ToExpression[sol]]-ToExpression[a2]]<=1 ], False ]; (*ANNA: added error for q#1d*) err41[sol_,a1_,a2_]:=qTrunc8[ToExpression[sol],2]===a2; (*error for q#9*) err4[sol_,a1_,a2_] := If[my`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "OK" || my`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "GOOD", True, False]; err5[sol_,a1_,a2_] := If[SLOPE`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "OK" || SLOPE`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "GOOD", True, False]; err6[sol_,a1_,a2_] := If[YINTERCEPT`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "OK" || YINTERCEPT`class[a2,ClassPriors-><|"OK"->0.4,"GOOD"->0.3|>] === "GOOD", True, False]; 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, ""]; errNO2[sol_,a1_,a2_]:=ToExpression[sol]===ToExpression[a2]; errMIX[sol_,a1_,a2_]:=If[qTrunc6[ToExpression@ToExpression[sol][[1]]]===ToExpression[a2] || ToExpression@ToExpression[sol][[2]]===ToExpression[a1],True,False];