# 剩余数的概念

在前面讲过的两种技巧[排除](/direct-technique/01-crosshatching.md)和[唯一余数](/direct-technique/02-naked-single.md)里，我们用到了排除项得到结论的推理套路。为了更方便描述一些后续的东西，我想安排一个额外的文章篇目给各位介绍一下**剩余数**（Lasting，简称**余数**）的概念。

> 本文主要是为了讲解题目的难度衡量，所以不讲技巧。它说起来也确实有些晦涩，如果你不想看也可以跳过它。不过，它对你认知题目的难度，以及一些额外定义上来说会有帮助。

## 剩余数的定义 <a href="#definition-of-lasting" id="definition-of-lasting"></a>

在**直观技巧**（Direct Technique）的范畴里，剩余数指的是填入目标结论（某个格子填某个数字）之前，在目标**区域**（House 或 Region）下剩余的空格数量。

先来解释一下这两个概念：

* 直观技巧：指的是排除、唯一余数这种直接可以得到填数结论的技巧类型。数独技巧里，狭义上只有这两种技巧是直观技巧，而其他的都是非直观技巧；
* 区域：行、列、宫的统称。就和行列排除一样，当你不需要非得强调行还是列还是宫的时候，直接用区域一词来表示就行。

既然说明白了这两个概念，那么剩余数的概念就很清晰了。我们来看一个例子。

<figure><img src="/files/xIvlT8WHHzW7OJh8dPyx" alt="" width="375"><figcaption><p>行排除，行余 2</p></figcaption></figure>

这个例子里，我们可得到行排除结论是填入 6 在 `r9`。目标区域就是 `r9`，而里面只有两个空格，因此 `r9` 剩余数为 2，或者直接简单叫它**行余二**。这个说法是不是听起来蛮“古色古香”的？

我们再来看一个例子。

<figure><img src="/files/IIaALW3hKD63y7WOcRbu" alt="" width="375"><figcaption><p>列排除，列余 3</p></figcaption></figure>

这个的结论在 `c9`，空格数量为 3，所以称为**列余三**。

排除很好定义余数的概念，但是唯一余数似乎不太容易。对于唯一余数而言，我们选取的是，按照前面介绍的观察方式（选取空格剩余少的区域，在数出剩余的可选项后，再在外面找可排除的项），对那个排除项更多、空格数量更少的区域作为目标区域。

<figure><img src="/files/2ZfvB4pBTmjSqvLbEtUg" alt="" width="375"><figcaption><p>唯一余数，宫余 3</p></figcaption></figure>

比如这个例子里，目标单元格（结论单元格，即 `r9c7`）所在的行上有 3 个空格，列上有 7 个空格，宫内有 3 个空格。而因为宫的观察方式优于行和列，因此我们把这个唯一余数定义为**宫余三**。

总而言之，直观技巧的剩余数定义规则如下：

* 排除
  * 宫排除：直接看目标的宫剩下几个空格，就叫**宫余几**；
  * 行排除：直接看目标的行剩下几个空格，就叫**行余几**；
  * 列排除：直接看目标的列剩下几个空格，就叫**列余几**。
* 唯一余数
  * 按区域分类，确定目标单元格所在的这个区域剩下多少空格，找出最少的那一个区域，并取名**什么区域余几**；
  * 如果行列宫里至少有两种区域剩余的空格数量一致，就按宫、行、列的先后优先级次序取名。如既可以叫宫余几和列余几的，规定先宫后列的方式，叫宫余几。

## 只依赖单一剩余数的技巧 <a href="#unique-lasting" id="unique-lasting"></a>

为了让我们使用技巧的列表更加饱满，剩余数只有 1 的两种技巧还有单独的名字，我打算放这里说。

### 单元唯一（Full House） <a href="#full-house" id="full-house"></a>

**单元唯一**（Full House），有时候也直接用它的英文名 Full House，指的是某个行、列、宫里仅剩下唯一一个空格的技巧。是的，它其实就是剩余数为 1 的特殊情况。

我们来看一个例子。

<figure><img src="/files/zH22MdoplbQikZ62guV6" alt="" width="375"><figcaption><p>单元唯一</p></figcaption></figure>

显然，在 `b8` 里，只有 8 没有填。直接填入 `r8c5 = 8` 便是这个技巧的结论。

### 数字唯一（Last Digit） <a href="#last-digit" id="last-digit"></a>

和单元唯一的用法相反，**数字唯一**（Last Digit）是同一个数字，在全盘里只剩唯一一处没填的特殊技巧用法。

<figure><img src="/files/Kghpo74CCC8majmgraUp" alt="" width="375"><figcaption><p>数字唯一</p></figcaption></figure>

比如这个题里，7 全盘只有一个没填了。赶紧填进去，就是这个技巧的结论。

可以看到，数字唯一其实就是特殊情况下的宫排除。不论宫内空格剩几个（余数是多少），难度始终是一致的：因为直接看哪些宫没有这个数就行了。一旦只有一个宫没有填这个数了之后，那么这个数必然可以在这一步里得到。

至此，直观技巧就介绍完毕了。下面我们需要进入到区块和数组的学习之中。

## 题目难度挡位的划分 <a href="#difficulty-rating" id="difficulty-rating"></a>

剩余数不可能仅仅以定义形式存在，不然光有个定义发挥不出作用，定义它干嘛。剩余数的定义，本质是为了衡量一个题目的难度。为了让玩家可以更轻松地知道题目循序渐进的过程，剩余数的定义和观察难度耦合。换言之，一个题目的难易程度更多体现在玩家是否找得到这些技巧，而不是题本身推理的难度大不大。这才俩技巧，能有多难的思维。

可以从前面列表的定义里了解到，它其实跟观察难度有不可拆分的关系。尤其是唯一余数，确定行列宫具体是哪一个区域类型，甚至用上了宫观察更容易这一点。这便是我想说的。

如果一个题只有宫排除的话，那么这个题就算宫内空格剩余足够多，那么它都不一定非常难；但是一旦牵扯到行列排除和唯一余数后，这个题目的难度有一些难以捉摸了。首先，技巧的推理的不同导致技巧本身就具有难度差异；其次，余数的多少也会影响到题目的难度。

以我个人的意见，我更倾向于这么安排一个题目的难度：

1. 如果一个题只有宫排除难度（不超过宫排除的技巧就可以完成题目），那么只分两种情况：
   1. 如果宫排除只会用到外围 1 到 2 个排除项就可以得到目标结论，则它是第一挡位（最简单）的难度；
   2. 如果宫排除用到外围 3 个或 4 个排除项才能得到结论，则它是第二挡位（稍微难一点）的难度。
2. 如果一个题需要用到行列排除和唯一余数，则统统都归为第三挡位。还要细分的话，就按下面这样的规则细分：
   1. 按照余数数量从少到多的次序去题目里找目标结论；
   2. 如果做到某个位置下，同时存在多个余数一致，但技巧不一致的情况，则按技巧的推理难度，先用行排除，然后用列排除，最后才是唯一余数的次序去使用他们。

按照前面描述的逻辑，每一步稳扎稳打地记录下每一步用到的技巧，最后列出它们。整个技巧列表里，找出难度最大的那个，就是这个题的难度。

我举个例子。

<figure><img src="/files/ZjrNHbrTdF0HvSuIamMM" alt="" width="375"><figcaption><p>一个例子</p></figcaption></figure>

这个题要完成它，会用到除了宫排除外的直观技巧。按余数排列出来，会用到这些：

* 宫排除；
* 行排除：行余二、行余四；
* 列排除：列余二；
* 唯一余数：行余三。

显然，余四的行排除空格数量要求最多，所以我们把这个余四的行排除作为这个题目的最大难度的技巧使用步骤。我们也可称它为**卡（kǎ）点**（Bottleneck）。它在这个题的这个位置：

<figure><img src="/files/I1D4FzkARB7vDjpJZYkZ" alt="" width="375"><figcaption><p>行排除，行余 4</p></figcaption></figure>

如图所示。这是这个题目的卡点。

可以从这个卡点规则了解到，这个题目的难度严格按照余数来规定；而一个题的卡点也不一定非得只有一个。如果一个题同时用到两次最高难度的技巧（余数最大，技巧难度最高），则它们都可以算作卡点。

卡点的多少，从另外一个角度也衡量了题目的难度。就好像你做两个题，10 个卡点的题和 1 个卡点的题，都是一样的最高难度技巧，那显然 10 个卡点的那个题做起来会更难一些。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sudoku.kazusa.tech/direct-technique/03-strategying-phase-1/02-concept-of-lasting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
