Skip to content

Commit bdc4ef5

Browse files
committed
Update index.ts
1 parent 54f2702 commit bdc4ef5

File tree

1 file changed

+1
-202
lines changed

1 file changed

+1
-202
lines changed

sudoku-solver/index.ts

Lines changed: 1 addition & 202 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
function solveSudoku(board: string[][]): void {
2-
// const spaces: [number, number][] = [];
3-
const spaces: number[] = []; //new Set<number>();
2+
const spaces: number[] = [];
43
const rows = new Array(9).fill(0).map(() => number_char_set(false));
54
const columns = new Array(9).fill(0).map(() => number_char_set(false));
65
const subboxes = new Array(3)
@@ -10,12 +9,7 @@ function solveSudoku(board: string[][]): void {
109
for (let j = 0; j < 9; j++) {
1110
const char = board[i][j];
1211
if (char === ".") {
13-
// if (Math.random() - 0.5 > 0) {
1412
spaces.push(pair_to_index(i, j));
15-
// spaces.add(pair_to_index(i, j));
16-
// } else {
17-
// spaces.unshift([i, j]);
18-
// }
1913
} else {
2014
rows[i][char] = true;
2115
columns[j][char] = true;
@@ -27,64 +21,7 @@ function solveSudoku(board: string[][]): void {
2721
return;
2822
}
2923

30-
// const space_to_charscount: Map<number, number> = new Map();
31-
// while (true) {
32-
// let stop = true;
33-
// spaces = spaces.filter((index) => {
34-
// const [row, column] = index_to_pair(index);
35-
// const chars = get_available_chars(
36-
// row,
37-
// column,
38-
// rows,
39-
// columns,
40-
// subboxes
41-
// );
42-
// if (chars.length === 1) {
43-
// const char = chars[0];
44-
// board[row][column] = chars[0];
45-
// rows[row][char] = true;
46-
// columns[column][char] = true;
47-
// subboxes[Math.floor(row / 3)][Math.floor(column / 3)][char] =
48-
// true;
49-
// stop = false;
50-
// space_to_charscount.delete(index);
51-
// return false;
52-
// }
53-
// space_to_charscount.set(index, chars.length);
54-
// return true;
55-
// });
56-
// if (stop) break;
57-
// }
58-
// if (spaces.length === 0) {
59-
// return;
60-
// }
61-
// //排序可选数最少的空格
62-
// spaces.sort(
63-
// (a, b) =>
64-
// (space_to_charscount.get(a) ?? 0) -
65-
// (space_to_charscount.get(b) ?? 0)
66-
// );
67-
// const sorted: [number, number, Array<string>][] = spaces
68-
// .map(
69-
// ([row, column]) =>
70-
// [row, column, get_available_chars(row, column)] as [
71-
// number,
72-
// number,
73-
// Array<string>
74-
// ]
75-
// )
76-
// .sort((a, b) => -a[2].length + b[2].length);
77-
// spaces.length = 0;
78-
// for (const [row, column] of sorted) {
79-
// spaces.push([row, column]);
80-
// }
81-
8224
dfs(new Set(spaces), rows, columns, subboxes, board);
83-
// if (result) {
84-
// for (const [row, column, char] of result) {
85-
// board[row][column] = char;
86-
// }
87-
// }
8825
return;
8926
}
9027
function index_to_pair(index: number): [number, number] {
@@ -113,14 +50,11 @@ function dfs(
11350
subboxes: Record<string, boolean>[][],
11451
board: string[][],
11552
): boolean {
116-
// console.log(spaces);
11753
if (spaces.size === 0) {
11854
return true;
11955
}
12056
const spaces_and_chars: [number, number, string[]][] = [];
121-
// let count = 0;
12257
for (const index of spaces) {
123-
// if (count > 10) break;
12458
const [row, column] = index_to_pair(index);
12559
const chars = get_available_chars(row, column, rows, columns, subboxes);
12660
if (chars.length === 0) {
@@ -134,17 +68,9 @@ function dfs(
13468
if (chars.length === 1) {
13569
break;
13670
}
137-
138-
// count++;
13971
}
140-
// Array.from(spaces).map(function (index) {
141-
142-
// });
14372
let [i, j, chars] = spaces_and_chars[0];
144-
//查找可选数最少的空格
145-
// let countcount = 0;
14673
for (const [r, c, h] of spaces_and_chars) {
147-
// if (countcount > 10) break;
14874
if (h.length === 0) {
14975
return false;
15076
}
@@ -155,31 +81,11 @@ function dfs(
15581
if (chars.length === 1) {
15682
break;
15783
}
158-
// countcount++;
15984
}
16085
if (chars.length === 0) {
16186
return false;
16287
}
163-
// const clonedspaces = new Set(spaces);
164-
// clonedspaces.delete(pair_to_index(i, j));
165-
// const clonedspaces = spaces.filter(([r, c]) => !(r == i && c == j));
166-
167-
// if (pos < 0) {
168-
// return true;
169-
// }
170-
// const [i, j, chars] = sorted[pos];
171-
// const chars =
172-
173-
// Array.from({ length: 9 })
174-
//.map((_v, i) => String(i + 1))
175-
// .sort(() => Math.random() - 0.5);
17688
for (const char of chars.sort(() => Math.random() - 0.5)) {
177-
// if (
178-
// !rows[i][char] &&
179-
// !columns[j][char] &&
180-
// !subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char]
181-
// ) {
182-
18389
rows[i][char] = true;
18490

18591
columns[j][char] = true;
@@ -190,8 +96,6 @@ function dfs(
19096
spaces.delete(pair_to_index(i, j));
19197
const result = dfs(
19298
spaces,
193-
// clonedspaces,
194-
19599
rows,
196100
columns,
197101
subboxes,
@@ -204,7 +108,6 @@ function dfs(
204108
columns[j][char] = false;
205109
subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char] = false;
206110
spaces.add(pair_to_index(i, j));
207-
// }
208111
}
209112
return false;
210113
}
@@ -229,107 +132,3 @@ function get_available_chars(
229132
return Array.from(charset);
230133
}
231134
export default solveSudoku;
232-
// export default function solveSudoku(board: string[][]): void {
233-
// const spaces: [number, number][] = [];
234-
235-
// const rows = new Array(9).fill(0).map(() => number_char_set(false));
236-
// const columns = new Array(9).fill(0).map(() => number_char_set(false));
237-
// const subboxes = new Array(3)
238-
// .fill(0)
239-
// .map(() => new Array(3).fill(0).map(() => number_char_set(false)));
240-
// for (let i = 0; i < 9; i++) {
241-
// for (let j = 0; j < 9; j++) {
242-
// const char = board[i][j];
243-
// if (char === ".") {
244-
// // if (Math.random() - 0.5 > 0) {
245-
// spaces.push([i, j]);
246-
// // } else {
247-
// // spaces.unshift([i, j]);
248-
// // }
249-
// } else {
250-
// rows[i][char] = true;
251-
// columns[j][char] = true;
252-
// subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char] = true;
253-
// }
254-
// }
255-
// }
256-
// if (spaces.length === 0) {
257-
// return;
258-
// }
259-
// const sorted: [number, number, Array<string>][] = spaces
260-
// .map(
261-
// ([row, column]) =>
262-
// [row, column, get_available_chars(row, column)] as [
263-
// number,
264-
// number,
265-
// Array<string>,
266-
// ],
267-
// )
268-
// .sort((a, b) => -a[2].length + b[2].length);
269-
// // spaces.length = 0;
270-
// // for (const [row, column] of sorted) {
271-
// // spaces.push([row, column]);
272-
// // }
273-
274-
// function get_available_chars(row: number, column: number): Array<string> {
275-
// const array = Array.from({ length: 9 }).map((_v, i) => String(i + 1));
276-
// const charset = new Set(array);
277-
// for (const char of array) {
278-
// if (
279-
// rows[row][char] ||
280-
// columns[column][char] ||
281-
// subboxes[Math.floor(row / 3)][Math.floor(column / 3)][char]
282-
// ) {
283-
// charset.delete(char);
284-
// }
285-
// }
286-
// return Array.from(charset);
287-
// }
288-
// function dfs(pos: number): boolean {
289-
// if (pos < 0) {
290-
// return true;
291-
// }
292-
// const [i, j, chars] = sorted[pos];
293-
// // const chars =
294-
295-
// // Array.from({ length: 9 })
296-
// //.map((_v, i) => String(i + 1))
297-
// // .sort(() => Math.random() - 0.5);
298-
// for (const char of chars.sort(() => Math.random() - 0.5)) {
299-
// if (
300-
// !rows[i][char] &&
301-
// !columns[j][char] &&
302-
// !subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char]
303-
// ) {
304-
// rows[i][char] = true;
305-
// columns[j][char] = true;
306-
// subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char] = true;
307-
308-
// board[i][j] = char;
309-
// if (dfs(pos - 1)) {
310-
// return true;
311-
// }
312-
// rows[i][char] = false;
313-
// columns[j][char] = false;
314-
// subboxes[Math.floor(i / 3)][Math.floor(j / 3)][char] = false;
315-
// }
316-
// }
317-
// return false;
318-
// }
319-
320-
// dfs(spaces.length - 1);
321-
// return;
322-
// }
323-
// function number_char_set(def: boolean): Record<string, boolean> {
324-
// return {
325-
// 1: def,
326-
// 2: def,
327-
// 3: def,
328-
// 4: def,
329-
// 5: def,
330-
// 6: def,
331-
// 7: def,
332-
// 8: def,
333-
// 9: def,
334-
// };
335-
// }

0 commit comments

Comments
 (0)