问题标签 [zebra-puzzle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
435 浏览

prolog - Prolog - 爱因斯坦之谜

我正在尝试使用 Prolog 解决爱因斯坦谜语。对不起我的英语。任务是:

  • 在公寓楼里有 5 个公寓。(一楼一楼、二楼、三楼、四楼)
  • 穆勒罗维家族有 4 个孩子。
  • 管理员住在中间楼层。
  • Meierova 夫人支付的费用比 3. 楼的医生少 60 克朗。
  • 住在最高楼层的家庭有 5 个孩子。
  • Kernovi 家庭比老师有 1 个孩子。
  • Kaufmann 先生担任销售代表。
  • 老师支付了她平价 1740 克朗的费用。
  • 住在最高楼层的看门人。
  • 医生支付了他的平价 1800 克朗。
  • 在花费 1760 克朗的公寓里,没有孩子。
  • 2 楼家庭的孩子是 3 楼家庭的两倍。
  • 汉兹先生住在克诺维家族的正上方。
  • 在看门人下的公寓里住着 2 个孩子。
  • Mullerovi 为他们的 1770 克朗买单。
  • 屋顶平台比底层便宜 10 克朗。
  • 销售代表比看门人多付 30 克朗。

我的代码看起来像,我不知道如何解决雇佣问题:

感谢您的任何建议。

0 投票
0 回答
102 浏览

prolog - Prolog 与猪的逻辑任务

有四头猪(a, b, c, d);他们来自四个不同的国家(australia, germany, france, ireland);他们吃不同的饭菜(grass, vegies, eggs, chestnuts)。

b来自德国。澳大利亚猪吃蔬菜。爱尔兰猪不吃鸡蛋。猪C吃栗子,猪A不是法国人,它吃草。

哪只猪来自哪里,它吃什么?有人可以帮忙吗?

0 投票
1 回答
328 浏览

prolog - Prolog 工作拼图

我是 prolog 的新手,必须完成这项任务。我很困惑如何与我所拥有的事实和我自己得出的结论建立关系。在这个问题的代码部分,你会找到一个给定信息的列表和我从数据中得出的结论。如果我能在正确的方向上得到指导以完成我的任务,我将不胜感激。先感谢您!

原始问题的更新:

所以这就是我所拥有的,我遇到了一个非常奇怪的错误:

如果我取出逗号并用句点替换,我会出错。主要错误在于包含代码:

我收到的错误消息是:

0 投票
1 回答
790 浏览

prolog - Prolog 中的爱因斯坦谜题

我正在尝试使用 Prolog 解决爱因斯坦之谜。任务是

  1. 挪威人住在第一间房子里。
  2. 英国人住在红房子里。
  3. 瑞典有狗作为宠物。
  4. 丹麦人喝茶。
  5. 绿屋在白宫的左边。
  6. 住在温室里的男人喝咖啡。
  7. 抽 Pall Mall 烟的人养鸟。
  8. 住在黄屋的男人抽登喜路。
  9. 住在中屋的男人喝牛奶。
  10. 抽 Blends 的人住在有猫的人旁边。
  11. 养马的人住在抽登喜路的人旁边。
  12. 抽蓝大师的男人喝啤酒。
  13. 德国人抽王子。
  14. 挪威人住在青瓦台旁边。
  15. 抽 Blends 的人是喝水的人的邻居。
  16. 有人有一个鱼缸。

该程序:

0 投票
1 回答
218 浏览

prolog - Swi-prolog 双向子句/事实

我需要帮助在 Swi-Prolog 中描述以下事实:

克拉克和琼斯住在同一所房子里,一起下棋。

经理和建筑师住在同一栋房子里,没有其他员工住在那栋房子里。

我有这样的结构:

[person(_, _), person(_, _), ...]

其中person描述了以下内容:

person(Name, Occupation)

我正在解决的难题包含更多的事实,但我无法描述这些双向事实。

为了简单起见,我使解决方案非常类似于函数式编程,我将所有内容拆分为函数。我有一个名为 的方法fact1(List),它接受前面描述的结构(person结构列表)。

我如何形容克拉克和琼斯住在同一所房子里?

 

 

↓ 更新 ↓</h2>

整个拼图如下(我知道它与上面的示例不匹配)。

布朗、克拉克、琼斯和史密斯是贝尔敦第一国民银行的会计师、出纳员、经理和行长,但不一定分别担任这些职务的人的名字。

  1. 尽管收银员一直在击败他,但总统将不会与其他人下棋。

  2. 经理和收银员都是比会计更好的棋手。

  3. 琼斯和史密斯是隔壁邻居,晚上经常一起下棋。

  4. 克拉克的国际象棋比琼斯好。

  5. 会计师住在总统附近,但不靠近任何其他人。

在朋友的帮助下,我设法通过预先执行一些逻辑任务来解决它。

我结合事实一、三和五,得到以下事实:

收银员只和总统玩。

琼斯和史密斯住在一起,一起玩耍。

会计师与总裁同住。

结论:琼斯和史密斯既不能当总裁也不能当收银员,因为他们住在一起玩,但总裁和会计住在一起,只和收银员一起玩。

然后我添加了以下限制,然后我得到了一个确定性的单一答案:

0 投票
1 回答
256 浏览

prolog - Prolog:错误:> / 2:参数没有充分实例化

我帖子末尾的代码应该回答以下难题:

布朗、克拉克、琼斯和史密斯是 4 位重要的公民,他们以建筑师、银行家、医生和律师的身份为社区服务,尽管不一定分别。布朗比琼斯更保守,但比史密斯更自由,他的高尔夫球手比比他年轻的男人更好,收入也比比克拉克大的男人高。比建筑师挣得多的银行家既不是最年轻的,也不是最年长的。

打高尔夫球比律师差的医生,也没有建筑师那么保守。不出所料,最年长的人最保守,收入最高,最年轻的人是最好的高尔夫球手。每个人的职业是什么?


当我尝试启动代码时,出现错误:

代码是:

0 投票
1 回答
286 浏览

prolog - 序言:试图解决一个难题!返回假

我帖子末尾的代码应该回答以下难题:

布朗、克拉克、琼斯和史密斯是 4 位重要的公民,他们以建筑师、银行家、医生和律师的身份为社区服务,尽管不一定分别。布朗比琼斯更保守,但比史密斯更自由,他的高尔夫球手比比他年轻的男人更好,收入也比比克拉克大的男人高。比建筑师挣得多的银行家既不是最年轻的,也不是最年长的。

打高尔夫球比律师差的医生,也没有建筑师那么保守。不出所料,最年长的人最保守,收入最高,最年轻的人是最好的高尔夫球手。每个人的职业是什么?

代码:

但是,当我运行它时,它返回 false!

有人可以帮我吗?

0 投票
1 回答
988 浏览

prolog - 在 Prolog 中解决一个难题

我是 prolog 的新手,我正在尝试解决这个难题。我在 youtube 上做了一些关于 prolog 基础的教程,但我需要一些帮助来解决下面的难题。

两周前,四名爱好者在他们附近的天空中看到了物体。这四个人都在不同的日子报告了他或她的目击事件。联邦调查局来了,能够给每个人不同的解释,说明他或她“真正”看到了什么。你能确定每个人在哪一天(周二到周五)看到这个物体,以及它原来是那个物体吗?

  1. K 先生在本周早些时候的某个时间比看到气球的那个人发现了他,但在本周晚些时候的某个时间,比发现风筝的那个人(不是 G 女士)发现了他的踪迹。
  2. 星期五的目击事件是由 Barn 女士或看到飞机的人(或两者兼有)造成的。
  3. 尼克先生周二没有出现。
  4. K 先生不是那个对象原来是电线杆的人。

我已经正确设置了我的规则,但我似乎无法理解逻辑。我正在寻找指导而不是直接答案。在最右边,我列出了我试图回答的每个问题的编号

0 投票
3 回答
323 浏览

prolog - 解决prolog中的谜语

我想在序言中解决这个谜语:

莉莉、杰克和黛西的学生上同一所大学。他们都来自不同的国家,有着不同的爱好。他们都上美国的一所大学,其中一人住在那里。莉莉的成绩比来自意大利的那个好。杰克的成绩比喜欢读书的人要好。最好的成绩有一个喜欢足球的人。杰克来自德国,黛西喜欢做饭。

谁是谁(姓名、国家、爱好、成绩)?

正确的解决方案应该是:

  • Lily,美国,读书,二年级
  • 杰克,德国,足球,一年级
  • Daisy,意大利,烹饪,三年级

我现在的问题是我不知道如何解决这个谜语。我应该如何定义事实以及解决谜题的最佳方法是什么?

0 投票
1 回答
551 浏览

prolog - 在序言中解决简单的音乐家逻辑难题

大家好,我还是新手,我仍然不知道如何用 Prolog 解决这个难题,我做了一些尝试,似乎错误且不完整,这就是问题:

在一次音乐演奏会上,五名学生(约翰、凯特、拉里、玛丽和尼克)演奏了五首音乐作品。巴赫两首,莫扎特两首,维瓦尔第一首。有三位小提琴手和两位钢琴家。每个学生只演奏一首曲子,只演奏一种乐器。找出学生的顺序,他们各自的乐器和作曲家,条件如下:

  1. 作曲家没有连续演奏。最后演奏维瓦尔第,先演奏莫扎特。

  2. 在两首小提琴曲之间演奏一首钢琴曲,在第一首和最后一首钢琴曲之间演奏两首小提琴曲。

  3. 莫扎特没有钢琴曲。

  4. 凯特排在第三位。

  5. 约翰演奏了莫扎特的一首曲子,紧随其后的是弹钢琴的尼克。

  6. 玛丽没有演奏维瓦尔第的作品。

这里是我的half-code

  1. 我不知道如何写关于钢琴和小提琴的#2 语句。
  2. 我不知道如何在约翰之后写尼克声明N1==john_num+1,
  3. 不,我只是坚持使用 Prolog 解决这个问题,即使我已经知道答案,但在 prolog 中是全新的,并且在阅读教程后仍然感到困惑。