### Math puzzle game ➕

Every day a different quest. Use the sliders to find the answer.
The answer is given, you only have to find the math equation. Sometimes multiple answers are possible!

#game

```// Global code will be evaluated once.
const turtle = new Turtle();
const text = new Text();
const today = new Date();

const day = today.getDay();
const date = today.getDate();
const month = today.getMonth();
const year = today.getFullYear();

/*
const day = 1;
const date = 2;
const month = 3;
const year = 2020;
*/

const not_defined = null;

const a = -1; // min=0, max=20, step=1
let op1 = (date + month) % 2;
const b = -1; // min=0, max=20, step=1
const op2 = 2 + day % 2;
const c = -1; // min=0, max=20, step=1

let aa = Math.floor(hash(month + day) * 15);
let bb = Math.floor(hash(year/3 + month/2 + date) * 15);
let cc = Math.floor(hash(date % 15 + month/3) * 15);
if (op1 === 1 && aa<bb) {
const tmp = aa;
aa = bb;
bb = tmp;
}
if (op2 === 2) {
cc = calc(aa, bb, op1) / day;
}

const expected = calc(calc(aa, bb, op1), cc, op2);
const result = calc(calc(a, b, op1), c, op2);
let correct = result === expected && a >= 0 && b >= 0 && c >= 0;
Canvas.setpenopacity(correct ? 1 : -1);

for(let i=0;i<1;i+=0.2) {
turtle.jump(-80+i, -25+i);
text.print(turtle, `Math puzzle game of the day!`, .32);
}

turtle.jump(-80, 10);
text.print(turtle, `(\${a === -1 ? "A" : a} \${getOpName(op1)} \${b === -1 ? "B" : b}) \${getOpName(op2)} \${c === -1 ? "C" : c} = `, .45);
text.print(turtle, ` \${expected}`, .8);

if (correct) {
turtle.jump(-80, 70);
if (a <= 1 || b <= 1 || c <= 1) {
text.print(turtle, `Good, you found a simple answer!\nCan you find another solution?`, .2);
} else {
if (isPrime(a) && isPrime(b) && isPrime(c)) {
text.print(turtle, `That is an awesome answer!\nBonus points for only using prime numbers!`, .2);
} else {
text.print(turtle, `That is a great answer!\nCan you find another one?`, .2);
}
}
}

function isPrime(value) {
for(let i = 2; i < value; i++) {
if (value % i === 0) return false;
}
return value > 1;
}
function fract(a) {return a-Math.floor(a);}
function hash(n) { return fract(Math.sin(n) * 1.0e4); }
function calc(a,b,op) {
switch (op) {
case 0: return a + b;
case 1: return a - b;
case 2: return a / b;
case 3: return a * b;
}
}
function getOpName(op) {
switch (op) {
case 0: return "+";
case 1: return "-";
case 2: return "/";
case 3: return "x";
case -1: return "?";
}
}

////////////////////////////////////////////////////////////////
// Text utility code. Created by Reinder Nijhoff 2019
// https://turtletoy.net/turtle/1713ddbe99
////////////////////////////////////////////////////////////////

function Text() {
class Text {
print (t, str, scale) {
let pos = [t.x(), t.y()], h = t.h(), o = pos;
str.split('').map(c => {
const i = c.charCodeAt(0) - 32;
if (i < 0 ) {
pos = o = this.rotAdd([0, 48*scale], o, h);
} else if (i > 96 ) {
pos = this.rotAdd([16*scale, 0], o, h);
} else {
const d = dat[i], lt = d[0]*scale, rt = d[1]*scale, paths = d[2];
paths.map( p => {
t.up();
p.map( s=> {
t.goto(this.rotAdd([s[0]*scale - lt, s[1]*scale], pos, h));
t.down();
});
});
pos = this.rotAdd([rt - lt, 0], pos, h);
}
});
}
return [Math.cos(h)*a[0] - Math.sin(h)*a[1] + b[0],
Math.cos(h)*a[1] + Math.sin(h)*a[0] + b[1]];
}
}

const dat = ('br>eoj^jl<jqirjskrjq>brf^fe<n^ne>`ukZdz<qZjz<dgrg<cmqm>`thZhw<lZlw<qao_l^h^e_caccdeefg'+
'gmiojpkqmqporlshsercp>^vs^as<f^h`hbgdeeceacaab_d^f^h_k`n`q_s^<olmmlolqnspsrrspsnqlol>]wtgtfsereqfph'+
'nmlpjrhsdsbraq`o`makbjifjekckaj_h^f_eaecffhimporqssstrtq>eoj`i_j^k_kajcid>cqnZl\\j_hcghglhqjulxnz>c'+
'qfZh\\j_lcmhmllqjuhxfz>brjdjp<egom<ogem>]wjajs<ajsj>fnkojpiojnkokqis>]wajsj>fnjniojpkojn>_usZaz>`ti'+
'^f_dbcgcjdofrisksnrpoqjqgpbn_k^i^>`tfbhak^ks>`tdcdbe`f_h^l^n_o`pbpdofmicsqs>`te^p^jfmfogphqkqmppnrk'+
'shserdqco>`tm^clrl<m^ms>`to^e^dgefhekenfphqkqmppnrkshserdqco>`tpao_l^j^g_ebdgdlepgrjsksnrppqmqlping'+
'hcecddaf_i^j^m_oapepjoomrjshserdp>fnjgihjikhjg<jniojpkojn>fnjgihjikhjg<kojpiojnkokqis>^vrabjrs>]wag'+
'sg<amsm>^vbarjbs>asdcdbe`f_h^l^n_o`pbpdofngjijl<jqirjskrjq>]xofndlcicgdfeehekfmhnknmmnk<icgefhfkgmh'+
'q^qs<chqh>fnj^js>brn^nnmqlrjshsfreqdndl>_tc^cs<q^cl<hgqs>`qd^ds<dsps>^vb^bs<b^js<r^js<r^rs>_uc^cs<c'+
'^qs<q^qs>_uh^f_daccbfbkcndpfrhslsnrppqnrkrfqcpan_l^h^>_tc^cs<c^l^o_p`qbqepgohlici>_uh^f_daccbfbkcnd'+
'pfrhslsnrppqnrkrfqcpan_l^h^<koqu>_tc^cs<c^l^o_p`qbqdpfoglhch<jhqs>`tqao_l^h^e_caccdeefggmiojpkqmqpo'+
'rlshsercp>brj^js<c^q^>_uc^cmdpfrisksnrppqmq^>asb^js<r^js>^v`^es<j^es<j^os<t^os>`tc^qs<q^cs>asb^jhjs'+
'<r^jh>`tq^cs<c^q^<csqs>cqgZgz<hZhz<gZnZ<gznz>cqc^qv>cqlZlz<mZmz<fZmZ<fzmz>brj\\bj<j\\rj>asazsz>fnkc'+
'ieigjhkgjfig>atpeps<phnfleiegfehdkdmepgrislsnrpp>`sd^ds<dhffhekemfohpkpmopmrkshsfrdp>asphnfleiegfeh'+
'dkdmepgrislsnrpp>atp^ps<phnfleiegfehdkdmepgrislsnrpp>asdkpkpiognfleiegfehdkdmepgrislsnrpp>eqo^m^k_j'+
'bjs<gene>atpepuoxnylzizgy<phnfleiegfehdkdmepgrislsnrpp>ate^es<eihfjemeofpips>fni^j_k^j]i^<jejs>eoj^'+
'k_l^k]j^<kekvjyhzfz>are^es<oeeo<ikps>fnj^js>[y_e_s<_ibfdegeifjijs<jimfoeretfuius>ateees<eihfjemeofp'+
'ips>atiegfehdkdmepgrislsnrppqmqkphnfleie>`sdedz<dhffhekemfohpkpmopmrkshsfrdp>atpepz<phnfleiegfehdkd'+
'mepgrislsnrpp>cpgegs<gkhhjfleoe>bsphofleieffehfjhkmlompopporlsisfrep>eqj^jokrmsos<gene>ateeeofrhsks'+
'mrpo<peps>brdejs<pejs>_ubefs<jefs<jens<rens>bseeps<pees>brdejs<pejshwfydzcz>bspees<eepe<esps>cqlZj['+
'i\\h^h`ibjckekgii<j[i]i_jakbldlfkhgjkllnlpkrjsiuiwjy<ikkmkojqirhthvixjylz>fnjZjz>cqhZj[k\\l^l`kbjci'+
'eigki<j[k]k_jaibhdhfihmjilhnhpirjskukwjy<kkimiojqkrltlvkxjyhz>^vamakbhdgfghhlknlplrksi<akbidhfhhill'+
'nmpmrlsisg>brb^bscsc^d^dsese^f^fsgsg^h^hsisi^j^jsksk^l^lsmsm^n^nsoso^p^psqsq^r^rs').split('>').map(
r=> { return [r.charCodeAt(0)-106,r.charCodeAt(1)-106, r.substr(2).split('<').map(a => {const ret
= []; for (let i=0; i<a.length; i+=2) {ret.push(a.substr(i, 2).split('').map(b => b.charCodeAt(0)
-106));} return ret; })]; });

return new Text();
}```