2012-07-21 50 views
3

我在这个问题上停留了一段时间,它基本上是反向工程公牛和牛的游戏。 在这里阅读更多:http://rosettacode.org/wiki/Bulls_and_cows 我无法为下面给出的问题制定逻辑,如果您能想到解决方法,请评论相同。生成公牛和牛的秘密字给定n字符串输入

问题陈述:

鉴于一些线索词和奶牛和公牛的每个单词的数量(格式ABCD/DBCA等),程序 应该能够制定出实际的字通过评估给出线索单词并生成输出秘密词。

测试案例:

输入: DBCC 0 2
CDAB 2 1
CAAD 1 2
CDDA 2 0

输出: BDAA

+0

除输出“BDAA”不遵循规则。你引用的页面说“没有重复”,但我看到一个双A。当然,这只会让问题更加困难。 – 2012-07-21 17:47:30

+0

哦,我提到了公牛队和奶牛队的比赛总体情况,反正会有重复处理。 – Akina91 2012-07-21 17:52:19

+1

我认为这与主谋更类似,因为你被允许重复。这些算法应该有所帮助:http://en.wikipedia.org/wiki/Mastermind_(board_game) – IVlad 2012-07-21 17:55:42

回答

3

的想法是为了减少可能的解决方案的空间。开始之前,所有4^4组合都是可能的。读完第一条线索[DBCC 0 2]后,可以消除许多可能的解决方案,在此特定示例中,您可以消除所有具有D的状态,其中所有具有B的状态都是如此上。只需消除所有不符合当前线索的解决方案。

对每个线索都做这件事,直到只剩下一种解决方案。另一个有趣的问题当然是如何产生好的线索模式。

+0

这似乎是一个很好的方法,我开始生成字符串排列。非常感谢! – Akina91 2012-07-21 17:58:03

+0

当然,排除第一列有Ds的所有行只是一阶逻辑。您还需要消除至少有两个字符不是DBCC的任何状态。 – 2012-07-21 18:04:02

+0

是的,塞思是绝对正确的,我的回答并不意味着“完整”,因为我写的是从这个线索可以推断出来的一切,我只是想指出你正确的方向。 – timos 2012-07-21 18:24:34

0

我所采取的方式是:1。 生成所有可能的话,把它们放在一个列表(阵列) 2.随机选择它们(第一个问题)中的一个,并要求为线索 3.取答案(让我们说这是2,1) 4.开始比较 第一,第二,...,从列表中的最后一个字 5.如果他们给同一线索的问题:算来,PLAC