gpt4 book ai didi

JavaScript 数独 - 检查规则

转载 作者:行者123 更新时间:2023-11-30 00:20:29 29 4
gpt4 key购买 nike

我正在研究 javascript 数独游戏,就输入验证而言,我很困惑。当每个值都输入到数独表中时,我有一个 onkeyup 触发一个函数,我试图用它来确保没有值进入已经存在这样一个值的行/列/框。这是我第一次尝试这样的项目,所以我提前为菜鸟代码道歉。

这是我到目前为止所得到的:

function myFunction(row) {
var x = 0;
var arraySolution = [
[x, x, 4, 5, x, 3, x, 7, x],
[x, x, x, x, x, x, 3, 1, x],
[3, 5, x, x, x, 9, 2, x, x],
[x, x, x, x, 2, x, 9, 3, 7],
[6, x, 9, x, x, x, 4, x, 8],
[4, 7, 2, x, x, x, x, x, x],
[x, x, 1, x, x, x, x, 5, 2],
[x, 4, 5, x, x, x, x, x, x],
[x, 6, x, 8, x, 1, 7, x, x]
];

var num = row.innerHTML; //get its innerHTML
num = parseInt(num, 10);
if (num < 1 || num > 9) {
row.innerHTML = "";//clear it if num is not what you expect
alert("Please Enter a Number Between 1 and 9.");
}


//Checks Row
for (var b = 0; b < 9; b++) {
if (num != arraySolution[0][b]) {
console.log("This is a valid input");
b++;
}
else if (num = arraySolution[0][b]) {
alert("this is an invalid input");

row.innerHTML = "";
}
}
}

我知道使用 x 作为占位符可能不是最好的计划,但此时它主要用于测试目的,因此输入的值在测试开始之前不会存在。在我尝试检查行的地方,我显然是在尝试遍历索引 (0,0) -> (0,8) 处的数组,并检查该行中是否没有值存在两次。我有这个工作来检查单行,但似乎在尝试添加更多行来检查时破坏了它。

我试图检查多行的一个简短示例(我完全理解我需要做什么,就实际的数独逻辑而言,但我无法验证这个东西)

    //Checks Row
for (var b = 0; b < 9; b++) {
if ((num != arraySolution[0][b]) || (num != arraySolution[1][b])) {
console.log("This is a valid input");
b++;
}
else if ((num = arraySolution[0][b]) || (num != arraySolution[1][b])){
alert("this is an invalid input");
row.innerHTML = "";
}
}

最佳答案

您可以使用此函数来验证解决方案:

// returns true if arraySolution is valid, false otherwise
function valid(arraySolution) {
for (var y = 0; y < 9; ++y) {
for (var x = 0; x < 9; ++x) {
var value = arraySolution[y][x];

if (value) {
// Check the line
for (var x2 = 0; x2 < 9; ++x2) {
if (x2 != x && arraySolution[y][x2] == value) {
return false;
}
}

// Check the column
for (var y2 = 0; y2 < 9; ++y2) {
if (y2 != y && arraySolution[y2][x] == value) {
return false;
}
}

// Check the square
var startY = Math.floor(y/3)*3;
for (var y2 = startY; y2 < startY + 3; ++y2) {
var startX = Math.floor(x/3)*3;
for (x2 = startX; x2 < startX + 3; ++x2) {
if ((x2 != x || y2 != y) && arraySolution[y2][x2] == value) {
return false;
}
}
}
}
}
}

return true;
}

关于JavaScript 数独 - 检查规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347585/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com