轨道
/
F#
F#
/
练习
/
杀手数独助手
杀手数独助手

杀手数独助手

中等

说明

你的一位朋友正在学习如何解杀手数独(规则见下),但总是搞不清一个笼里可以放哪些数字。于是他请你帮个忙,写一个小程序,列出给定笼的所有有效组合,以及影响该笼的所有约束。

为了让程序的输出易于阅读,它返回的组合必须经过排序。

杀手数独规则

  • 标准数独规则适用。
  • 笼通常用虚线标出,其中的数字相加之和等于笼角上给出的小数字。
  • 一个数字在同一个笼中只能出现一次。

更详细的说明,请查看这份指南。

示例 1:只有 1 种可能组合的笼

在一个包含 3 个数字、和为 7 的笼中,只有一种有效组合:124。

  • 1 + 2 + 4 = 7
  • 任何其他能凑成 7 的组合,例如 232,都会违反同一个笼内数字不能重复的规则。

数独网格,其中三个杀手笼被标记为同一组。
第一个杀手笼位于网格左上角的 3×3 宫。
该宫的中间一列构成这个笼,从上到下的单元格依次为:第一个单元格包含一个 1 和一个铅笔标记 7,表示笼的和为 7;第二个单元格包含一个 2;第三个单元格包含一个 5。
这些数字用红色标出,表示有误。
第二个杀手笼位于网格中央的 3×3 宫。
该宫的中间一列构成这个笼,从上到下的单元格依次为:第一个单元格包含一个 1 和一个铅笔标记 7,表示笼的和为 7;第二个单元格包含一个 2;第三个单元格包含一个 4。
这个笼中的数字都没有被标红,因此没有错误。
第三个杀手笼沿着网格中央 3×3 宫的外角。
它由以下三个单元格组成:笼的左上角单元格包含一个 2(被标红),以及笼的和 7。
笼的右上角单元格包含一个 3。
笼的右下角单元格包含一个 2(被标红)。其他所有单元格都是空的。

示例 2:有多种组合的笼

在一个包含 2 个数字、和为 10 的笼中,有 4 种可能的组合:

  • 19
  • 28
  • 37
  • 46

数独网格,除了中间一列(第 5 列)填了 8 行之外,所有方格都是空的。
每相邻的两行构成一个杀手笼,并被标记为同一组。
从上到下:第一组是一个值为 1 的单元格和一个表示笼的和为 10 的铅笔标记,以及一个值为 9 的单元格。
第二组是一个值为 2 的单元格和一个铅笔标记 10,以及一个值为 8 的单元格。
第三组是一个值为 3 的单元格和一个铅笔标记 10,以及一个值为 7 的单元格。
第四组是一个值为 4 的单元格和一个铅笔标记 10,以及一个值为 6 的单元格。
该列最后一个单元格是空的。

示例 3:有多种组合但受到限制的笼

在一个包含 2 个数字、和为 10 的笼中,如果该列已经包含一个 1 和一个 4,则有 2 种可能的组合:

  • 28
  • 37

根据标准数独规则,由于该列中有 1 和 4,19 和 46 都不可能。

数独网格,除了中间一列(第 5 列)填了 8 行之外,所有方格都是空的。
第一行包含一个 4,第二行是空的,第三行包含一个 1。
这个 1 被标红,表示有误。
该列最后 6 行构成 6 个各含两个单元格的杀手笼。
从上到下:第一组是一个值为 2 的单元格和一个表示笼的和为 10 的铅笔标记,以及一个值为 8 的单元格。
第二组是一个值为 3 的单元格和一个铅笔标记 10,以及一个值为 7 的单元格。
第三组是一个值为 1(被标红)的单元格和一个铅笔标记 10,以及一个值为 9 的单元格。

自己试试看

如果你想试试一道上手容易的杀手数独,可以去做做 Clover 出的这道谜题,由 Mark Goodliffe 于 2021 年 6 月 21 日在 Cracking The Cryptic 上推荐。

你也可以在许多报纸,以及各种数独应用、书籍和网站上,找到难度各异的杀手数独。

致谢

上面的截图使用 F-Puzzles.com 生成,这是 Eric Fox 制作的一款谜题设计工具。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
F# Exercism

准备好开始 杀手数独助手 了吗?

注册 Exercism,借助 18 个概念148 个练习 和真人导师指导,学习并掌握 F#,全部免费。