轨道
/
Prolog
Prolog
/
练习
/
二进制谜题
二进制谜题

二进制谜题

中等

简介

你的奶奶最近对解二进制谜题产生了浓厚的兴趣。 虽然她越解越熟练,但还是常常会卡住。 作为贴心的孙辈,你决定写一个小应用,能解开任何二进制谜题。 这样你就能给奶奶提示她的下一步了。

说明

你的任务是解出一个二进制谜题。 每个二进制谜题都恰好有 一个 解,应用以下规则就能找到它:

  1. 每个格子都必须填入 0 或 1。
  2. 不能有三个或更多相同的数字相邻。因此,如果两个相邻的格子含有相同的数字,那么紧挨着它们的格子必须含有另一个数字。
  3. 每一行和每一列都必须包含相同数量的 0 和 1。
  4. 每一行和每一列都互不相同。

你拿到的谜题是未完成的,由多行 0 和 1 组成,未知的值用占位符(_)表示。 目标是定义这个二进制谜题的规则,好让测试推断出占位符的值(这一步不需要你来做)。 你的实现必须使用 Prolog 的有限域约束逻辑编程(CLP(FD)),它非常适合这类任务。

Note

为了帮你上手,桩文件已经通过下面这行代码引入了 clpfd 库:

:- use_module(library(clpfd)).
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Prolog Exercism

准备好开始 二进制谜题 了吗?

注册 Exercism,借助 109 个练习 和真人导师指导,学习并掌握 Prolog,全部免费。