# @algorithm\.ts/sudoku 中文文档

规范地址：https://npmcn.com/package/%40algorithm.ts/sudoku/

版本：4\.0\.4
npm 元数据更新时间：2026-03-23T11:39:33.380Z
中文译文更新时间：2026-11-05T22:22:02.162Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40algorithm.ts/sudoku
原文对照：https://npmcn.com/package/%40algorithm.ts/sudoku/?lang=original
项目主页：https://github.com/guanghechen/algorithm.ts/tree/@algorithm.ts/sudoku@4.0.3/packages/sudoku#readme
源码仓库：https://github.com/guanghechen/algorithm.ts#@algorithm.ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：61.5 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2021-07-26T08:18:34.762Z
- 最新版本发布：2026-03-23T11:39:33.250Z
- 近 30 天下载量：12748（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：60（近 12 个月 1 个）

## 中文简介

高效的数独解析器和创建器.

## 安装

```sh
npm install @algorithm.ts/sudoku
```

也可以使用：`pnpm add @algorithm.ts/sudoku`、`yarn add @algorithm.ts/sudoku`、`bun add @algorithm.ts/sudoku`

## README

# [@algoritm.ts/sudoku (英语)](https://github.com/guanghechen/algorithm.ts/tree/@algorithm.ts/sudoku@4.0.3/packages/sudoku#readme)

 [![Npm Version](https://img.shields.io/npm/v/@algorithm.ts/sudoku.svg)](https://www.npmjs.com/package/@algorithm.ts/sudoku)[![Npm Download](https://img.shields.io/npm/dm/@algorithm.ts/sudoku.svg) ](https://www.npmjs.com/package/@algorithm.ts/sudoku)[![Npm License](https://img.shields.io/npm/l/@algorithm.ts/sudoku.svg) ](https://www.npmjs.com/package/@algorithm.ts/sudoku)[![Module Formats: cjs, esm](https://img.shields.io/badge/module_formats-cjs%2C%20esm-green.svg) ](https://npmcn.com/package/%40algorithm.ts/sudoku/#readme-install)[![Node.js Version](https://img.shields.io/node/v/@algorithm.ts/sudoku) ](https://github.com/nodejs/node)[![Tested with Jest](https://img.shields.io/badge/tested_with-vitest-6E9F18.svg) ](https://github.com/vitest-dev/vitest)[![Code Style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)

  

[中文文档](https://npmcn.com/package/%40algorithm.ts/sudoku/README-zh.md)

这个库用于解决数独问题并用独特的解决方案生成数独问题.

数独问题被描述为大小(a\*a) \*(a\*a)的平方矩阵,以及a的值 平方矩阵中的位置是 \[-1, a\*a\] 之间的整数. 其中, -1 表示没有值是 已经填满了这个职位 一个典型的"数独"问题需要满足以下的制约:

1.  平方矩阵中的每个位置需要用 \[0, a\*a\] 之间的整数填充
2.  平方矩阵的每行没有重复的数字
3.  平方矩阵的每列没有重复的数字
4.  平方矩阵可分为:_大小的子平方_a,没有重复 下方各栏中的数字 **苏多库** 算法.

sudoku是一个shuffle算法,它可以在$O(N)美元时间复杂度的基础上完成shuffle 仅使用常数的额外空间.

如果你对这个算法好奇,你可以访问\[这里\]\[sudoku\]了解更多细节.

## 安装

-   无
    
    ```bash
    npm install --save @algorithm.ts/sudoku
    ```
    
-   小时
    
    ```bash
    pnpm add @algorithm.ts/sudoku
    ```
    

## 使用量

-   `SudokuSolver`:解决一个数独谜题.
    
-   `SudokuCreator`: 创建一个只有独特解决方案的数独数据(谜题和解决方案).
    
-   工具函数
    
    | 函数 | 说明 |
    | :-: | :-: |
    | `createSudokuBoardData` | 创建 sudoku 板( 一维阵列) . |
    | `fillSudokuBoardData` | 用给定的值填充sudoku板. |
    | `copySudokuBoardData` | 从 `src` 改为 `dst`。 。 。 . |
    | `verifySolution` | 检查给定的数独游戏的解决方案是否有效 . |
    | `toMatrixStyleBoardData` | 将一维阵列转换为二维阵列. |
    | `createMatrixCodeMap` |  |
    | `createMatrixCoordinateMap` |  |
    

## 实例

### 解开谜题

-   解决一个 16x16 sudoku 谜题
    
    ```typescript
    import type { ISudokuBoardData } from '@algorithm.ts/sudoku'
    import { SudokuSolver, createSudokuBoardData } from '@algorithm.ts/sudoku'
    
    // 4 x 4 = 16
    const solver = new SudokuSolver({ childMatrixSize: 4 })
    
    const puzzle: ISudokuBoardData =  [
       2,  3, 14, -1,  8,  6, -1, -1, -1, 13, -1, -1, -1, 10, 12, -1,
       0, -1, -1, -1, -1, -1,  1,  9, -1, -1,  4, -1,  8, -1, -1,  2,
      -1, -1, -1,  6,  7, -1,  2, -1, -1, -1, 10,  1, -1,  0, -1, 15,
      -1,  8, -1, -1, -1, -1, 12, -1, -1,  5,  0,  7,  4, -1,  1,  6,
       7,  1, -1,  3, -1,  4, 10, 14, -1, -1, -1, -1,  2, -1, 15,  9,
      14, 12, -1, -1,  2,  3, -1, -1,  1, -1,  7, -1, -1,  6, 13, -1,
      10,  2,  5, -1, -1,  0,  7, -1,  3, -1, -1,  8, 11,  1, -1,  4,
      -1, 13,  6, -1, -1, -1, -1,  1, -1, -1, 14,  2, -1,  3,  7, -1,
      -1, -1, -1,  2,  1, -1, -1, -1, -1, -1,  8,  9, 14,  7, -1, -1,
       8,  9, 10, -1,  3, -1, -1,  2,  6, -1, 11, -1, -1, -1,  5,  0,
       1, -1,  3,  5, -1, -1, -1, -1,  4,  0, -1, -1, -1, 11, -1, 12,
       6, -1, -1,  4,  5, -1, 15, 11, 14, -1,  1, -1, 13,  9,  8, -1,
      -1,  6, -1, -1, -1,  2, -1, 12, -1, -1, -1, 14,  9, -1,  0, 13,
      -1, -1,  0,  7, -1,  9, 13,  8, -1, -1,  3, -1, -1,  2,  6, 14,
      -1, -1, -1,  8, -1, 11, -1, -1, -1, 12, -1, -1, 15,  5,  3,  1,
       3, -1, -1, -1, -1, -1, -1, -1,  9, 15,  2,  0, -1,  8, -1, 11
    ]
    
    solver.solve(puzzle, null)  // => true
    
    const solution: ISudokuBoardData = createSudokuBoardData(16)
    solver.solve(puzzle, solution)  // => true
    
    solution
    /** ===>
     * [
     *    2,  3, 14,  1,  8,  6,  0,  4, 11, 13,  9, 15,  5, 10, 12,  7,
     *    0,  5,  7, 10, 14, 15,  1,  9, 12,  3,  4,  6,  8, 13, 11,  2,
     *   12, 11,  4,  6,  7,  5,  2, 13,  8, 14, 10,  1,  3,  0,  9, 15,
     *   15,  8,  9, 13, 11, 10, 12,  3,  2,  5,  0,  7,  4, 14,  1,  6,
     *    7,  1,  8,  3,  6,  4, 10, 14,  0, 11, 13,  5,  2, 12, 15,  9,
     *   14, 12, 15, 11,  2,  3,  9,  5,  1,  4,  7, 10,  0,  6, 13,  8,
     *   10,  2,  5,  9, 13,  0,  7, 15,  3,  6, 12,  8, 11,  1, 14,  4,
     *    4, 13,  6,  0, 12,  8, 11,  1, 15,  9, 14,  2, 10,  3,  7,  5,
     *   13, 15, 11,  2,  1, 12,  6,  0,  5, 10,  8,  9, 14,  7,  4,  3,
     *    8,  9, 10, 14,  3, 13,  4,  2,  6,  7, 11, 12,  1, 15,  5,  0,
     *    1,  7,  3,  5,  9, 14,  8, 10,  4,  0, 15, 13,  6, 11,  2, 12,
     *    6,  0, 12,  4,  5,  7, 15, 11, 14,  2,  1,  3, 13,  9,  8, 10,
     *   11,  6,  1, 15, 10,  2,  3, 12,  7,  8,  5, 14,  9,  4,  0, 13,
     *    5,  4,  0,  7, 15,  9, 13,  8, 10,  1,  3, 11, 12,  2,  6, 14,
     *    9, 10,  2,  8,  0, 11, 14,  7, 13, 12,  6,  4, 15,  5,  3,  1,
     *    3, 14, 13, 12,  4,  1,  5,  6,  9, 15,  2,  0,  7,  8, 10, 11
     * ]
     */
    ```
    

### 创建 sudoku 游戏数据

-   创建一个 9x9 语句谜题
    
    ```typescript
    import { SudokuCreator } from '@algorithm.ts/sudoku'
    
    // 3 x 3 = 9
    const creator = new SudokuCreator({ childMatrixSize: 3 })
    ```
    
    -   创建一个简单的谜题 .
        
        ```typescript
        creator.createSudoku()
        // or
        creator.createSudoku(0.2)
        ```
        
        结果是一个 js 对象,类似于下面显示的对象 :
        
        ```json
        {
          "puzzle": [
             8, -1, 6,  1,  0,  2,  3,  5, -1,
             0, -1, 5, -1,  4, -1,  8,  1,  7,
             4,  3, 1,  8, -1, -1,  2,  6,  0,
            -1,  0, 7,  4, -1,  1,  5,  8,  2,
             2,  1, 4,  5,  3, -1, -1,  7,  6,
             5,  6, 8,  0,  2,  7,  4,  3,  1,
             1,  4, 3,  2, -1,  6,  7,  0,  8,
             6,  5, 0,  7,  8,  4,  1,  2,  3,
            -1, -1, 2,  3, -1, -1,  6,  4,  5
          ],
          "solution": [
            8, 7, 6, 1, 0, 2, 3, 5, 4,
            0, 2, 5, 6, 4, 3, 8, 1, 7,
            4, 3, 1, 8, 7, 5, 2, 6, 0,
            3, 0, 7, 4, 6, 1, 5, 8, 2,
            2, 1, 4, 5, 3, 8, 0, 7, 6,
            5, 6, 8, 0, 2, 7, 4, 3, 1,
            1, 4, 3, 2, 5, 6, 7, 0, 8,
            6, 5, 0, 7, 8, 4, 1, 2, 3,
            7, 8, 2, 3, 1, 0, 6, 4, 5
          ]
        }
        ```
        
    -   创建困难的谜题 .
        
        ```typescript
        creator.createSudoku(1.0)
        ```
        
        结果是一个 js 对象,类似于下面显示的对象 :
        
        ```json
        {
          "puzzle": [
            -1, -1, -1, -1, -1,  8, -1, -1,  4,
            -1, -1, -1,  3, -1, -1,  5,  8, -1,
            -1, -1, -1,  6,  4, -1,  0, -1, -1,
            -1, -1, -1, -1,  2, -1,  6, -1, -1,
            -1,  0, -1, -1, -1, -1,  7,  3,  5,
            -1,  7, -1, -1,  3, -1, -1, -1, -1,
             3, -1, -1, -1, -1,  2, -1, -1,  0,
            -1, -1, -1,  8,  6,  5, -1, -1, -1,
             2, -1,  4, -1, -1, -1, -1, -1, -1
          ],
          "solution": [
            0, 6, 1, 2, 5, 8, 3, 7, 4,
            4, 2, 7, 3, 0, 1, 5, 8, 6,
            8, 3, 5, 6, 4, 7, 0, 2, 1,
            5, 4, 3, 7, 2, 0, 6, 1, 8,
            6, 0, 2, 1, 8, 4, 7, 3, 5,
            1, 7, 8, 5, 3, 6, 4, 0, 2,
            3, 8, 6, 4, 7, 2, 1, 5, 0,
            7, 1, 0, 8, 6, 5, 2, 4, 3,
            2, 5, 4, 0, 1, 3, 8, 6, 7
          ]
        }
        ```
        
-   创建一个 16x16 sudoku 谜题
    
    ```typescript
    import { SudokuCreator } from '@algorithm.ts/sudoku'
    
    // 4 x 4 = 16
    const creator = new SudokuCreator({ childMatrixSize: 4 })
    creator.createSudoku(0.8)
    ```
    
    结果是一个 js 对象,类似于下面显示的对象 :
    
    ```json
    {
      "puzzle": [
        -1, -1, -1, 12, -1,  5, -1,  9, -1, -1,  6, -1, -1,  1, -1, 14,
        -1,  2,  4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, -1,
        -1, -1,  8, -1, 12, 13,  4,  7,  2, -1, -1, -1, -1, -1, -1, -1,
         7, -1, -1, -1, -1, -1, -1, 14, -1, -1, -1, 12, -1, -1, -1, -1,
         4, -1, 15, -1,  6, -1, -1, -1, -1, -1, 11, -1,  3, -1, -1, -1,
        -1,  8, 10, 14, -1, -1, -1, -1,  5, 13, -1, -1, -1,  9, -1, -1,
        -1, -1,  6, 11,  3, 14, -1, -1,  0,  2, -1,  4, -1, -1, -1, 15,
        -1,  5, 13, -1, -1,  7, -1, -1,  9, -1, -1,  3,  2, -1, 10, -1,
        -1, -1, -1, -1, -1, -1, 14, -1,  6,  9, -1, -1, 10,  8, -1, -1,
        -1, -1, 14,  0,  7,  3, -1,  2, -1, 10, -1, -1, 15, 13, -1,  9,
        -1,  9,  7, -1, -1, -1, -1, 12, -1, 15, -1,  1, -1, -1,  0, -1,
        11, -1,  3, -1, -1,  0, -1, 15, 14,  5, -1, -1, -1,  2, 12,  6,
        -1, -1,  0, 13, -1, -1, -1,  5, -1, 11,  9, -1,  4, -1,  6,  3,
        -1, -1,  2, -1, -1, -1, 10, -1, 15,  6, -1, -1, 14, -1, -1, -1,
        -1, -1, -1, -1, 15, 12, -1, -1, -1,  4,  7, -1, -1, -1,  9, -1,
         6, -1, -1, -1, -1, -1,  8, -1, -1, -1,  5, -1, -1,  0, -1, -1
      ],
      "solution": [
        10,  3, 11, 12,  8,  5,  2,  9,  4,  7,  6, 15,  0,  1, 13, 14,
        13,  2,  4,  9,  1,  6,  3,  0, 11,  8, 14,  5, 12,  7, 15, 10,
         0, 14,  8, 15, 12, 13,  4,  7,  2,  1, 10,  9,  6,  3, 11,  5,
         7,  6,  1,  5, 11, 10, 15, 14, 13,  0,  3, 12,  9,  4,  8,  2,
         4,  0, 15,  2,  6,  9,  1, 13,  7, 12, 11, 10,  3,  5, 14,  8,
         3,  8, 10, 14,  2, 15, 12,  4,  5, 13,  1,  6, 11,  9,  7,  0,
         9,  7,  6, 11,  3, 14,  5, 10,  0,  2,  8,  4, 13, 12,  1, 15,
        12,  5, 13,  1,  0,  7, 11,  8,  9, 14, 15,  3,  2,  6, 10,  4,
        15, 13, 12,  4,  5, 11, 14,  1,  6,  9,  2,  0, 10,  8,  3,  7,
         5,  1, 14,  0,  7,  3,  6,  2,  8, 10, 12, 11, 15, 13,  4,  9,
         2,  9,  7,  6, 10,  8, 13, 12,  3, 15,  4,  1,  5, 14,  0, 11,
        11, 10,  3,  8,  4,  0,  9, 15, 14,  5, 13,  7,  1,  2, 12,  6,
         1, 12,  0, 13, 14,  2,  7,  5, 10, 11,  9,  8,  4, 15,  6,  3,
         8,  4,  2,  7,  9,  1, 10,  3, 15,  6,  0, 13, 14, 11,  5, 12,
        14, 11,  5,  3, 15, 12,  0,  6,  1,  4,  7,  2,  8, 10,  9, 13,
         6, 15,  9, 10, 13,  4,  8, 11, 12,  3,  5, 14,  7,  0,  2,  1
      ]
    }
    ```
    

## 相关

-   [{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢](https://me.guanghechen.com/post/algorithm/shuffle/#heading-dlx)
-   [{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你这混蛋](https://me.guanghechen.com/post/algorithm/shuffle/#heading-knuth-shuffle)
-   [{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢](https://me.guanghechen.com/post/game/sudoku/)

## 常见问题

### @algorithm\.ts/sudoku 是什么？

高效的数独解析器和创建器\.

### 如何安装 @algorithm\.ts/sudoku？

在项目目录运行 npm install @algorithm\.ts/sudoku，或使用 pnpm add / yarn add / bun add。

### @algorithm\.ts/sudoku 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @algorithm\.ts/sudoku 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @algorithm\.ts/sudoku 可以商用吗？

@algorithm\.ts/sudoku 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @algorithm\.ts/sudoku 的下载量有多少？

根据 npm 官方下载统计，@algorithm\.ts/sudoku 在 2026/10/06 – 2026/11/04 这 30 天内被下载 12,748 次，日均约 425 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @algorithm\.ts/sudoku 还在维护吗？

最新版本 4\.0\.4 发布于 2026/03/23（7 个月前）；至今共发布 60 个版本，其中过去 12 个月发布了 1 个；首次发布于 2021/07/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

