数独文本格式

Sudoku Text Formats

下面展示数独的一些常见文本格式。

Susser 格式

Susser 格式是数独最常见的格式。它采用 81 个字符表示每一个单元格的状态,用小数点或 0 表示空格,1 到 9 表示实际这个单元格的填数。

初盘格式

拿这个题目举例:

一个题目

如图所示。这个题目的 Susser 格式如下:

....8.......5.2.....3...1...5.....2.8...9...66..375..9.15.2.83.....5.......739...

也可将小数点更换为数字 0:

000080000000502000003000100050000020800090006600375009015020830000050000000739000

是等价的。

中间盘面格式

当盘面进行到中间某个局面时,我们会使用额外的字符表达来表述这些情况。比如上面的题目已经到达这里:

中间盘面

此时它填入了一些数字的同时,也有一部分的候选数的删数状态。例如 r8c46 不含 4 和 6,但在未造成任何删数的盘面状态下是含有的,因为唯一余数的状态下,4 和 6 是不能排除到这里的。

换言之,在数独盘面里,如果你只看提示数和填入数的话,那么它能给盘面造成的候选数表则定义为初始状态。而基于此初始状态下还有二次删除的候选数,我们会单独进行记录。因为初始状态的候选数是可以推算出来的,但二次删除的候选数因为删除位置不定,所以不能进行推算。

我们使用 +数字 的形式表示一个单元格填入了一个数而非提示数。例如 +3 表示的是单元格是填入数 3,而非提示数 3。另外,我们使用三个数位一组的形式表达出这些二次删除的候选数。例如 312 表示 3r1c2,即 r1c2(3)

那么按照此规则,这个盘面的文本如下:

....8+3......5.2.....3..+71...5+9....2.8..+29...66+2+1375+4+89+915.2.83+7....5.......739...:882 883 484 684 486 686 188 189

我们使用冒号将盘面和二次删数隔开以作区分。

多行文本格式

有些时候也会将此文本排版为论坛可阅读的格式,所以会使用到多行文本格式。这个格式直接使用一些特殊字符对盘面进行打表处理。

这种格式的名称就叫“多行文本格式”。后续的文本格式还会有若干也使用多行呈现的文本格式,但他们并非属于此文本格式的子集,是另外一套记号。

一个正确的盘面文本如下:

.-------.-------.-------.
| . . . | . 8 . | . . . |
| . . . | 5 . 2 | . . . |
| . . 3 | . . . | 1 . . |
:-------+-------+-------:
| . 5 . | . . . | . 2 . |
| 8 . . | . 9 . | . . 6 |
| 6 . . | 3 7 5 | . . 9 |
:-------+-------+-------:
| . 1 5 | . 2 . | 8 3 . |
| . . . | . 5 . | . . . |
| . . . | 7 3 9 | . . . |
'-------'-------'-------'

该文本格式只需要标注宫的线条即可,而单元格则不需要字符标识出来。

这种文本格式并未严格规定宫线使用的字符集。例如,盘面四个角为了美观会使用小数点 . 表示上方两个边角,撇号 ' 则表示下方两个边角。这样呈现起来会美观一些;另外,宫和宫之间一般用减号 - 和管道符 | 表示分隔,宫线的边角则会使用小数点 .、冒号 : 和加号 + 分隔。

铅笔盘面格式

铅笔盘面格式也叫候选数盘面格式,指的是着重呈现候选数信息的多行文本格式表示。

一个正确的盘面文本如下:

.-----------------------.--------------------.-----------------------.
| 12457   4679    2467  | 1469   <8>   *3*   | 25679   45679   245   |
| 147     46789   4678  | <5>    146   <2>   | 3679    4679    348   |
| 245     4689    <3>   | 469    46    *7*   | <1>     4569    2458  |
:-----------------------+--------------------+-----------------------:
| 347     <5>     *9*   | 1468   146   1468  | 37      <2>     13    |
| <8>     347     47    | *2*    <9>   14    | 357     157     <6>   |
| <6>     *2*     *1*   | <3>    <7>   <5>   | *4*     *8*     <9>   |
:-----------------------+--------------------+-----------------------:
| *9*     <1>     <5>   | 46     <2>   46    | <8>     <3>     *7*   |
| 2347    3467    2467  | 18     <5>   18    | 269     469     24    |
| 24      468     2468  | <7>    <3>   <9>   | 256     1456    1245  |
'-----------------------'--------------------'-----------------------'

它是多行文本格式的推广,需要着重强调候选数状态。

候选数数独格式

另外一种比较类似标准数独的数独类型叫候选数数独(Sukaku),它在初盘就并不会给出任意的提示数,而是以候选数形式呈现每一个单元格的状态。你看到空格里有什么候选数,那就说明它在初盘状态下就只能从这些候选数里选择一个作为正确答案。

这种数独格式因为它和标准数独的描述和技巧几乎一样,所以也会有一些地方有支持和兼容处理。该格式采用 729 个候选数字符表示(81 个空格,每个空格 9 个数位表示是否存在此候选数)。使用小数点 . 或 0 表示这个数位代表的候选数不存在,而用实际数字 1 到 9 表达这个候选数是包含在题目里的。

例如上述题目的候选数数独下,兼容的格式写法是这样的:

12.45.7.....4.67.9.2.4.67..1..4.6..9.......8...3.......2..567.9...4567.9.2.45....1..4..7.....4.6789...4.678.....5....1..4.6....2.........3..67.9...4.67.9..34...8..2.45.......4.6.89..3.........4.6..9...4.6.........7..1...........456..9.2.45..8...34..7......5............91..4.6.8.1..4.6...1..4.6.8...3...7...2.......1.3.............8...34..7.....4..7...2...............91..4.......3.5.7..1...5.7.......6........6....2.......1..........3............7......5.......4............8.........9........91............5.......4.6....2..........4.6..........8...3............7...234..7....34.67...2.4.67..1......8.....5....1......8..2...6..9...4.6..9.2.4......2.4........4.6.8..2.4.6.8.......7....3..............9.2..56...1..456...12.45....

Excel 表格格式

另外一个是兼容 Excel 表格格式的文本。它使用制表符 \t 表示单元格分隔符,也是多行文本格式,但不使用任何的字符绘制格线。

例如上面的题目的 Excel 表格格式如下:

				8				
			5		2			
		3				1		
	5						2	
8				9				6
6			3	7	5			9
	1	5		2		8	3	
				5				
			7	3	9			

OpenSudoku 文本格式

这个是 OpenSudoku 安卓数独应用在本地存储的题库的文本格式。此格式会使用 243 个用管道符 | 分隔的数字表示构成(81 个单元格,每个单元格会使用三个数字表示一个单元格信息)。

其中,0|0|1 固定表示空格,而 数字|0|0 表示的是当前这个单元格的提示数或填入数。这个格式也不会区分提示数和填入数的类型。

例如上面的题目的 OpenSudoku 格式如下:

0|0|1|0|0|1|0|0|1|0|0|1|8|0|0|3|0|0|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|5|0|0|0|0|1|2|0|0|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|3|0|0|0|0|1|0|0|1|7|0|0|1|0|0|0|0|1|0|0|1|0|0|1|5|0|0|9|0|0|0|0|1|0|0|1|0|0|1|0|0|1|2|0|0|0|0|1|8|0|0|0|0|1|0|0|1|2|0|0|9|0|0|0|0|1|0|0|1|0|0|1|6|0|0|6|0|0|2|0|0|1|0|0|3|0|0|7|0|0|5|0|0|4|0|0|8|0|0|9|0|0|9|0|0|1|0|0|5|0|0|0|0|1|2|0|0|0|0|1|8|0|0|3|0|0|7|0|0|0|0|1|0|0|1|0|0|1|0|0|1|5|0|0|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|0|0|1|7|0|0|3|0|0|9|0|0|0|0|1|0|0|1|0|0|1

HoDoKu 文本格式

HoDoKu 文本格式是 HoDoKu 电脑数独分析软件采用的一种格式。这个格式较为复杂。它将一个题目的文本分为 7 个表述部分,并用冒号 : 分隔:

:技巧编号:涉及数字序列:Susser盘面:二次删数:删数结论:出数结论:额外信息

例如上述盘面,因为它跟技巧无关,只是单纯呈现盘面状态,所以缺省的部分会使用默认数值填充。其默认数值如下:

部分
可否缺省
缺省值

技巧编号

0000

涉及数字序列

x

Susser 盘面

二次删数

空字符串

删数结论

空字符串

出数结论

空字符串

额外信息

空字符串

它的文本格式如下:

:0000:x:....8+3......5.2.....3..+71...5+9....2.8..+29...66+2+1375+4+89+915.2.83+7....5.......739...:882 883 484 684 486 686 188 189:::

几乎和 Susser 格式的内容一致。

如果需要呈现其技巧信息,则需要代入其技巧的编号信息。该编号需要查表得到。具体表格请参考 HoDoKu 技巧编号一览表 页面提供的编号表。

例如,这个盘面下可以使用唯一矩形类型 4,所以它的完整表述如下:

:0603:18:....8+3......5.2.....3..+71...5+9....2.8..+29...66+2+1375+4+89+915.2.83+7....5.......739...:882 883 484 684 486 686 188 189:144 146::

其中,0603 是唯一矩形类型 4 的编号,而 144 146 代表的是删数结论删除 r4c46(1) 两处候选数。

总结

下面总结一下前面文本格式的一些信息。

格式名称
是否呈现初盘
是否呈现中间盘面
是否区分提示数和填入数
是否呈现二次删数

Susser 格式

多行文本格式

铅笔盘面格式

候选数数独格式

Excel 表格格式

OpenSudoku 文本格式

HoDoKu 文本格式

正则表达式

下面列举一下前面可能会用到的、用于匹配的正则表达式,方便你开发解析文本时候使用。

Susser 格式
[\d\.\+]{80,}(?:\:(\d{3}\s+)*\d{3})?

二次删数部分、HoDoKu 删数出数结论部分
(?<=\:)(?:\d{3}\s+)*\d{3}

候选数数独单元格候选数集合部分
\d*[\-\+]?\d+

OpenSudoku 格式
\d(?:\|\d){242}

铅笔盘面单个单元格
\<\d\>|\*\d\*|\d*[\+\-]?\d+

单一数字
[1-9\+\-]{1,9}

多行文本格式
(?:[\d\.\+]{9}(?:\r|\n|\r\n)){8}[\d\.\+]{9}

最后更新于