Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

猜三女神座位顺序

浏览上一个主题 浏览下一个主题 向下  留言 [第1页/共1页]

1 猜三女神座位顺序 于 周三 一月 30, 2013 1:08 pm

又来出题啦:

有三女神坐在古老印度寺庙里,祂们名字一位称真理 (永远说实话) 、一位称谎言 (永远说谎) 、以及一位称智慧 (有时说实话有时说谎)

有人想知道三位女神分别坐在什麽位置,就分别向左、中、右三位各问一个问题:
1. 对左边那位问:「谁坐在你旁边?」 「真理!」她答。
2. 对中间那位问:「你是谁?」 「智慧」她答。
3. 对右边那位问:「你旁边是谁?」 「谎言」

你知道三位女神各坐哪各位置了吗?

查阅用户资料 http://yauhsien.wordpress.com

2 回复: 猜三女神座位顺序 于 周三 一月 30, 2013 6:36 pm

最近在看一本有趣的python入门书,叫<和孩子一起学编程>迷上了. prolog卡在用dlx(dancing link X)方法处理数独和三基友,一直没什么进展,生疏了.

先上人肉解吧
三个人都是对中间位置的人是谁做出判断. 左边的不是真理,如果左边的是真理,一定不会说中间的是真理; 中间的也不是真理,如果中间的是真理,一定会说自己是真理; 所以右边的是真理, 所以中间的是谎言, 所以左边的是智慧

查阅用户资料

3 回复: 猜三女神座位顺序 于 周三 一月 30, 2013 6:38 pm

这个人肉推理过程很像三基友的推理:三个人来自辽宁,湖南,重庆,其中李浩比重庆人大,张翔比辽宁人小,重庆人比王明大。求三个人分别来自哪里,及年龄排序。 人肉解法很简单,重庆人既不是李浩也不是王明,所以重庆人是张翔......

查阅用户资料

4 回复: 猜三女神座位顺序 于 周三 一月 30, 2013 6:45 pm

通常我每遇到一种匹配类问题的算法, 都要用三基友问题测试一下

查阅用户资料

5 回复: 猜三女神座位顺序 于 周四 一月 31, 2013 3:11 am

我说一下这个问题的一个解决方案,当然不是唯一的。
我自己答这种题比较吃力。有人说我逻辑思维有问题。我自己感觉我记忆不大好。

遇到这种题,首先看是一种排序问题。这样准备一张白纸,在中间写上你听到的一个对象的名字。然后根据这个对象和其他对象的关系让他们排列下。调换他们的位置,最后就是正确答案了。

得到这个答案后还要验证下是不是唯一的解。

查阅用户资料

6 于 周四 一月 31, 2013 9:34 am

Dancing Links是高德纳(Knuth)先生提到的一种双向linked list可能制造的程序行为,但个人觉得利用Prolog解释器的操作系统或抽象机器特性来编写程序,观念是复杂。

我的答法是直接写出最像是逻辑叙述的句子,用演绎法产生各种潜在解,然後用归纳法验证,找到答案。

1. 定义三位女神:
代码:
goddess('Truth').
goddess('Lie').
goddess('Wisdom').

2. 考虑第一个问句,什麽情况时问句成立:
参数是实际坐在那个位子的女神,只不过我们不都知道一个位置坐的是哪一位女神,而谓词则代表当参数符合的时候,这个问句成立。
代码:
dialog1_is_valid('Truth', _) :- fail.
dialog1_is_valid('Lie', Any) :- goddess(Any), Any \= 'Truth'.
dialog1_is_valid('Wisdom', Any) :- goddess(Any).

3. 如法炮制第二、三个问句。

4. 定义座位表:
代码:
seats([Left, Middle, Right]) :-
    dialog1_is_valid(Left, Middle),
    dialog2_is_valid(Middle),
    dialog3_is_valid(Right, Middle),
    setof(Any, member(Any,[Left,Middle,Right]), Goddesses),
    length(Goddesses, 3).
求解则是 ?- seats(Goddesses). 即可。

查阅用户资料 http://yauhsien.wordpress.com

浏览上一个主题 浏览下一个主题 返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题