我正在尝试解决明天要在Prolog中完成的任务。这是关于飞镖游戏的,程序应该计算出一种方法,可以通过三次飞镖投掷达到输入分数。
输入程序应该是整数n(1-180),并且是目标分数。
输出应该是(最多可以)达到输入分数(最多三投)的一种方法。换句话说,累计点的总和应等于输入整数n。就像在游戏中一样,每次投掷可以是一次,两次或三次。 Bullseyes不是问题的一部分。如果无法达到目标分数,则应打印“不可能”。
例如:
Input: 180
Output: triple 20, triple 20, triple 20
Input: 96
Output: triple 19, double 15, single 9
Input: 27
Output: triple 9
有人对好的方法有想法吗?代码片段受到热烈的欢迎,因为我是逻辑编程的新手。 :)
指针:
您要搜索特定的解决方案[X,Y,Z],其中从允许的飞镖得分中选择X,Y,Z(我不知道是哪个。例如30,20,10)。
[X,Y,Z]
。分数应为列表[30,20,10]
。[30,0,0]
和[20,10,0]
和[10,10,10]
都还可以。[30,0,0]
,[0,30,0]
,[0,0,30]
全部都收集到同一个等效类中,用单个[30,0,0]
表示。现在...
使用“对整数进行约束逻辑编程”还是“普通序言”?
两者都很好,但是CLP(FD)很好。
对于“普通Prolog”,您只需要知道Prolog处理器如何处理程序。使用“生成并测试”方法,搜索空间不大。 member/2
和Score =:= X + Y + Z
是你的朋友。
一行!去,去,去!