【问题标题】:Mastermind Scoring Algorithm in CC中的策划者评分算法
【发布时间】:2013-03-12 09:09:29
【问题描述】:

我正在用 C 语言开发一个客户端/服务器策划游戏,到目前为止我已经完成了。我的程序正在运行,平均 6 到 7 次猜测它就解决了这个秘密。然后我上网查了一下,发现了 Donals Knuths 的方法:

  1. 创建一组剩余的可能性(此时有 1296)。第一个猜测是 aabb。
  2. 从 S 中删除所有不会给出相同分数的可能性 如果它们是答案的话,那就是彩色和白色的钉子。
  3. 对于每个可能的猜测(不一定在 S 中)计算有多少 对于每个可能的情况,S 中的可能性都会被消除 彩色/白色分数。猜测的分数是最低的 价值观。以最高分(minimax)进行猜测。
  4. 回到第 2 步,直到你做对了。

这里要说的是,我用了5个位置和8种颜色。

当我试图优化我的程序时,我很难理解第 3 步的样子,尤其是计算什么猜测会消除最多的可能性。

我知道我必须查看每个元素并将其相互比较,但我不确定如何比较它,因为我没有任何白色/黑色值。而且我想知道如何判断满足某些条件的条目会消除最大的可能性。

【问题讨论】:

    标签: c algorithm scoring


    【解决方案1】:

    我在my blog 讨论了算法并给出了一个实现(用Scheme,而不是C)。棘手的部分是 minimax 函数中的这个谓词:

    (or (< size min-size)
        (and (= size min-size)
             (member (car ps) pool)
             (not (member min-probe pool))))
    

    您必须阅读整篇博文才能了解详细信息,但这基本上实现了 Knuth 的“受制于”要求:如果探测是新的最小值,或者等于当前最小值,则池的成员,并且当前最小值不是池的成员,保持它为新的最小值,否则循环到下一个探测。

    【讨论】:

    • 谢谢!我在你的博客上找到了我正在寻找的东西,当我看到表格时,我意识到你只是在计算可能性,当你锁定一种颜色时,剩下的就是。这就是它的全部吗?我已经想到了,但不确定,因为它只处理“颜色是否在正确的位置”条件,而忽略了“它是否包含这些颜色”条件。
    • @Nurfed:你是新来的。欢迎来到堆栈溢出!如果您发现某个答案有用,您应该通过单击答案左侧的向上箭头给它一个赞成票。如果在这种情况下,您提出了原始问题,则应通过单击答案左侧的复选标记来接受答案。
    • 在我的声望达到 15 之前我不能投票。我会检查一下,但我想你可能会先回复我的评论!
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多