';const imgsad='';const imgbored='';let width;let total;let mines;let adjacent=new Array();let mine=9;let exposed=new Array();let listEnd=-1;let incorrect=-2;let exploded=-3;let unexposed=-4;let flagged=-5;let queried=-6;let sad=1;let bored=2;let happy=3; let flags=0;let remaining=0;let mood=happy;let startTime;let timer=false;let charInfinity='∞';let charFlag='';let charQuestion='';let charMine='';let charExploded='';let charIncorrect='';let tail=listEnd;let setMines=function(){var elt=$("mines");var count=mines-flags;elt.innerHTML=(count<-99?"-"+charInfinity:""+count);};let setElapsed=function(){var elt=$("timer");if (timer){var now=new Date();var secs=Math.floor((now.getTime()-startTime.getTime())/1000);elt.innerHTML=(secs>999?charInfinity:""+secs);}else {elt.innerHTML=" ";}};let setMood=function(){$("smiley").innerHTML=(mood==sad?imgsad:(mood==bored?imgbored:imghappy));};let setSq=function(thisSquare){var sq=$("sq-"+thisSquare);var exp=exposed[thisSquare];var cName="sqa";var s;if (exp<=unexposed){if (exp==unexposed){s=" ";}else if (exp==flagged){s=charFlag;cName+=" sqFlagged";}else {s=charQuestion;cName+=" sqQuestion";}}else {var adj=adjacent[thisSquare];cName+=" sqExposed";if (exp==exploded){s=charExploded;cName+=" sqExploded";}else if (exp==incorrect){s=charIncorrect;cName+=" sqIncorrect";}else if (adj==mine){s=charMine;cName+=" sqMine";}else {s=""+(adj==0?" ":adj);cName+=" sq"+adj;}}sq.className=cName;sq.innerHTML=s;};let timerAction=function(){if (timer){setElapsed();setTimeout('timerAction()',100);}};let startTimer=function(){startTime=new Date();timer=true;timerAction();};let endGame=function(outcome){timer=false;mood=outcome;setMood();if(mood==happy){$('fanfare').play();}else if(mood==sad){$('auboom').play();$('sqTable').setAttribute('data-xplosion', 'true');}};let applyToNeighbours=function(thisSquare,f){var x=thisSquare%width;if (thisSquare>=width){if (x>0) f(thisSquare-width-1);f(thisSquare - width);if (x+10) f(thisSquare-1);if (x+1 0){f(thisSquare+width-1);}f(thisSquare+width);if (x+1unexposed){ }else if (event.shiftKey || event.button==2){var exp=exposed[thisSquare];if (exp==unexposed){exposed[thisSquare]=flagged;flags++;setMines();}else if (exp==flagged){exposed[thisSquare]=queried;flags--;setMines();}else if (exp==queried){exposed[thisSquare]=unexposed;}setSq(thisSquare);}else if (adjacent[thisSquare]==mine){remaining--;exposed[thisSquare]=exploded;setSq(thisSquare);for (let i=0; i < total; i++){if (i==thisSquare){ }else if (adjacent[i]==mine && exposed[i]!=flagged){remaining--;exposed[i]=listEnd;setSq(i);}else if (adjacent[i]!=mine && exposed[i]==flagged){remaining--;exposed[i]=incorrect;setSq(i);}}endGame(sad);}else {if (exposed[thisSquare]==flagged){flags--;setMines();}remaining--;exposed[thisSquare]=listEnd;tail=thisSquare;setSq(thisSquare);var pending=thisSquare;while (pending!=listEnd){if (adjacent[pending]==0){applyToNeighbours(pending,exposeSquare);}pending=exposed[pending];}if (remaining==mines){for (let i=0;iBuscaMinas