Winter break is nearly over for my daughter, so today I had some fun creating some simple applications to refresh her memory. I am making use of the FormPage function in my code.
In the first example, I deploy a FormPage that generates simple random sums. Note that the first time the Form is loaded, a question is not available, so I have a form element saying that my daughter should type in any number. Questions then follow. My form is public, so feel free to try it, or deploy your own.
In[4]:= CloudDeploy[
FormPage[FormObject[{"ans", "Sum"} -> "Number",
AppearanceRules -> <|"Description" -> "To begin, type any number. Then answer the question below."|>], Module[{res},
If[FileExistsQ[CloudObject["numPair"]],
CloudGet[CloudObject["numPair"]];
res =
If[#ans === Total@ns, Style["Correct", 40, Blue],
Style["Wrong: " <> StringJoin[Riffle[ToString /@ ns, "+"]] <>" = " <> ToString[Total@ns], 40, Red]];
ns = RandomInteger[{1, 9}, 2];
CloudSave[ns, CloudObject["numPair"]];
Rasterize@TableForm@{res, "Next:", Style[StringJoin[Riffle[ToString /@ ns, "+"]], 40, Purple]},
ns = RandomInteger[{1, 9}, 2];
CloudSave[ns, CloudObject["numPair"]];
While[#ans === Total@ns, ns = RandomInteger[{1, 9}, 2]];
Style[StringJoin[Riffle[ToString /@ ns, "+"]], 40, GrayLevel[0.2]]]] &] , Permissions -> "Public"]
Out[4]= CloudObject["https://www.wolframcloud.com/objects/63de439d-c861-44e6-a90d-69b5bd2d2556"]
The second example tests recognition of spoken numbers. Since Speak isn't yet implemented in the WolframCloud, I can only use a Mathematica notebook here. As with the previous example, I'm using FormPage which cannot load in an initial question.
FormPage[FormObject[{"ans", "Number"} -> "Number",
AppearanceRules -> <|"Description" -> "To begin, type any number"|>],
Module[{res},
If[NumberQ[num],
res = If[#ans === num, Speak["Correct"];
Style["Correct", 40, Blue], Speak["Wrong"];
Style["Wrong: the number was " <> ToString@num, 40, Red]];
While[#ans === num, num = RandomInteger[{1, 100}]];
Pause[3]; Speak["Ready, " <> ToString@num]; Pause[1]; Speak[num];
TableForm[{res, Style["\n Next:\n"], Style["What is this number?", 40, GrayLevel[0.2]]}],
num = RandomInteger[{1, 100}];
While[#ans === num, num = RandomInteger[{1, 100}]];
Speak["Ready, " <> ToString@num]; Pause[1]; Speak[num];
Style["What number did I say?", 40, GrayLevel[0.2]]]] &]
Note that there is other weirdness I had to deal with. In a Mathematica notebook, the Form won't re-evaluate when the same input is submitted. So I ensure that the next question has a different answer than the just submitted value.
This was a rather easy and fun way to occupy my daughter for a short time today. I think she'll be ready to go on Monday!