let w,h,my={},game={};function init(){my.version='0.5';w=190;h=270;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+='
';docInsert(s);let seed=getQueryVariable('seed');if(seed){seedSet(seed);}else{seedSet(1000);}
console.log("seed",seed,my.seedStt);game.n=Math.min(Math.max(1,getQueryDef('n',10)),100)
game.amin=Math.min(Math.max(1,getQueryDef('amin',1)),1000)
game.amax=Math.min(Math.max(1,getQueryDef('amax',10)),1000)
game.dec=Math.min(Math.max(-2,getQueryDef('dec',0)),2)
game.stepN=Math.min(Math.max(1,getQueryDef('steps',2)),3)
game.ops=getQueryVariable('ops')
if(!game.ops)game.ops='axm'
console.log("game",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 baseOps=[]
if(game.ops.indexOf('a')>=0)baseOps.push('add')
if(game.ops.indexOf('m')>=0)baseOps.push('mult')
if(game.ops.indexOf('x')>=0)baseOps.push('addx')
if(game.ops.indexOf('b')>=0)baseOps.push('brack')
console.log('baseOps',baseOps)
let s='';for(let i=0;i';let id="";let tries=0;let okQ=true;let qStr=''
let ansStr=''
do{okQ=true
let ops=baseOps.slice()
let ltrs=['u','v','w','x','x','x','x','x','y','z'];let ltr=ltrs[Math.floor(random()*ltrs.length)];let ans=getRandomInt(game.amin,game.amax)/Math.pow(10,game.dec)
let lhs=new Expr(0,1,ltr)
let rhs=new Expr(ans,0,ltr)
let swapSidesQ=(random()>0.5)
if(swapSidesQ){}
let solns=[]
solns.push(ltr+" = "+ans);let comments=[]
let fails=0;let step=0;while(step0.5){lhs.a+=val;rhs.a+=val;undo="Subtract "+val+" from both sides";}else{lhs.a-=val;rhs.a-=val;undo="Add "+val+" to both sides";}
break;case "addx":if(random()>0.5){lhs.x+=val;rhs.x+=val;undo="Subtract "+val+ltr+" from both sides";}else{lhs.x-=val;rhs.x-=val;undo="Add "+val+ltr+" to both sides";}
break;case "mult":if(val==1){fails+=1;continue;}
lhs.a*=val
lhs.x*=val
rhs.a*=val
rhs.x*=val
undo="Divide both sides by "+val;break;case "brack":if(val==1){fails+=1;continue;}
undo="Divide both sides by "+val+" and remove brackets";break;default:break;}
solns.unshift(lhs.fmt()+' = '+rhs.fmt())
comments.unshift(undo)
step++}
comments.unshift('Start with')
ansStr=''
for(let i=1;i'
ansStr+=solns[i]
ansStr+=''
ansStr+=' '}
qStr=solns[0]
id=solns[0]
if(dones.indexOf(id)>=0)okQ=false;if(tries>10){while(dones.length>5){dones.shift();}}}while(!okQ&&tries++<100);dones.push(id);s+='