0

我正在按照 Donald Knuth 的算法来解决游戏Mastermind

但是,我被困在第二步:

  1. 创建一组剩余的可能性(此时有 1296 个)。第一个猜测是aabb。

  2. 如果它们是答案,则从 S 中删除不会给出相同分数的彩色和白色钉子的所有可能性。

  3. 对于每个可能的猜测(不一定在 S 中),计算每个可能的彩色/白色分数从 S 中消除多少可能性。猜测的分数是这些值中最小的。以最高分(minimax)进行猜测。

  4. 回到步骤 2,直到你做对了。

我生成了一组可能性(基本上是 6 x 6 x 6 x 6)。从这里,我制定了最初的猜测aabb“策划者”以x白色钉和y黑色钉的形式给出反馈。

白色钉子表明我们猜测的四种颜色之一是正确的,但位置错误。黑色的钉子表明我们猜测的四种颜色之一是正确的并且在正确的位置。

从这里开始,必须根据该信息修改下一个猜测。

我的问题是:鉴于我的第一个猜测是aabb并且我的反馈是,比如说1w1b,我从一组可能性中删除了哪些排列?

4

2 回答 2

1

在第2步中实际上很清楚。这是解释版本。

您可以遍历每个排列,计算其相对于当前猜测的分数(如3w1w3b等),并删除那些给出与实际分数不同的分数的排列。

于 2013-09-27T04:17:36.633 回答
1
def CalcScore(answer, solution):
    """ A function that will return a tupple of the number of white & black pegs """
    ...

todel = []
for poss in poss_answers:  # Assuming that poss_answers is a list/array of possible ansers
    if not current_score == CalcScore(ThisTry, poss):
       todel.append(poss)
for delthis in todel:
    poss_answers.remove(delthis)
于 2013-09-27T04:29:01.670 回答