let w,h,my={};function init(){my.version='0.93';w=190;h=270;my.game={};my.ansQ=false;my.clrs=['#000000','#330099','#ff9900','#cece88','#ccff33','#993399','#ff0000','#00ff00','#0000ff','#00ffff','#ffff00','#ff00ff','#006600'];my.txtclrs=['#330099','#ff9900','#cc3366','#ccff33','#993399','#00ffff','#00ff00','#0000ff','#00ffff','#000000','#ff00ff','#006600','#ffff00'];let s='';s+='
';s+='
'
s+=wrap({id:"ws",style:"text-align: center;"})
s+=wrap({id:"result",style:"text-align: center; font: 30px Verdana; z-index:100;"})
s+='
';docInsert(s);let seed=getQueryVariable('seed');if(seed){seedSet(seed);}else{seedSet(1000);}
console.log("seed",seed,my.seedStt);my.game.op=getQueryVariable('op');switch(my.game.op){case 'add':my.game.symbol="+";break;case 'sub':my.game.symbol="−";break;case 'mult':my.game.symbol="×";break;case 'div':my.game.symbol="÷";break;default:my.game.symbol="?";}
my.game.n=Math.min(100,getQueryDef('n',10));my.game.amin=getQueryDef('amin',1);my.game.amax=getQueryDef('amax',10);my.game.bmin=getQueryDef('bmin',1);my.game.bmax=getQueryDef('bmax',10);my.game.carryQ=getQueryVariable('carry')!='n';my.game.negAnsQ=getQueryVariable('negans')!='n';my.game.olQ=getQueryVariable('ol')=='y';my.game.swapQ=getQueryVariable('swap')=='y';console.log("my.game",my.game);doWS();}
function getQueryDef(name,def){let a=getQueryVariable(name);if(a){return parseInt(a);}
return def;}
function seedSet(n){my.seedStt=parseInt(n);if(my.seedStt<=0)my.seedStt=1;document.getElementById('seed').value=my.seedStt;}
function seedChg(){my.seedStt=(document.getElementById('seed').value)<<0;seedSet(my.seedStt);doWS();}
function seedRand(){seedSet(Math.floor(Math.random()*9999)+1);doWS();}
function doWS(){document.getElementById('result').innerHTML="";my.seed=my.seedStt;let dones=[];my.anss=[];my.tabs=[];let s='';for(let i=0;i';let tries=0;let okQ=true;let id=''
let a,b,c
do{a=getRandomInt(my.game.amin,my.game.amax);b=getRandomInt(my.game.bmin,my.game.bmax);c=0;if(my.game.swapQ){if(Math.random()<0.5){let t=a;a=b;b=t;}}
switch(my.game.op){case 'add':c=a+b;break;case 'sub':c=a-b;break;case 'mult':c=a*b;break;case 'div':c=b;b=a;a=b*c;break;default:}
id=a+','+b;okQ=true;if(!my.game.carryQ){if(my.game.op=="add"&&isCarryNeeded(a,b,true))okQ=false;if(my.game.op=="sub"&&isCarryNeeded(a,b,false))okQ=false;}
if(!my.game.negAnsQ){if(c<0)okQ=false;}
if(dones.indexOf(id)>=0)okQ=false;if(tries>10){while(dones.length>5){dones.shift();}}}while(!okQ&&tries++<100);dones.push(id);s+=''+(i+1)+':'+'
';s+=''+a+'
';s+=''+my.game.symbol+' '+b+'
';let ansHt=50;if(my.game.olQ){s+='';s+=' ';s+='
';my.anss[i]=c;my.tabs[i]='ans'+i;}else{if(my.ansQ){s+=''+c+'
';}else{s+=''+' '+'
';}}
s+='';}
document.getElementById('ws').innerHTML=s;}
function doAns(n){let userAns=document.getElementById('ans'+n).value;console.log("doAns",n,my.anss[n],userAns);if(userAns==my.anss[n]){let s=''+my.anss[n]+'
';document.getElementById('ansDiv'+n).innerHTML=s;my.tabs.splice(my.tabs.indexOf('ans'+n),1);console.log("YAY",my.tabs);if(my.tabs.length==0){document.getElementById('result').innerHTML="Perfect !";}else{document.getElementById(my.tabs[0]).focus();}}}
function toggleAns(){if(my.game.olQ)return;my.ansQ=!my.ansQ;toggleBtn("ansBtn",my.ansQ);doWS();}
function toggleBtn(btn,onq){if(onq){document.getElementById(btn).classList.add("hi");document.getElementById(btn).classList.remove("lo");}else{document.getElementById(btn).classList.add("lo");document.getElementById(btn).classList.remove("hi");}}
function isCarryNeeded(n1,n2,addQ){let n1str=n1.toString();let n2str=n2.toString();let minlength=Math.min(n1str.length,n2str.length);for(let i=1;i<=minlength;i++){if(addQ){if(parseInt(n1str.substr(-i,1))+parseInt(n2str.substr(-i,1))>9){return true;}}else{if(parseInt(n1str.substr(-i,1))-parseInt(n2str.substr(-i,1))<0){return true;}}}
return false;}
function getRandomInt(min,max){return Math.floor(random()*(max-min+1))+min;}
function random(){let x=Math.sin(my.seed++)*10000;return x-Math.floor(x);}
function getQueryVariable(variable){let query=window.location.search.substring(1);let vars=query.split("&");for(let i=0;i0){s+=''+lbl}
s+=' 0)s+=' oninput="'+fn+'" onchange="'+fn+'"'
break
case 'rad':if(cls.length==0)cls="radio"
s+=' '
break
case 'rad':s+='>\n'
for(let i=0;i \n';s+=''+opts[i][1]+' \n';}
s+='';break
case 'sel':s+='>\n'
for(let i=0;i'+opts[i]+'\n';}
s+='';break
case 'sld':s+='>'
break
default:}
s+='\n'
return s}
init()