Sudoku
约 798 字大约 3 分钟
2026-02-11
题目
Write a type that verifies Sudoku game is solved. This is based off a challenge from Advent of Typescript 2023 by TypeHero (Day 22). So kudos for them for thinking up such a neat challenge!
解题思路
待补充
答案
type Digits = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
type SudokuSolved = any验证
import type { Equal, Expect } from '@type-challenges/utils'
type test_sudoku_1_actual = SudokuSolved<[
[[1, 2, 3], [5, 6, 7], [4, 8, 9]],
[[4, 8, 9], [1, 2, 3], [5, 6, 7]],
[[5, 6, 7], [4, 8, 9], [1, 2, 3]],
[[3, 1, 2], [8, 5, 6], [9, 7, 4]],
[[7, 9, 4], [3, 1, 2], [8, 5, 6]],
[[8, 5, 6], [7, 9, 4], [3, 1, 2]],
[[2, 3, 1], [6, 4, 5], [7, 9, 8]],
[[9, 7, 8], [2, 3, 1], [6, 4, 5]],
[[6, 4, 5], [9, 7, 8], [2, 3, 1]],
]>
type test_sudoku_2_actual = SudokuSolved<[
[[7, 1, 5], [4, 3, 8], [6, 9, 2]],
[[4, 8, 6], [9, 2, 5], [7, 1, 3]],
[[9, 3, 2], [1, 6, 7], [4, 8, 5]],
[[6, 5, 7], [2, 8, 9], [1, 3, 4]],
[[3, 2, 8], [7, 4, 1], [9, 5, 6]],
[[1, 4, 9], [3, 5, 6], [8, 2, 7]],
[[5, 9, 1], [6, 7, 3], [2, 4, 8]],
[[2, 6, 3], [8, 9, 4], [5, 7, 1]],
[[8, 7, 4], [5, 1, 2], [3, 6, 9]],
]>
type test_sudoku_3_actual = SudokuSolved<[
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[4, 8, 1], [6, 2, 9], [5, 7, 3]],
[[5, 7, 6], [8, 4, 3], [2, 9, 1]],
[[7, 2, 9], [3, 1, 8], [4, 5, 6]],
[[6, 5, 8], [2, 7, 4], [3, 1, 9]],
[[1, 4, 3], [5, 9, 6], [7, 2, 8]],
[[2, 1, 4], [9, 3, 5], [6, 8, 7]],
[[9, 6, 5], [4, 8, 7], [1, 3, 2]],
[[8, 3, 7], [1, 6, 2], [9, 4, 5]],
]>
type test_sudoku_4_actual = SudokuSolved<[
[[1, 2, 3], [5, 6, 7], [4, 8, 9]],
[[4, 8, 9], [1, 2, 3], [5, 6, 7]],
[[5, 6, 7], [4, 8, 9], [1, 2, 3]],
[[3, 1, 2], [8, 5, 6], [9, 7, 4]],
[[7, 9, 4], [3, 1, 2], [8, 5, 6]],
[[8, 5, 6], [7, 9, 4], [3, 1, 2]],
[[2, 3, 1], [6, 4, 5], [8, 9, 4]],
[[9, 7, 8], [2, 3, 1], [6, 4, 5]],
[[6, 4, 5], [9, 7, 8], [2, 3, 1]],
]>
type test_sudoku_5_actual = SudokuSolved<[
[[7, 1, 5], [4, 3, 8], [6, 9, 2]],
[[4, 8, 6], [9, 2, 5], [7, 1, 3]],
[[9, 3, 2], [1, 6, 7], [4, 8, 5]],
[[6, 5, 7], [2, 8, 9], [1, 3, 4]],
[[3, 2, 8], [7, 4, 1], [9, 5, 6]],
[[1, 4, 9], [3, 5, 6], [8, 2, 7]],
[[5, 9, 1], [6, 2, 3], [2, 4, 8]],
[[2, 6, 3], [8, 9, 4], [5, 7, 1]],
[[8, 7, 4], [5, 1, 2], [3, 6, 9]],
]>
type test_sudoku_6_actual = SudokuSolved<[
[[8, 9, 7], [3, 6, 1], [1, 4, 5]],
[[6, 3, 4], [1, 4, 9], [2, 8, 7]],
[[1, 2, 4], [5, 8, 7], [9, 6, 3]],
[[3, 8, 9], [6, 2, 1], [5, 7, 4]],
[[4, 7, 2], [8, 9, 5], [6, 3, 1]],
[[5, 1, 6], [4, 7, 3], [8, 2, 9]],
[[7, 5, 1], [2, 3, 8], [4, 9, 6]],
[[9, 6, 8], [7, 5, 4], [3, 1, 2]],
[[2, 4, 3], [9, 1, 6], [7, 5, 8]],
]>
type test_sudoku_7_actual = SudokuSolved<[
[[1, 2, 3], [5, 6, 7], [4, 8, 9]],
[[2, 3, 5], [6, 7, 4], [8, 9, 1]],
[[3, 5, 6], [7, 4, 8], [9, 1, 2]],
[[5, 6, 7], [4, 8, 9], [1, 2, 3]],
[[6, 7, 4], [8, 9, 1], [2, 3, 5]],
[[7, 4, 8], [9, 1, 2], [3, 5, 6]],
[[4, 8, 9], [1, 2, 3], [5, 6, 7]],
[[8, 9, 1], [2, 3, 5], [6, 7, 4]],
[[9, 1, 2], [3, 5, 6], [7, 4, 8]],
]>
type test_sudoku_8_actual = SudokuSolved<[
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
[[3, 9, 2], [7, 5, 1], [8, 6, 4]],
]>
type cases = [
Expect<Equal<test_sudoku_1_actual, true>>,
Expect<Equal<test_sudoku_2_actual, true>>,
Expect<Equal<test_sudoku_3_actual, true>>,
Expect<Equal<test_sudoku_4_actual, false>>,
Expect<Equal<test_sudoku_5_actual, false>>,
Expect<Equal<test_sudoku_6_actual, false>>,
Expect<Equal<test_sudoku_7_actual, false>>,
Expect<Equal<test_sudoku_8_actual, false>>,
]参考
无
