问题标签 [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 投票
3 回答
153 浏览

prolog - Prolog 程序根据以下事实找到犯罪的罪魁祸首

关于情况的事实——图片

(免费在线 OCR :)警方正试图追查三个一直在炼南瓜的孩子团伙。到目前为止,他们已经确定了以下事实:孩子们的名字是安吉拉、玛丽和大卫;一个是5,一个是7,一个是8;一个姓Diamond,姓Grant的比姓Leung的大3岁。您可以假设安吉拉和玛丽是女性,而大卫是男性。

使用课堂上讨论的斑马示例中显示的技术(代码可在课程网页上找到)查找有关该帮派的缺失信息:每个孩子的年龄、性别、名字和姓氏,与上述数据一致。按原样对上述数据进行编码,不要添加额外的事实。适当地记录您的代码。此外,使用您的 Prolog 代码来显示计算信息是否唯一标识了罪魁祸首。在文件 q2testa.txt 中提交这些测试结果及其含义的简短说明。

(斑马技术示例。)

我认为嫌疑人可以组织如下:

我也知道年龄排列如下:

鉴于上述信息,这就是我如何创建 Prolog 函数以生成完整的嫌疑人表的地方。一些帮助将不胜感激。

0 投票
1 回答
80 浏览

prolog - 爱因斯坦谜语中的数值比较

我的版本对学生的姓名、年龄、出身和学科感兴趣。

但是有些规则我不知道如何在 Prolog 中实现。例如:

奥利弗比数学学生大两岁,但比华盛顿的学生小两岁。

如何创建一个可以比较年龄的规则?

0 投票
1 回答
105 浏览

prolog - 斑马之谜的年龄比较

我正在尝试通过 CLP 用 ECLiPSe Prolog 解决类似于爱因斯坦谜题的逻辑谜题:

一个乐队有 6 位爵士乐手,没有一位年龄小于 70 岁。每个艺术家都写过不同的歌曲。

使用的乐器是:位置 1 的钢琴(乐队的左侧外侧),位置 2 的长笛(位置 1 的右侧),位置 3 的鼓(位置 2 的右侧),位置 4 的低音提琴(位置 3 的右侧),位置 5 的萨克斯管(位置 4 的右侧)和位置 6(乐队的右侧外侧)的小号。

艺术家的名字是:安迪、科尼利厄斯、弗里茨、马库斯、皮特、沃尔特。
艺术家的姓氏是:Bramkamp、Franke、Karolewicz、Lueg、Schlüter、Weidemann。
艺人年龄分别
为:76、77、78、79、80、82。歌曲名称为:Im Bermudadreieck、Jupps-Eck-Blues、Krösken-Tanz、Legende vom Bergmann、Sally's Dog、Wanne-Eickel -布鲁斯。

线索 1:弹钢琴的人至少比使用低音提琴的人大两岁。
线索 2:在Lueg右边的一个位置是WalterWalter的位置也比Sally's Dog作曲家更靠左一位。
线索3:位置5的人比Pete小一岁,比Im Bermudadreieck的作曲家大一岁。
线索 4:比这位77 岁的艺术家更靠右的一位是Wanne-Eickel-Blues的作曲家。
线索5:比弗里茨更靠右的一个位置弗兰克弗兰克Legende von Bergmann的作曲家至少大 3 岁。这位作曲家比施吕特年长。线索6:比科尼利厄斯
更靠右的一位是80岁的魏德曼Weidemann也比Karolewicz更靠左一位。他们都不是Krösken-Tanz的作曲家。 线索 7:Jupps-Eck-Blues 的作曲家Schlüter比Markus更靠右一位。SchlüterAndi更靠左一个位置。

我对 Prolog 完全陌生,感谢http://www.hakank.org/bprolog/http://www.hakank.org/bprolog/a_round_of_golf.pl我能够完成大部分代码。目前我停留在线索 4上,我不知道如何将 77 岁艺术家的位置 (1..6) 与年龄列表 (76..80:82) 结合起来。

0 投票
2 回答
207 浏览

prolog - prolog 中的 Zebra 解决方案如何工作?

如果列表实际上一直是空的,为什么houses(Hs)谓词不会通过各种检查?member(elem, list)我知道这听起来可能是个愚蠢的问题,但围绕 Prolog 进行思考实际上很难,尤其是在多年的面向对象编程之后。任何帮助表示赞赏!

编辑:我没有提到我问序言的查询,就是这个zebra_owner(Owner)

编辑2:还发布问题的文本(有点著名)以供参考:

  1. 一排五座彩色的房子,每座都有一个主人、一只宠物、香烟和一杯饮料。
  2. 英国人住在红房子里。
  3. 西班牙人有一条狗。
  4. 他们在温室里喝咖啡。
  5. 乌克兰人喝茶。
  6. 绿房子紧挨着白房子。
  7. 温斯顿吸烟者有一条蛇。
  8. 在黄色的房子里,他们抽 Kool。
  9. 在中间房子里,他们喝牛奶。
  10. 挪威人住在左边第一个房子里。
  11. 切斯特菲尔德吸烟者住在养狐狸的人附近。
  12. 在有马的房子附近的房子里,他们抽着库尔。
  13. Lucky Strike 吸烟者喝果汁。
  14. 日本人抽肯特。
  15. 挪威人住在蓝屋附近。

谁拥有斑马,谁喝水?

0 投票
0 回答
83 浏览

python - python逻辑谜题关系

尝试使用 Logic 在 python 中解决以下问题:

结果是:

这让我无法跑步

你能帮我解决一下吗?

谢谢你。

0 投票
1 回答
79 浏览

prolog - 简化 CLP 难题中的约束

在当地的游戏之夜,四个小伙子正在参加拼字游戏和国际象棋比赛。利亚姆在国际象棋中击败了马克,詹姆斯获得第三名,16 岁的小伙子获胜。利亚姆在拼字游戏中排名第二,15 岁获胜,詹姆斯击败 18 岁,19 岁获得第三。凯文比马克小 3 岁。在国际象棋中排名最后的人在拼字游戏中排名第三,并且只有一个小伙子在两场比赛中获得相同的位置。

我觉得我的解决方案比需要的更笨重:

有没有更好的方法来表达约束?


建议后的改进版本:

0 投票
0 回答
30 浏览

prolog - Prolog - 不使用列表的爱因斯坦之谜

我需要做的是解决爱因斯坦的谜语,但不使用列表。这个怎么做?我尝试了很多次,但我找不到解决方案。谢谢您的回答。

0 投票
1 回答
50 浏览

python - Python:从列表中打印 n 个随机项目,但输出必须满足多个规则

在 python 中,我想从一个较大的字符串列表中打印一个较小的随机选择字符串列表,返回 n 个项目。但是,生成的较小列表必须应用条件,以便某些项目不能一起存在于新的较小列表中。

以我正在研究的这个例子为例:使用 python,我想随机生成 2 个独特的运动队(team1, ,每个有 5 名球员)从可用球员的组合列表( ,总共 10 名球员team2)中相互对抗。players_available

players_available是手动预定义的,以“Tom”、“Lucy”和“James”等球员姓名列表的形式存在。但是,“Tom”和“James”不能在同一支球队中存在(例如,因为他们都太优秀了,不能在同一支球队打球!)。总共有大约 10 条规则。

我将如何在 python 中执行此操作?我已经设法从一个主列表中打印了 2 个唯一列表,但我不确定将规则和条件应用于 2 个输出列表的最佳方式。这是我所在的位置:

我不是 python 专家,所以我试图找出一个使用基本 python 原理(即大量 if/elif 语句?)和核心 python 库(最好尽可能少)的解决方案。

0 投票
0 回答
10 浏览

sliding-tile-puzzle - 我希望为这个木制益智游戏计算所有可能的解决方案

我希望为这个木制益智游戏计算所有可能的解决方案(对不起,我还不允许嵌入图像):

https://rukminim1.flixcart.com/image/416/416/knj7wcw0/puzzle/h/8/3/1-wooden-jigsaw-puzzle-wooden-toys-games-for-kids-travel-games-original- imag27f8tavzf9zg.jpeg

这些碎片在一个 8x8 的网格中组合在一起。

不用担心语言,索引块配置的最佳数据结构是什么,然后是用于计算精确填充网格的所有排列的逻辑流。

[如果措辞不当请见谅!]

0 投票
2 回答
47 浏览

prolog - 如何用 swiprolog 解决这个难题?

我正在尝试使用 prolog 解决这个难题,但我很难写下规则并完成解决方案。这就是谜...

上周末是男子一年一度的保龄球锦标赛,对当地市民来说是一场竞赛和乐趣。今年,五位参赛者为冠军争先恐后地打了一场比赛,兴奋之情溢于言表。投球手每赢得一场比赛,他就得到两分,比赛结束时得分最高的投球手获胜。确定每个投球手的全名、他们的高分(264 到 288)以及每个人赢得的分数(28 到 36)。

  1. 弗兰克的姓氏不是汤普森,他的得分最高,但他没有赢得比赛。

  2. 史密斯先生的高分比投球手的 30 分高 3 针。

  3. 史蒂文的姓不是斯图尔特。获得36分的比赛获胜者以奇数获得高分。

  4. 迈克尔以比威廉姆斯先生少 6 分的成绩完赛。

  5. 得分为 273 的投球手比史密斯先生多两分,但比克雷格少两分。

  6. 汤普森先生赢得的分数比沃尔特少,但比史蒂文刘易斯多。

这就是我到目前为止所拥有的......