C中的Mastermind评分算法

时间:2013-03-22 13:28:08

标签: c algorithm scoring

我正在使用C进行客户端/服务器策划游戏,到目前为止我已经完成了。我的程序正在运行,它平均6-7次猜测解决了这个秘密。然后我看着互联网,发现Donals Knuths的方法:

  1. 创建一组剩余的可能性(此时有 1296)。第一个猜测是aabb。
  2. 从S中删除不会给出相同分数的所有可能性 如果它们是答案的话,有色和白色的钉子。
  3. 对于每个可能的猜测(不一定在S中)计算多少 S的可能性将被消除 彩色/白色分数。猜测得分最少 值。以最高分(minimax)播放猜测。
  4. 回到第2步,直到你做对了。
  5. 我在这里要说的是我使用了5个位置和8种颜色。

    当我试图优化我的程序时,我很难理解第3步,特别是计算什么猜测会消除最多的可能性,看起来像。

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

1 个答案:

答案 0 :(得分:3)

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

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

你必须阅读整篇博文来弄清楚细节,但基本上这会实现Knuth的“受制于”要求:如果探测是一个新的最小值,或者它是否等于当前的最小值,则是池的成员,当前最小值不是池的成员,将其保持为新的最小值,否则循环到下一个探测器。