Prolog 序言;“获胜位置”;

Prolog 序言;“获胜位置”;,prolog,Prolog,这是一个2人从列表中删除数字的游戏。如果玩家选择了最后一个号码,玩家将失败。根据删除列表中数字的两条规则 有一个问题, 写一个谓词win(S),如果S是 轮到他上场的球员,否则将失败。此外 如果给出正确答案,您的代码应该避免计算 同一位置不止一次。例如,只有960个 从[30,30]可以达到的位置,但要进行数十亿次游戏 可以从那里开始演奏 我真的很困惑[30,30]怎么能达到960个位置。根据这两条规则,如果我只从一个元素中减去N,我只能达到60个状态 Y = [29, 30] or Y

这是一个2人从列表中删除数字的游戏。如果玩家选择了最后一个号码,玩家将失败。根据删除列表中数字的两条规则

  • 有一个问题,

    写一个谓词win(S),如果S是 轮到他上场的球员,否则将失败。此外 如果给出正确答案,您的代码应该避免计算 同一位置不止一次。例如,只有960个 从[30,30]可以达到的位置,但要进行数十亿次游戏 可以从那里开始演奏

    我真的很困惑[30,30]怎么能达到960个位置。根据这两条规则,如果我只从一个元素中减去N,我只能达到60个状态

    Y = [29, 30]  or  Y = [30, 29]
    Y = [28, 30]  or  Y = [30, 28]
    Y = [27, 30]  or  ...
    ...
    Y = [1, 30]
    Y = [30]
    
    或者如果我从2个元素中减去N,我只能达到30个状态

    Y = [29, 29]
    Y = [28, 28]
    ...
    Y = [1, 1]
    Y = []
    

    我真的很困惑如何才能达到960的位置。然而,win(S)将评估S是否是一个胜利的位置。。。这是否意味着电流S只需一步就能直接导致[1]?或者当前的S可能通过多次移动导致[1]。

    您在第一个示例中错误计算了可能的状态数。你的“或”欺骗了你,以为每一行只是两个状态,但每一个“或”都会分支到它自己的新替代列表中。将其视为基数为31的2位数字(“数字”为0到30)。所以你有31*31个组合或两位数,减去0的大小写,也就是960。所以它说的是所有可能的状态,直到它达到[1]。我希望我没有弄错。但你认为获胜的位置在这里意味着什么?我不确定游戏规则是什么。你们给出了几个链接,但这是关于减少列表中元素的另外两个问题,但并没有提到任何关于游戏规则的内容。规则是如何表述的?@潜伏者实际上,它将元素描述为堆。每个堆中有N块石头。[10,9,8],所以,堆1=10块石头,堆2=9块石头,依此类推。根据我的链接,我有两种方法移除这些石头。第一个规则是从任意一堆中移除N块石头,第二个规则是从任意两堆中移除N块石头。这些基本上与我前面的两个问题相同。两名玩家轮流按照这两条规则移除石头。如果一个玩家捡起最后一块石头,他就会迷失方向。@Lourger我不愿意发布课程作业表上的确切措辞,因为我害怕被剽窃。不管怎样,我想现在没事了。。因为我不是在这里复制和粘贴其他人回答的代码..您在第一个示例中错误计算了可能的状态数。你的“或”欺骗了你,以为每一行只是两个状态,但每一个“或”都会分支到它自己的新替代列表中。将其视为基数为31的2位数字(“数字”为0到30)。所以你有31*31个组合或两位数,减去0的大小写,也就是960。所以它说的是所有可能的状态,直到它达到[1]。我希望我没有弄错。但你认为获胜的位置在这里意味着什么?我不确定游戏规则是什么。你们给出了几个链接,但这是关于减少列表中元素的另外两个问题,但并没有提到任何关于游戏规则的内容。规则是如何表述的?@潜伏者实际上,它将元素描述为堆。每个堆中有N块石头。[10,9,8],所以,堆1=10块石头,堆2=9块石头,依此类推。根据我的链接,我有两种方法移除这些石头。第一个规则是从任意一堆中移除N块石头,第二个规则是从任意两堆中移除N块石头。这些基本上与我前面的两个问题相同。两名玩家轮流按照这两条规则移除石头。如果一个玩家捡起最后一块石头,他就会迷失方向。@Lourger我不愿意发布课程作业表上的确切措辞,因为我害怕被剽窃。不管怎样,我想现在没事了。。因为我不是在这里复制和粘贴别人回答的代码。。