Created
July 31, 2019 15:58
-
-
Save JessicaC/3e25b1755f022994ea42cd30be42d35f to your computer and use it in GitHub Desktop.
lightsout.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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