我正在开发一个数独谜题,除了它没有生成有效数字外,我还能正常工作。不过,我的函数应该生成有效数字。 (我从here得到的小提琴()函数。
这是我的generatePuzzle()函数:
// Generate sudoku puzzle
function generatePuzzle() {
for(var h = 1; h <= 10; h++) {
fiddle(rowVal);
}
//emptyCells();
putCellVal();
for(var f = 0; f < 80; f++) {
if (document.forms[0].elements[f].value != '') {
document.forms[0].elements[f].readOnly = 'readonly';
}
}
}
正如我所说,它不会生成有效数字。我的fiddle()
功能仍然存在错误(http://blog.forret.com/2006/08/a-sudoku-challenge-generator/)。
如果您不是数独玩家,请遵循以下规则:
每行必须包含1 - 9 的每个数字
每列必须包含1 - 9 的每个数字
每个3 x 3正方形带有较粗边框的每个数字必须只有1 - 9 一次
JSFiddle链接: http://jsfiddle.net/oliverni/rq5m6/
答案 0 :(得分:2)
交换,行/列/块的小提琴函数中的逻辑是正确的,您可以实际检查存储正确值的rowVal矩阵。
问题在于您将值分配给输入元素的方式。
function putCellVal() {
var z = 0;
for(var i = 0; i < rowVal.length; i++) {
for(var j = 0; j < rowVal[i].length; j++) {
document.forms[0].elements[z].value = rowVal[i][j];
z++;
}
}
}
显然,您为每个块使用一个表,并且从上面的赋值逻辑中,您实际上是将rowVal的“行”分配给“块”。您可以检查rowVal [0]的值,即[1,9,8,4,2,3,6,5,7],即第一个块中的值
<table>
<tr>
<td><input type="text" name="x0y0" maxlength="1">
<td><input type="text" name="x1y0" maxlength="1">
<td><input type="text" name="x2y0" maxlength="1">
</tr>
<tr>
<td><input type="text" name="x0y1" maxlength="1">
<td><input type="text" name="x1y1" maxlength="1">
<td><input type="text" name="x2y1" maxlength="1">
</tr>
<tr>
<td><input type="text" name="x0y2" maxlength="1">
<td><input type="text" name="x1y2" maxlength="1">
<td><input type="text" name="x2y2" maxlength="1">
</tr>
</table>
答案 1 :(得分:0)
我想我已经拥有了!我将一个巨大的表改为9个小表,但现在不是x0y5是元素5,现在它是元素11!