Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等级数独难度等级_Javascript_Algorithm_Sudoku - Fatal编程技术网

Javascript 等级数独难度等级

Javascript 等级数独难度等级,javascript,algorithm,sudoku,Javascript,Algorithm,Sudoku,我正在构建一个有趣的数独游戏,用Javascript编写。 一切正常,每次都是用一个解决方案完全生成电路板 我唯一的问题是,这正是阻止我将项目公开的原因 就是我不知道如何给我的板子打分。我到处都找过了, 我不想自己写算法,这不是重点 另外,它们对我来说太复杂了,因为我不是数学家 我唯一接近的是但问题是,代码是以一种糟糕的、没有文档记录的、非常特别的方式编写的,因此无法借用 我要说的是-谁能给我指一个提供数独评分源代码的地方吗 谢谢 更新22.6.11: 这是我的,我已经实施了我自己的评分系统,它

我正在构建一个有趣的数独游戏,用Javascript编写。
一切正常,每次都是用一个解决方案完全生成电路板

我唯一的问题是,这正是阻止我将项目公开的原因
就是我不知道如何给我的板子打分。我到处都找过了,
我不想自己写算法,这不是重点 另外,它们对我来说太复杂了,因为我不是数学家

我唯一接近的是
但问题是,代码是以一种糟糕的、没有文档记录的、非常特别的方式编写的,
因此无法借用

我要说的是-
谁能给我指一个提供数独评分源代码的地方吗

谢谢

更新22.6.11:
这是我的,我已经实施了我自己的评分系统,它依赖于

关于基本的人类逻辑解决技巧,请查看。

也许你可以给一个谜题的一般“约束性”评分?考虑到一个新的谜题(只有提示)可能有一定数量的单元格,可以简单地通过消除它不能包含的值来确定。我们可以说,与典型的单元格相比,这些单元格被“约束”到的可能值的数量更少,并且存在的高度约束的单元格越多,人们就可以在不进行猜测的情况下在谜题上取得更多的进展。(这里我们认为对“猜测”的要求是使谜题变得困难的原因)。 然而,在某一点上,玩家必须开始猜测,同样,单元格的约束性很重要,因为给定单元格的可供选择的值越少,就越容易找到正确的值(并增加其他单元格的约束性)


当然,我实际上并不玩数独(我只是喜欢为它编写游戏和解算器),所以我不知道这是否是一个有效的指标,只是大声想一想=)

我以前做过这件事

关键是,你必须从人类逻辑的角度找出要使用的规则。您提供的示例详细介绍了许多不同的人类逻辑模式,如右侧risde上的列表

实际上,您需要使用这些规则来解决这个难题,而不是使用计算机规则(使用简单的模式替换可以在毫秒内解决)。每次更换电路板时,您都可以从“最简单”的模式(例如,单元格或行中的单个打开框)重新开始,然后沿着链向下移动,直到找到下一个逻辑“规则”来使用

在对sodoku评分时,每种方法都会分配一些分值,您可以将这些分值加在需要填写的每个字段上。“单个空单元格”可能会得到0,“XY链”可能会得到100。将所有需要的方法(和频率)制成表格,最后得出最终权重。有很多地方列出了这些权重的预期值,但它们都是相当经验性的。您正在尝试模拟人类逻辑,因此可以自由地提出您自己的权重或增强系统(如果您真的只使用XY链,这个难题可能比需要更先进的机制更容易)

你也可能会发现,即使你有一个独特的索多库,它是无法通过人类的逻辑解决的


还要注意的是,这远比用标准的、模式化的方法来解决它需要更多的CPU。几年前,当我编写代码时,我花了好几秒钟(我完全忘记了,但可能最多15秒钟)来解决我创建的一些生成的难题。

我自己也考虑过这个问题,我能做的最好的事情就是通过实际解决和分析游戏树来决定解决难题的难度

最初: 使用“人类规则”实现您的解算器,而不是使用人类玩家不太可能使用的算法。(这本身就是一个有趣的问题。)根据人类使用的困难程度,在你的解算器中为每个逻辑规则打分。使用数百或更大的值,这样您就可以自由调整彼此之间的分数

解决这个难题。在每个位置:

  • 枚举在当前游戏位置可以逻辑推断的所有新单元格
  • 每次扣减的分数(完全解决一个单元格)是足以进行该扣减的最简单规则的分数
  • 编辑:如果必须同时应用多个规则,或多次应用一个规则才能进行单个扣减,请将其作为单个“复合”规则应用进行跟踪。要对化合物进行评分,可以使用单个规则应用程序的最小数量来求解一个单元格乘以每个单元格的分数之和。(这类扣除需要相当多的脑力劳动。)根据您的规则集,计算应用程序的最小数量可能是CPU密集型工作。任何完全解决一个或多个单元格的规则应用程序都应该在继续探索位置之前回滚
  • 排除所有扣款中得分高于最低值的扣款。(这里的逻辑是,玩家不会感知到更难的,因为他们已经感知到了一个更容易的并接受了它;而且,这承诺会减少决策过程中的大量计算。)
  • 当前职位的最低分数除以“最容易”的扣减次数(如果存在多个扣减,找到一个更容易)就是该职位的难度。因此,如果规则A是得分为20的最简单适用规则,并且可以应用于4个单元格,则该职位的得分为5
  • 在游戏中随机选择一个“最简单”的扣减,并前进到下一个游戏位置。我建议只为下一个位置保留完全解决的单元格,不通过其他状态。这当然是浪费CPU,重复已经完成的计算,但目标是模拟人类游戏