使用Prolog的互动游戏,你能解决吗? :)

时间:2015-12-06 16:06:13

标签: prolog

我正在开发一个任务来开发谓词,以帮助玩下面列出的这个双人游戏。

问题

一个2人游戏是用一组排列成堆的相同的石头进行的。可能有任意数量的宝石和任何数量的堆。在这个游戏中的一个举动包括从一堆中移除任意数量的石头,或从2堆中的每一堆中移除相同数量的石头。这场比赛的输家是拿起最后一块石头的球员。

e.g 三堆大小为3,2,1,有10种可能的移动,导致以下状态:

Take from first heap only: [2,2,1],[1,2,1],[2,1]
Taking from 2nd heap only: [3,1,1],[3,1]
Taking from the 3rd heap only: [3,2]
Taking from the 1st and 2nd heaps: [2,1,1], [1,1]
Taking from the 1st and 3rd heaps: [2,2]
Taking from the 2nd and 3rd heaps: [3,1]

[3,1] occurs twice because there are three different ways of reaching it in one move.

任务1

创建谓词移动(S1,S2),在回溯时返回在一次移动中可从S1到达的所有状态S2。

到目前为止我们有什么

change([_|T],T).

change([H|T],[H1|T]):-
between(1,H,W),
H1 is H-W,
W<H.

change([H|T],[H|T1]):-
change(T,T1).

change2([H|T],[H1|T1]):-
between(0,H,W),
H1 is H-W,
W<H,
change(T,T1).

因此,这会产生从任何单个列表中获取任意数量的宝石的结果,并且目前将从不同的列表中获取不同数量的宝石。所以目前我无法让你在不同列表中使用相同数量的宝石工作。

是的,如果我有[1,4,1,3],我希望能够以[4,3]结束。

任何帮助都会非常感谢这项任务:)。

0 个答案:

没有答案