等级数独难度级别

vsy*_*ync 18 javascript algorithm sudoku

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

我唯一的问题是,这就是让我从公开发布我的项目的原因
是我不知道如何评估我的电路板的难度等级.我在任何地方都看过,
发布在论坛上等等.我不想自己编写算法,这不是这个项目的重点,
除此之外,它们对我来说太复杂了,因为我不是数学家.

我唯一接近的是这个网站,它通过JS进行评分,
但问题是,代码是用一种糟糕的无证,非常特别的方式编写的,
因此无法借用......

我会谈到这一点 -
任何人都可以请我指向一个提供Sudoku评级/评级源代码的地方吗?

谢谢

更新22.6.11:
这是我的数独游戏,我已经实现了自己的评分系统,它依赖
于基本的人工逻辑解决技术,所以请查看它.

wbe*_*rry 5

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

最初:使用"人类规则"实现解算器,而不是人类玩家不太可能使用的算法.(这本身就是一个有趣的问题.)根据人类使用的难度,对解算器中的每个逻辑规则进行评分.使用数百或更大的值,这样您就可以自由地相对于彼此调整分数.

解决难题.在每个位置:

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

拼图的总体难度是通过游戏树的路径中的位置分数的总和.

编辑:替代位置得分:不是使用更难的规则完全排除扣除,而是计算每个规则(或复合应用程序)的总体难度并选择最小值.(这里的逻辑是,如果规则A得分为50,规则B得分为400,规则A可以应用于一个单元格但规则B可以应用于十,则位置得分为40,因为玩家更有可能发现十个比一个更容易的比赛更难的比赛之一.但这需要你计算所有可能性.)

编辑:Briguy37建议的替代方案:包括位置分数中的所有扣除.得分每个位置作为1 / (1/d1 + 1/d2 + ...)其中d1,d2等是个别的扣除.(这基本上计算"抗作任何扣减"在某一个人"演绎电阻"的位置d1,d2等等.但这需要你来计算所有的可能性.)

希望这种评分策略能够为谜题制定一个指标,随着您对难度的主观评价的增加而增加.如果没有,那么调整规则的分数(或从上述选项中选择启发式)可以实现所需的相关性.一旦你在得分和主观经验之间取得了一致的相关性,你就应该能够判断"简单","难"等数字阈值应该是多少.然后你就完成了!