Skip to content

Instantly share code, notes, and snippets.

@JessicaC
Created July 31, 2019 15:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JessicaC/3e25b1755f022994ea42cd30be42d35f to your computer and use it in GitHub Desktop.
Save JessicaC/3e25b1755f022994ea42cd30be42d35f to your computer and use it in GitHub Desktop.
lightsout.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>
A Lights Out Puzzle with Solver
</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
</head>
<body text="#000000" bgcolor="#C0E0FF" alink="#000000" vlink="#000000" marginwidth="0" marginheight="0">
<h3>A Lights Out Puzzle with Solver (JavaScript)</h3>
<script language="JavaScript">
<!--
// --- constants ---
var imgs = new Array(); // string[], URLs of tile images
var nums = new Array(); // string[], URLs of digit images
var maxcolcount = 7; // integer, maximum number of columns
var maxrowcount = 7; // integer, maximum number of rows
var outrangeimg = "outrange.gif"; // string, URL of empty ans cell
var emptyimg = "empty.gif"; // string, URL of empty cell
// var nosolimg = "nosol.gif"; // string, URL of no solution image
imgs[0] = "blank.gif";
imgs[1] = "blue.gif";
imgs[2] = "green.gif";
imgs[3] = "white.gif";
imgs[4] = "purple.gif";
// --- global variables ---
var colcount; // integer, number of columns
var rowcount; // integer, number of rows
var imgcount; // integer, number of states of a tile
var cells; // integer[row][col], current states of tiles
var steps; // integer, current steps of operation
var playing; // boolean, if playing
var autogen; // boolean, if playing with an auto-generated problem
// --- initialization ---
//function onLoad(){}
init();
function init() {
for (var val = 0; val < imgs.length; val++)
nums[val] = "number" + val + ".gif";
var col;
var row;
cells = new Array();
for (col = 0; col < maxcolcount; col++) {
cells[col] = new Array();
for (row = 0; row < maxrowcount; row++)
cells[col][row] = 0;
}
// playing = false;
}
// --- event handlers ---
function newSettings(){
var dimension = document.toolbar.dimension.options[
document.toolbar.dimension.selectedIndex].value;
colcount = eval(dimension.substring(0,1));
rowcount = eval(dimension.substring(2,3));
imgcount = eval(document.toolbar.colors.options[
document.toolbar.colors.selectedIndex].value);
for (var col = 0; col < maxcolcount; col++)
for (var row = 0; row < maxrowcount; row++) {
setcellimage(col,row,emptyimg);
setanscellimage(col,row,outrangeimg);
}
newGame();
}
function newGame(){
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++) {
setcell(col,row, Math.floor(Math.random() * imgcount));
setanscellimage(col,row,outrangeimg);
}
playing = true;
autogen = true;
steps = 0;
}
function edit() {
if (!playing) {
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++)
setcell(col,row,0);
}
playing = false;
autogen = false;
}
function play() {
playing = true;
}
function ansoperate(col,row) {
operate(col,row);
solve();
}
function operate(col,row) {
if (col >= colcount || row >= rowcount) return;
flip(col,row);
if (playing) {
if (col > 0) flip(col-1, row);
if (row > 0) flip(col, row-1);
if (col < colcount - 1) flip(col+1, row);
if (row < rowcount - 1) flip(col, row+1);
steps++;
if (autogen && isCleared()) {
alert("Cleared in " + steps + " steps!");
autogen = false;
}
}
}
// --- operation methods ---
function setcell(col,row,val) {
cells[col][row] = val;
setcellimage(col,row,imgs[val]);
}
function setcellimage(col,row,imgsrc) {
eval("document." + cellname(col,row) + ".src = '" + imgsrc + "'");
}
function setanscellimage(col,row,imgsrc) {
eval("document.ans" + cellname(col,row) + ".src = '" + imgsrc + "'");
}
function cellname(col,row) {
return "cell" + col + "_" + row;
}
function flip(col,row) {
setcell(col,row,(cells[col][row] + 1) % imgcount);
}
// --- status methods ---
function isCleared(){
var sample = cells[0][0];
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++)
if (cells[col][row] != sample) return false;
return true;
}
// --- finite field algebra solver
function modulate(x) {
// returns z such that 0 <= z < imgcount and x == z (mod imgcount)
if (x >= 0) return x % imgcount;
x = (-x) % imgcount;
if (x == 0) return 0;
return imgcount - x;
}
function gcd(x, y) { // call when: x >= 0 and y >= 0
if (y == 0) return x;
if (x == y) return x;
if (x > y) x = x % y; // x < y
while (x > 0) {
y = y % x; // y < x
if (y == 0) return x;
x = x % y; // x < y
}
return y;
}
function invert(value) { // call when: 0 <= value < imgcount
// returns z such that value * z == 1 (mod imgcount), or 0 if no such z
if (value <= 1) return value;
var seed = gcd(value,imgcount);
if (seed != 1) return 0;
var a = 1, b = 0, x = value; // invar: a * value + b * imgcount == x
var c = 0, d = 1, y = imgcount; // invar: c * value + d * imgcount == y
while (x > 1) {
var tmp = Math.floor(y / x);
y -= x * tmp;
c -= a * tmp;
d -= b * tmp;
tmp = a; a = c; c = tmp;
tmp = b; b = d; d = tmp;
tmp = x; x = y; y = tmp;
}
return a;
}
// --- finite field matrix solver
var mat; // integer[i][j]
var cols; // integer[]
var m; // count of rows of the matrix
var n; // count of columns of the matrix
var np; // count of columns of the enlarged matrix
var r; // minimum rank of the matrix
var maxr; // maximum rank of the matrix
function a(i,j) { return mat[i][cols[j]]; }
function setmat(i,j,val) { mat[i][cols[j]] = modulate(val); }
function solve() {
var col;
var row;
for (var goal = 0; goal < imgcount; goal++) {
if (solveProblem(goal)) { // found an integer solution
var anscols = new Array();
var j;
for (j = 0; j < n; j++) anscols[cols[j]] = j;
for (col = 0; col < colcount; col++)
for (row = 0; row < rowcount; row++) {
var value;
j = anscols[row * colcount + col];
if (j < r) value = a(j,n); else value = 0;
setanscellimage(col,row,nums[value]);
}
return;
}
}
// (aborted or) no solution
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++)
setanscellimage(col,row,outrangeimg);
alert("No solutions!"); // setanscellimage(0,0,nosolimg);
}
// // general solution:
// if (j < r) {
// for (var jj = r; jj < n; jj++) + any[jj] * modulate(-a(j,jj));
// }
// else {
// + any[j];
// }
function checkNormal() {
var size = colcount * rowcount;
m = size;
n = size;
np = n + size;
initMatrix();
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++) {
var i = row * colcount + col;
var line = mat[i];
for (var j = n; j < np; j++) line[j] = 0;
line[n + i] = 1;
}
if (sweep())
alert("Always solvable");
else alert("Not always solvable ( "
+ Math.pow(imgcount,n-r) + " identity patterns )");
}
function initMatrix() {
maxr = Math.min(m,n);
mat = new Array();
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++) {
var i = row * colcount + col;
var line = new Array();
mat[i] = line;
for (var j = 0; j < n; j++) line[j] = 0;
line[i] = 1;
if (col > 0) line[i - 1] = 1;
if (row > 0) line[i - colcount] = 1;
if (col < colcount - 1) line[i + 1] = 1;
if (row < rowcount - 1) line[i + colcount] = 1;
}
cols = new Array();
for (var j = 0; j < np; j++) cols[j] = j;
}
function solveProblem(goal) {
var size = colcount * rowcount;
m = size;
n = size;
np = n + 1;
initMatrix();
for (var col = 0; col < colcount; col++)
for (var row = 0; row < rowcount; row++)
mat[row * colcount + col][n] = modulate(goal - cells[col][row]);
return sweep();
}
function sweep() {
for (r = 0; r < maxr; r++) {
if (!sweepStep()) return false; // failed in founding a solution
if (r == maxr) break;
}
return true; // successfully found a solution
}
function sweepStep() {
var i;
var j;
var finished = true;
for (j = r; j < n; j++) {
for (i = r; i < m; i++) {
var aij = a(i,j);
if (aij != 0) finished = false;
var inv = invert(aij);
if (inv != 0) {
for (var jj = r; jj < np; jj++)
setmat(i,jj, a(i,jj) * inv);
doBasicSweep(i,j);
return true;
}
}
}
if (finished) { // we have: 0x = b (every matrix element is 0)
maxr = r; // rank(A) == maxr
for (j = n; j < np; j++)
for (i = r; i < m; i++)
if (a(i,j) != 0) return false; // no solution since b != 0
return true; // 0x = 0 has solutions including x = 0
}
alert("Internal error - contact the author to obtain a full solver");
return false; // failed in finding a solution
}
function swap(array,x,y) {
var tmp = array[x];
array[x] = array[y];
array[y] = tmp;
}
function doBasicSweep(pivoti, pivotj) {
if (r != pivoti) swap(mat,r,pivoti);
if (r != pivotj) swap(cols,r,pivotj);
for (var i = 0; i < m; i++) {
if (i != r) {
var air = a(i,r);
if (air != 0)
for (var j = r; j < np; j++)
setmat(i,j, a(i,j) - a(r,j) * air);
}
}
}
// --- document writer ---
function createField(imgsrc, prefix) {
var row;
var col;
for (row = 0; row < maxrowcount; row++) {
for (col = 0; col < maxcolcount; col++) {
document.write("<IMG SRC='" + imgsrc);
document.write("' NAME='" + prefix + cellname(col,row));
document.write("' onmousedown='javascript:" + prefix);
document.write("operate(" + col + "," + row + ")' ");
document.write("ondblclick='javascript:" + prefix);
document.write("operate(" + col + "," + row + ")'>");
}
document.write("<BR>");
}
}
// --- entry point ---
//onLoad();
//-->
</script>
<form name="toolbar">
<table>
<tbody><tr><td>
<input type="button" value="NEW GAME" onclick="javascript:newGame()">
<input type="button" value="SOLVE" onclick="javascript:solve()">
<input type="button" value="EDIT" onclick="javascript:edit()">
<input type="button" value="PLAY" onclick="javascript:play()">
</td></tr><tr height="40pt"><td>
<select name="colors" onchange="javascript:newSettings()">
<option value="2" selected="">2 colors
</option><option value="3">3 colors
</option><option value="4">4 colors
</option><option value="5">5 colors
</option></select>
<select name="dimension" onchange="javascript:newSettings()">
<option value="3x3">3 x 3
</option><option value="4x3">4 x 3
</option><option value="4x4">4 x 4
</option><option value="5x4">5 x 4
</option><option value="5x5">5 x 5
</option><option value="6x5" selected="">6 x 5
</option><option value="6x6">6 x 6
</option><option value="7x7">7 x 7
</option></select>
<input type="button" value="<-- CHECK" onclick="javascript:checkNormal()">
</td></tr></tbody></table>
</form>
<script language="JavaScript">
<!--
document.write("<TABLE><TR><TD>");
createField(emptyimg, "");
document.write("<TD WIDTH=10%><TD>");
createField(outrangeimg, "ans");
document.write("</TABLE>");
newSettings();
//-->
</script>
<table><tbody><tr><td><img src="blank.gif" name="cell0_0" onmousedown="javascript:operate(0,0)" ondblclick="javascript:operate(0,0)"><img src="blue.gif" name="cell1_0" onmousedown="javascript:operate(1,0)" ondblclick="javascript:operate(1,0)"><img src="blue.gif" name="cell2_0" onmousedown="javascript:operate(2,0)" ondblclick="javascript:operate(2,0)"><img src="blue.gif" name="cell3_0" onmousedown="javascript:operate(3,0)" ondblclick="javascript:operate(3,0)"><img src="blank.gif" name="cell4_0" onmousedown="javascript:operate(4,0)" ondblclick="javascript:operate(4,0)"><img src="empty.gif" name="cell5_0" onmousedown="javascript:operate(5,0)" ondblclick="javascript:operate(5,0)"><img src="empty.gif" name="cell6_0" onmousedown="javascript:operate(6,0)" ondblclick="javascript:operate(6,0)"><br><img src="blue.gif" name="cell0_1" onmousedown="javascript:operate(0,1)" ondblclick="javascript:operate(0,1)"><img src="blank.gif" name="cell1_1" onmousedown="javascript:operate(1,1)" ondblclick="javascript:operate(1,1)"><img src="blank.gif" name="cell2_1" onmousedown="javascript:operate(2,1)" ondblclick="javascript:operate(2,1)"><img src="blank.gif" name="cell3_1" onmousedown="javascript:operate(3,1)" ondblclick="javascript:operate(3,1)"><img src="blue.gif" name="cell4_1" onmousedown="javascript:operate(4,1)" ondblclick="javascript:operate(4,1)"><img src="empty.gif" name="cell5_1" onmousedown="javascript:operate(5,1)" ondblclick="javascript:operate(5,1)"><img src="empty.gif" name="cell6_1" onmousedown="javascript:operate(6,1)" ondblclick="javascript:operate(6,1)"><br><img src="blank.gif" name="cell0_2" onmousedown="javascript:operate(0,2)" ondblclick="javascript:operate(0,2)"><img src="blank.gif" name="cell1_2" onmousedown="javascript:operate(1,2)" ondblclick="javascript:operate(1,2)"><img src="blank.gif" name="cell2_2" onmousedown="javascript:operate(2,2)" ondblclick="javascript:operate(2,2)"><img src="blue.gif" name="cell3_2" onmousedown="javascript:operate(3,2)" ondblclick="javascript:operate(3,2)"><img src="blank.gif" name="cell4_2" onmousedown="javascript:operate(4,2)" ondblclick="javascript:operate(4,2)"><img src="empty.gif" name="cell5_2" onmousedown="javascript:operate(5,2)" ondblclick="javascript:operate(5,2)"><img src="empty.gif" name="cell6_2" onmousedown="javascript:operate(6,2)" ondblclick="javascript:operate(6,2)"><br><img src="blank.gif" name="cell0_3" onmousedown="javascript:operate(0,3)" ondblclick="javascript:operate(0,3)"><img src="blue.gif" name="cell1_3" onmousedown="javascript:operate(1,3)" ondblclick="javascript:operate(1,3)"><img src="blank.gif" name="cell2_3" onmousedown="javascript:operate(2,3)" ondblclick="javascript:operate(2,3)"><img src="blank.gif" name="cell3_3" onmousedown="javascript:operate(3,3)" ondblclick="javascript:operate(3,3)"><img src="blue.gif" name="cell4_3" onmousedown="javascript:operate(4,3)" ondblclick="javascript:operate(4,3)"><img src="empty.gif" name="cell5_3" onmousedown="javascript:operate(5,3)" ondblclick="javascript:operate(5,3)"><img src="empty.gif" name="cell6_3" onmousedown="javascript:operate(6,3)" ondblclick="javascript:operate(6,3)"><br><img src="empty.gif" name="cell0_4" onmousedown="javascript:operate(0,4)" ondblclick="javascript:operate(0,4)"><img src="empty.gif" name="cell1_4" onmousedown="javascript:operate(1,4)" ondblclick="javascript:operate(1,4)"><img src="empty.gif" name="cell2_4" onmousedown="javascript:operate(2,4)" ondblclick="javascript:operate(2,4)"><img src="empty.gif" name="cell3_4" onmousedown="javascript:operate(3,4)" ondblclick="javascript:operate(3,4)"><img src="empty.gif" name="cell4_4" onmousedown="javascript:operate(4,4)" ondblclick="javascript:operate(4,4)"><img src="empty.gif" name="cell5_4" onmousedown="javascript:operate(5,4)" ondblclick="javascript:operate(5,4)"><img src="empty.gif" name="cell6_4" onmousedown="javascript:operate(6,4)" ondblclick="javascript:operate(6,4)"><br><img src="empty.gif" name="cell0_5" onmousedown="javascript:operate(0,5)" ondblclick="javascript:operate(0,5)"><img src="empty.gif" name="cell1_5" onmousedown="javascript:operate(1,5)" ondblclick="javascript:operate(1,5)"><img src="empty.gif" name="cell2_5" onmousedown="javascript:operate(2,5)" ondblclick="javascript:operate(2,5)"><img src="empty.gif" name="cell3_5" onmousedown="javascript:operate(3,5)" ondblclick="javascript:operate(3,5)"><img src="empty.gif" name="cell4_5" onmousedown="javascript:operate(4,5)" ondblclick="javascript:operate(4,5)"><img src="empty.gif" name="cell5_5" onmousedown="javascript:operate(5,5)" ondblclick="javascript:operate(5,5)"><img src="empty.gif" name="cell6_5" onmousedown="javascript:operate(6,5)" ondblclick="javascript:operate(6,5)"><br><img src="empty.gif" name="cell0_6" onmousedown="javascript:operate(0,6)" ondblclick="javascript:operate(0,6)"><img src="empty.gif" name="cell1_6" onmousedown="javascript:operate(1,6)" ondblclick="javascript:operate(1,6)"><img src="empty.gif" name="cell2_6" onmousedown="javascript:operate(2,6)" ondblclick="javascript:operate(2,6)"><img src="empty.gif" name="cell3_6" onmousedown="javascript:operate(3,6)" ondblclick="javascript:operate(3,6)"><img src="empty.gif" name="cell4_6" onmousedown="javascript:operate(4,6)" ondblclick="javascript:operate(4,6)"><img src="empty.gif" name="cell5_6" onmousedown="javascript:operate(5,6)" ondblclick="javascript:operate(5,6)"><img src="empty.gif" name="cell6_6" onmousedown="javascript:operate(6,6)" ondblclick="javascript:operate(6,6)"><br></td><td width="10%"></td><td><img src="number0.gif" name="anscell0_0" onmousedown="javascript:ansoperate(0,0)" ondblclick="javascript:ansoperate(0,0)"><img src="number1.gif" name="anscell1_0" onmousedown="javascript:ansoperate(1,0)" ondblclick="javascript:ansoperate(1,0)"><img src="number0.gif" name="anscell2_0" onmousedown="javascript:ansoperate(2,0)" ondblclick="javascript:ansoperate(2,0)"><img src="number1.gif" name="anscell3_0" onmousedown="javascript:ansoperate(3,0)" ondblclick="javascript:ansoperate(3,0)"><img src="number0.gif" name="anscell4_0" onmousedown="javascript:ansoperate(4,0)" ondblclick="javascript:ansoperate(4,0)"><img src="outrange.gif" name="anscell5_0" onmousedown="javascript:ansoperate(5,0)" ondblclick="javascript:ansoperate(5,0)"><img src="outrange.gif" name="anscell6_0" onmousedown="javascript:ansoperate(6,0)" ondblclick="javascript:ansoperate(6,0)"><br><img src="number1.gif" name="anscell0_1" onmousedown="javascript:ansoperate(0,1)" ondblclick="javascript:ansoperate(0,1)"><img src="number0.gif" name="anscell1_1" onmousedown="javascript:ansoperate(1,1)" ondblclick="javascript:ansoperate(1,1)"><img src="number1.gif" name="anscell2_1" onmousedown="javascript:ansoperate(2,1)" ondblclick="javascript:ansoperate(2,1)"><img src="number0.gif" name="anscell3_1" onmousedown="javascript:ansoperate(3,1)" ondblclick="javascript:ansoperate(3,1)"><img src="number1.gif" name="anscell4_1" onmousedown="javascript:ansoperate(4,1)" ondblclick="javascript:ansoperate(4,1)"><img src="outrange.gif" name="anscell5_1" onmousedown="javascript:ansoperate(5,1)" ondblclick="javascript:ansoperate(5,1)"><img src="outrange.gif" name="anscell6_1" onmousedown="javascript:ansoperate(6,1)" ondblclick="javascript:ansoperate(6,1)"><br><img src="number0.gif" name="anscell0_2" onmousedown="javascript:ansoperate(0,2)" ondblclick="javascript:ansoperate(0,2)"><img src="number1.gif" name="anscell1_2" onmousedown="javascript:ansoperate(1,2)" ondblclick="javascript:ansoperate(1,2)"><img src="number1.gif" name="anscell2_2" onmousedown="javascript:ansoperate(2,2)" ondblclick="javascript:ansoperate(2,2)"><img src="number1.gif" name="anscell3_2" onmousedown="javascript:ansoperate(3,2)" ondblclick="javascript:ansoperate(3,2)"><img src="number0.gif" name="anscell4_2" onmousedown="javascript:ansoperate(4,2)" ondblclick="javascript:ansoperate(4,2)"><img src="outrange.gif" name="anscell5_2" onmousedown="javascript:ansoperate(5,2)" ondblclick="javascript:ansoperate(5,2)"><img src="outrange.gif" name="anscell6_2" onmousedown="javascript:ansoperate(6,2)" ondblclick="javascript:ansoperate(6,2)"><br><img src="number0.gif" name="anscell0_3" onmousedown="javascript:ansoperate(0,3)" ondblclick="javascript:ansoperate(0,3)"><img src="number0.gif" name="anscell1_3" onmousedown="javascript:ansoperate(1,3)" ondblclick="javascript:ansoperate(1,3)"><img src="number0.gif" name="anscell2_3" onmousedown="javascript:ansoperate(2,3)" ondblclick="javascript:ansoperate(2,3)"><img src="number1.gif" name="anscell3_3" onmousedown="javascript:ansoperate(3,3)" ondblclick="javascript:ansoperate(3,3)"><img src="number0.gif" name="anscell4_3" onmousedown="javascript:ansoperate(4,3)" ondblclick="javascript:ansoperate(4,3)"><img src="outrange.gif" name="anscell5_3" onmousedown="javascript:ansoperate(5,3)" ondblclick="javascript:ansoperate(5,3)"><img src="outrange.gif" name="anscell6_3" onmousedown="javascript:ansoperate(6,3)" ondblclick="javascript:ansoperate(6,3)"><br><img src="outrange.gif" name="anscell0_4" onmousedown="javascript:ansoperate(0,4)" ondblclick="javascript:ansoperate(0,4)"><img src="outrange.gif" name="anscell1_4" onmousedown="javascript:ansoperate(1,4)" ondblclick="javascript:ansoperate(1,4)"><img src="outrange.gif" name="anscell2_4" onmousedown="javascript:ansoperate(2,4)" ondblclick="javascript:ansoperate(2,4)"><img src="outrange.gif" name="anscell3_4" onmousedown="javascript:ansoperate(3,4)" ondblclick="javascript:ansoperate(3,4)"><img src="outrange.gif" name="anscell4_4" onmousedown="javascript:ansoperate(4,4)" ondblclick="javascript:ansoperate(4,4)"><img src="outrange.gif" name="anscell5_4" onmousedown="javascript:ansoperate(5,4)" ondblclick="javascript:ansoperate(5,4)"><img src="outrange.gif" name="anscell6_4" onmousedown="javascript:ansoperate(6,4)" ondblclick="javascript:ansoperate(6,4)"><br><img src="outrange.gif" name="anscell0_5" onmousedown="javascript:ansoperate(0,5)" ondblclick="javascript:ansoperate(0,5)"><img src="outrange.gif" name="anscell1_5" onmousedown="javascript:ansoperate(1,5)" ondblclick="javascript:ansoperate(1,5)"><img src="outrange.gif" name="anscell2_5" onmousedown="javascript:ansoperate(2,5)" ondblclick="javascript:ansoperate(2,5)"><img src="outrange.gif" name="anscell3_5" onmousedown="javascript:ansoperate(3,5)" ondblclick="javascript:ansoperate(3,5)"><img src="outrange.gif" name="anscell4_5" onmousedown="javascript:ansoperate(4,5)" ondblclick="javascript:ansoperate(4,5)"><img src="outrange.gif" name="anscell5_5" onmousedown="javascript:ansoperate(5,5)" ondblclick="javascript:ansoperate(5,5)"><img src="outrange.gif" name="anscell6_5" onmousedown="javascript:ansoperate(6,5)" ondblclick="javascript:ansoperate(6,5)"><br><img src="outrange.gif" name="anscell0_6" onmousedown="javascript:ansoperate(0,6)" ondblclick="javascript:ansoperate(0,6)"><img src="outrange.gif" name="anscell1_6" onmousedown="javascript:ansoperate(1,6)" ondblclick="javascript:ansoperate(1,6)"><img src="outrange.gif" name="anscell2_6" onmousedown="javascript:ansoperate(2,6)" ondblclick="javascript:ansoperate(2,6)"><img src="outrange.gif" name="anscell3_6" onmousedown="javascript:ansoperate(3,6)" ondblclick="javascript:ansoperate(3,6)"><img src="outrange.gif" name="anscell4_6" onmousedown="javascript:ansoperate(4,6)" ondblclick="javascript:ansoperate(4,6)"><img src="outrange.gif" name="anscell5_6" onmousedown="javascript:ansoperate(5,6)" ondblclick="javascript:ansoperate(5,6)"><img src="outrange.gif" name="anscell6_6" onmousedown="javascript:ansoperate(6,6)" ondblclick="javascript:ansoperate(6,6)"><br></td></tr></tbody></table>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment