【问题标题】:How do I reduce the possibilities in Mastermind based on feedback?如何根据反馈减少 Mastermind 中的可能性?
【发布时间】:2013-09-27 03:48:25
【问题描述】:

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

但是,我被困在第二步:

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

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

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

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

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

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

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

我的问题是:鉴于我的第一个猜测是 aabb,而我的反馈是 1w1b,我应该从这组可能性中删除哪些排列?

【问题讨论】:

  • 您希望我们列出它们,还是描述该系列?
  • 或者只是获取它们的一般模式。
  • 一般模式?不是针对这种特殊情况要删除的排列吗?你想要一个算法还是什么?
  • @Beta,我认为 OP 想要一个算法
  • @justhalf 抱歉,我删除了我的 cmets,因为他们错了。你的两个答案现在都很有意义。我没有意识到我们将可能性与当前的猜测进行了比较。

标签: algorithm language-agnostic


【解决方案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)

【讨论】:

    【解决方案2】:

    第2步其实已经很清楚了。这里是解释版。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多