【发布时间】:2018-02-27 01:01:31
【问题描述】:
请耐心等待,我知道这显然非常简单。我似乎无法围绕序言。我有这个逻辑问题:
在最近的节日中,100 米热火受到了严密监控。
每位参赛者必须参加两场比赛,以便确定平均名次。
只有一名跑者在两场比赛中都在同一个地方完赛。
艾伦从来都不是最后的。查尔斯总是打败达伦。布赖恩至少有一个 第一名。艾伦至少在其中一场比赛中获得第三名。两个达伦 查尔斯获得第二名。这两个结果是什么?
答案:第 1 场比赛:Brian、Charles、Alan、Darren。第二场比赛:查尔斯、达伦、艾伦、 布赖恩。
这是我到目前为止想出的,但我无法弄清楚“至少”和其他更复杂的条件。
place(one).
place(two).
place(three).
place(four).
/* Place (constants): one, two, three, four.
Names (variables): Alan_1, Brian_1, Charles_1, Darren_1
Names (variables): Alan_2, Brian_2, Charles_2, Darren_2
*/
higher(one,two).
higher(one,three).
higher(one,four).
higher(two,three).
higher(two,four).
higher(three,four).
is_higher(X,Y):- higher(X,Y).
is_higher(X,Y):- higher(X,Z), is_higher(Z,Y).
is_different(S,T,U,V,W,X,Y,Z):- W\=X,W\=Y,W\=Z,X\=Y,X\=Z,Y\=Z,W\=S,W\=T,
W\=U,W\=V,S\=T,T\=U,U\=V,S\=U,S\=V,T\=V,
T\=W,T\=X,T\=Y,T\=Z,U\=W,U\=X,U\=Y,U\=Z,
V\=X,V\=Y,V\=Z.
solution(Alan_1, Brian_1, Charles_1, Darren_1, Alan_2, Brian_2, Charles_2,
Darren_2):-
place(Alan_1), place(Brian_1), place(Charles_1), place(Darren_1),
place(Alan_2), place(Brian_2), place(Charles_2), place(Darren_2),
Alan_1\=four, Alan_2\=four, higher(Charles_1, Darren_1), higher(Charles_2,
Darren_2),
is_different(Alan_1, Brian_1, Charles_1, Darren_1, Alan_2, Brian_2,
Charles_2, Darren_2).
/* Query */
% solution(Alan_1, Brian_1, Charles_1, Darren_1, Alan_2, Brian_2, Charles_2,
Darren_2).
任何帮助或智慧之言将不胜感激。
【问题讨论】:
标签: prolog