2012-07-21 54 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