问题标签 [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 回答
838 浏览

prolog - 用 prolog 解决 Caliban 问题

我正在使用 prolog for school 解决逻辑难题。以下是线索:

  1. 布朗、克拉克、琼斯和史密斯是 4 位重要的公民,他们以建筑师、银行家、医生和律师的身份为社区服务,尽管不一定分别。

    布朗比琼斯更保守,但比史密斯更自由,他的高尔夫球手比比他年轻的男人更好,收入也比比克拉克大的男人高。

    比建筑师挣得多的银行家既不是最年轻的,也不是最年长的。

    打高尔夫球比律师差的医生,也没有建筑师那么保守。

    不出所料,最年长的人最保守,收入最高,最年轻的人是最好的高尔夫球手。

    每个人的职业是什么?

    提示:根据财富、能力、相对年龄等对人进行排名,请使用数字 1、2、3、4 注意说明 1 是否代表,例如,最年轻或最年长。这样做可以使比较易于编码。

To code(如下)将线索给出的所有关系解释为列表列表,其中每个列表定义

我像这样定义 relative_politics、relative_salary、relative_age 和 golf_ability 关系

例如:

它适用于所有关系。

我想我已经忠实地将所有线索翻译成 prolog,但是当我查询数据库时它只是说失败。例如:

我正在使用 NU Prolog。我想知道我在翻译线索时是否出错,或者我遗漏了数据库满足列表 L 的所有条件所需的事实。

0 投票
1 回答
460 浏览

prolog - GNU Prolog 之谜,类似于爱因斯坦之谜

我是一个完全的编程初学者,必须使用 GNU Prolog 在 Prolog 中创建和解决一个谜语,类似于爱因斯坦谜语,尽管不太复杂。我一直在尝试为下中包含的项目创建一个谜语。

到目前为止,我的代码看起来像这样,但我真的不完全理解我做错了什么或就在这里。我可以在 GNU Prolog 中编译代码,但它无法解开谜团:

我将不胜感激任何帮助,因为我对这些事情很不熟悉,但必须为我正在上课的课程找出解决方案。任何提示都会有很大帮助。谢谢!

0 投票
1 回答
796 浏览

zebra-puzzle - Clingo:断言部分约束

我正在尝试实现一个程序,clingo以解决其中一个经典谜语,其中您有一系列事实和约束的断言,并且您必须推断出其他事实。问题来了:

五个不同国籍的男人住在五个并排的房子里,每个房子的颜色都不一样;他们都有不同的工作,不同的喜爱动物和喜爱的饮料。我们知道:

  1. 英国人住在红房子里。
  2. 西班牙人最喜欢的动物是狗。
  3. 日本人是画家。
  4. 意大利人喝茶。
  5. 挪威人住在左起第一个房子里。(number_norw = 1)
  6. 住在温室里的人喝咖啡。
  7. 绿房子就在白房子的右边。(number_green = number_white + 1)
  8. 店员喜欢猫。
  9. 推销员住在黄色的房子里。
  10. 牛奶是中心屋最喜欢的饮料。(number_milk = 3)
  11. 挪威人的房子与蓝色的房子相邻。(number_norw = number_blue ± 1)
  12. 厨师喜欢果汁。
  13. 住在医生旁边的房子里的男人喜欢狐狸。
  14. 爱马的男人住在推销员的隔壁。

任务是找出谁喜欢斑马。所以我提出断言:

现在我坚持断言约束;如何编码断言 1. 到 14.?我只需要了解正确的语法,所以如果有人可以通过一两个示例让我走上正确的轨道,我可以弄清楚其余的。谢谢。

注意,我可以从 5. 和 11. 推断出第二个房子是蓝色的,因为11. number_blue = number_norw ± 1,5. number_norw = 1和 0 不在可能的数字范围内,但我不想手动将其添加到约束中,因为我希望clingo自己弄清楚。

0 投票
2 回答
496 浏览

prolog - Prolog 谜题面包师、肉工和木匠

这是我在网上找到的一个非常简单的难题,我在网上找不到任何解决方案。规则很简单:

  • 有6个工匠,M.Baker和他的儿子,M.Carpenter和他的儿子,M.Meatman和他的儿子
  • 每个工匠可以是面包师、木匠或肉工
  • 儿子和父亲不能做同样的工作
  • 姓不能是工作名称(M.Baker 和他的儿子不能是面包师)

我们知道: - M.Meatman 的儿子是面包师 - M.Baker 和 M.Carpenter 的儿子做同样的工作

我实现了这个谓词:

然后我尝试:

你能告诉我我错在哪里吗?

  • 注意:我是 Prolog 的新手。我以前从未使用过这种语言(我是 Golang、Python、C 程序员......)。
  • 注2:对不起,我的英语,我刚刚翻译了我的法语例子,也许工作名称或动词不正确......
  • 注意 3:我已经尝试过实现斑马拼图,我意识到这比这个更容易解决......奇怪吗?
0 投票
2 回答
198 浏览

prolog - 座位限制程序序言 - 对称

我正在寻找有关为什么这个问题有偶数个解决方案的指导:

一个怪人有他自己的野生动物收藏,包括熊、狮子、老虎、大象、狼獾、犀牛和野狗。这 7 只动物构成了他的危险动物收藏,并被安置在 7 个动物围栏中,并排成一排,最左边的围栏是 1 号,最右边的围栏是 7 号。

其中一些动物相互搅动,因此该人决定他必须将以下几对动物分开:

- 熊和金刚狼 - 犀牛和野狗 - 狮子和老虎 - 熊和大象 - 大象和野狗 - 大象和熊

如果两只动物不相邻,即如果它们之间有另一只围栏,则它们是分开的。所有动物必须放在不同的围栏中。

我想知道为什么这个问题总会有偶数个解决方案?据我了解,约束问题通过对称获得效率——也就是说,只要对称完成,您就可以轻松地交换围栏中的动物以获得不同的解决方案。但我不太明白这一点,如果有人能提供更清晰的解释,那将非常有帮助。先感谢您。

0 投票
1 回答
452 浏览

prolog - 用 SWI Prolog 解决爱因斯坦之谜

所以我尝试通过使用我从这个网站学到的教程来解决另一个爱因斯坦谜题。但是,我似乎没有得到答案。当我进行查询时,只有当我想知道哪对夫妇喜欢 Violet 时才返回 true。

0 投票
1 回答
242 浏览

prolog - 增加堆栈大小时prolog获取语法错误

试图用 prolog 解决难题并遇到了一些问题。

因此,我尝试在设置中增加堆栈大小并再次运行程序。但它会导致另一个错误:Syntax error on line... 错误行与谓词中的运算符“not”一致。

这是我的代码:

发现这种 prolog 行为很奇怪......也许有人有同样的问题?

0 投票
2 回答
516 浏览

prolog - Prolog 逻辑谜题和约束编程

我有一个家庭作业,要在序言中定义 10 个事实来解决这个难题。

我已经定义了 8 个约束并将我的解决方案空间减少到 15 个。但我不知道如何定义最后两个事实。

例如,我为事实 10 尝试了这样的解决方案。

这减少了解决方案空间,但之后它仍然包含不应该在减少的解决方案集中的元素。

我正在使用这个函数来获取我的解决方案集大小

这对于解决方案集元素

我不知道如何描述这两个事实。如果有人可以提供帮助,我将不胜感激:)。

对不起,我的英语不是我的母语。

0 投票
3 回答
502 浏览

prolog - 伯特兰·罗素拼图

解决以下Caliban 问题,将每条线索“忠实地”翻译成Prolog,即尽可能忠实地。

作为一个简单的抽象练习,假设四个无意义的符号 a、b、c 和 d 以一种或另一种顺序对应于同样无意义的符号 w、x、y 和 z,并进一步假设

如果 a 不是 x,则 c 不是 y。
如果 b 是 y 或 z,则 a 是 x。
如果 c 不是 w,则 b 是 z。
如果 d 是 y,那么 b 不是 x。
如果 d 不是 x,则 b 是 x。

两组符号对应的顺序是什么?

我尝试了以下代码:

但它显示失败。任何帮助将不胜感激。

0 投票
1 回答
323 浏览

prolog - 约束逻辑程序中的奇怪警告和计算结果

首先,很抱歉发布整个程序,但我不知道问题是我不知道哪些部分是不相关的。这是 SWI-Prolog 中相同逻辑难题的两种略有不同的实现,第一个成功,第二个失败,我找不到失败的原因。

谜题:

我选择以下方法

首先是低效的后续实现:

这有效并给出了正确的结果。但是当我尝试重新排序解决方案过程的条款以提高效率时(这是第二个实现)

尝试加载文件时收到未分配的变量警告:

并且计算返回false。但它不应该返回相同的结果吗?我看不出有什么区别...