【发布时间】:2012-01-30 17:46:05
【问题描述】:
免责声明:我不是在寻找 Mastermind 的解决方案。
我正在尝试编写一个程序来解决像 mastermind 这样的游戏,但我有点卡住了。我不想要一个完整的解决方案,只帮助我无法通过的部分。这是游戏:
有N 预先知道的可能颜色。有一组未知的k 被选中并保密。目标是猜测秘密集中的颜色(重复)。让我再次强调这是一个集合,所以顺序无关紧要,但允许重复。例如
颜色为
a,b,c,d,e,f,g,h(N=8),未知集为{a,c,c}(k=3)。
进行连续猜测,从而获得有关秘密集的更多信息。每个猜测必须是一组(允许重复)k 颜色。对每个猜测的响应是猜测和未知集计数重复之间的共同颜色数。例如
猜测:
a,d,e结果:1猜测:
b,c,f结果:1猜测:
a,a,g结果:1猜测:
a,c,h结果:2猜测:
b,e,h结果:0
猜测是别人做出的。我的目标是:
- 确定何时知道有关特定颜色的信息。
- 确定何时可以逻辑推导出未知集合。
在游戏开始时,没有颜色绝对在集合中或绝对不在未知集合中(假设N>1)。在得到0 的猜测之后,已知该猜测的所有颜色都不在未知集中。如果结果是k,则该猜测的所有颜色都已知在未知集中。我无法编写一个程序来找出介于两者之间的所有情况。例如,在上述最后一次猜测之前,对于任何颜色都没有任何确定的信息。在最后一次猜测之后,已知该集合为a,c,c。逻辑是这样的:
- 到 5 时,
b,e,h不在未知集合中 - 到 4 时,
a,c在未知集合中 - 1,
d不在未知集合中 - 到 2,
f不在未知集合中 - 到 3,
g不在未知集合中 - 因此,未知集中的唯一颜色是
a和c。 - 到 3 时,
a不止一次出现在未知集中。 - 因此未知集是
a,c,c。
我可以通过这种方式处理逻辑,但我不确定一般如何编程。如果有人可以建议一种结构化的方式来解决它,那就太好了。 我更喜欢使用伪代码的高级解释,而不是任何一种语言的完整实现。谢谢。
【问题讨论】:
-
"interviewee":(嗯)你为什么需要这个,你需要多快得到答案?
-
仅供参考,您正在寻找的术语(“具有重复但无序的集合”)通常称为 multiset 或袋子。
-
@RBarryYoung 我需要它,因为我正在尝试编写以学习如何在代码中实现逻辑,而这是分配给我的项目。这不是家庭作业。我并不迫切需要它,但继续进步会很好。我自己花了几天的时间,但我没有找到办法。
-
你选择的名字是这个问题的根源。原则上,我通常会等待一段时间,然后再帮助某人解决看似面试的问题。
-
@RBarryYoung 这是我第一次注册stackoverflow时选择的用户名。