zcw-shared 1.31.0 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/functions/algorithm/lcsVisual.d.ts +6 -0
  2. package/dist/functions/algorithm/lcsVisual.js +88 -0
  3. package/dist/functions/algorithm/lcsVisual.js.map +1 -0
  4. package/dist/functions/algorithm/mergeSortVisual.d.ts +5 -0
  5. package/dist/functions/algorithm/mergeSortVisual.js +103 -0
  6. package/dist/functions/algorithm/mergeSortVisual.js.map +1 -0
  7. package/dist/functions/algorithm/nQueensVisual.d.ts +14 -0
  8. package/dist/functions/algorithm/nQueensVisual.js +94 -0
  9. package/dist/functions/algorithm/nQueensVisual.js.map +1 -0
  10. package/dist/functions/algorithm/numIslandsVisual.d.ts +17 -0
  11. package/dist/functions/algorithm/numIslandsVisual.js +102 -0
  12. package/dist/functions/algorithm/numIslandsVisual.js.map +1 -0
  13. package/dist/functions/algorithm/quickSortVisual.d.ts +18 -0
  14. package/dist/functions/algorithm/quickSortVisual.js +104 -0
  15. package/dist/functions/algorithm/quickSortVisual.js.map +1 -0
  16. package/dist/functions/browser/detectDevice.d.ts +10 -0
  17. package/dist/functions/browser/detectDevice.js +49 -0
  18. package/dist/functions/browser/detectDevice.js.map +1 -0
  19. package/dist/functions/cookie/getCookie.d.ts +5 -0
  20. package/dist/functions/cookie/getCookie.js +14 -0
  21. package/dist/functions/cookie/getCookie.js.map +1 -0
  22. package/dist/functions/cookie/removeCookie.d.ts +8 -0
  23. package/dist/functions/cookie/removeCookie.js +12 -0
  24. package/dist/functions/cookie/removeCookie.js.map +1 -0
  25. package/dist/functions/cookie/setCookie.d.ts +11 -0
  26. package/dist/functions/cookie/setCookie.js +23 -0
  27. package/dist/functions/cookie/setCookie.js.map +1 -0
  28. package/dist/functions/data-structures/EventEmitter.d.ts +32 -0
  29. package/dist/functions/data-structures/EventEmitter.js +108 -0
  30. package/dist/functions/data-structures/EventEmitter.js.map +1 -0
  31. package/dist/functions/data-structures/MyPromise.d.ts +32 -0
  32. package/dist/functions/data-structures/MyPromise.js +254 -0
  33. package/dist/functions/data-structures/MyPromise.js.map +1 -0
  34. package/dist/functions/reactive/useReactiveCookie.d.ts +19 -0
  35. package/dist/functions/reactive/useReactiveCookie.js +84 -0
  36. package/dist/functions/reactive/useReactiveCookie.js.map +1 -0
  37. package/dist/hooks/useClickOutside.d.ts +12 -0
  38. package/dist/hooks/useClickOutside.js +16 -0
  39. package/dist/hooks/useClickOutside.js.map +1 -0
  40. package/dist/hooks/useClipboard.d.ts +20 -0
  41. package/dist/hooks/useClipboard.js +33 -0
  42. package/dist/hooks/useClipboard.js.map +1 -0
  43. package/dist/hooks/useCounter.d.ts +19 -0
  44. package/dist/hooks/useCounter.js +44 -0
  45. package/dist/hooks/useCounter.js.map +1 -0
  46. package/dist/hooks/useEventListener.d.ts +14 -0
  47. package/dist/hooks/useEventListener.js +18 -0
  48. package/dist/hooks/useEventListener.js.map +1 -0
  49. package/dist/hooks/useInterval.d.ts +19 -0
  50. package/dist/hooks/useInterval.js +33 -0
  51. package/dist/hooks/useInterval.js.map +1 -0
  52. package/dist/hooks/useTimeout.d.ts +20 -0
  53. package/dist/hooks/useTimeout.js +40 -0
  54. package/dist/hooks/useTimeout.js.map +1 -0
  55. package/dist/hooks/useToggle.d.ts +15 -0
  56. package/dist/hooks/useToggle.js +23 -0
  57. package/dist/hooks/useToggle.js.map +1 -0
  58. package/dist/reactive/createGlobalState.d.ts +2 -0
  59. package/dist/reactive/createGlobalState.js +11 -0
  60. package/dist/reactive/createGlobalState.js.map +1 -0
  61. package/dist/reactive/createSharedComposable.d.ts +2 -0
  62. package/dist/reactive/createSharedComposable.js +13 -0
  63. package/dist/reactive/createSharedComposable.js.map +1 -0
  64. package/dist/reactive/errorManager.d.ts +63 -0
  65. package/dist/reactive/errorManager.js +199 -0
  66. package/dist/reactive/errorManager.js.map +1 -0
  67. package/dist/reactive/i18n.d.ts +27 -0
  68. package/dist/reactive/i18n.js +119 -0
  69. package/dist/reactive/i18n.js.map +1 -0
  70. package/dist/reactive/permission.d.ts +40 -0
  71. package/dist/reactive/permission.js +189 -0
  72. package/dist/reactive/permission.js.map +1 -0
  73. package/dist/reactive/pinia.d.ts +52 -0
  74. package/dist/reactive/pinia.js +183 -0
  75. package/dist/reactive/pinia.js.map +1 -0
  76. package/dist/reactive/useAltool.d.ts +39 -0
  77. package/dist/reactive/useAltool.js +350 -0
  78. package/dist/reactive/useAltool.js.map +1 -0
  79. package/dist/reactive/useCache.d.ts +18 -0
  80. package/dist/reactive/useCache.js +82 -0
  81. package/dist/reactive/useCache.js.map +1 -0
  82. package/dist/reactive/useLocalStorage.d.ts +8 -0
  83. package/dist/reactive/useLocalStorage.js +101 -0
  84. package/dist/reactive/useLocalStorage.js.map +1 -0
  85. package/dist/reactive/usePluginSystem.d.ts +11 -0
  86. package/dist/reactive/usePluginSystem.js +34 -0
  87. package/dist/reactive/usePluginSystem.js.map +1 -0
  88. package/dist/reactive/useSessionStorage.d.ts +8 -0
  89. package/dist/reactive/useSessionStorage.js +101 -0
  90. package/dist/reactive/useSessionStorage.js.map +1 -0
  91. package/dist/reactive/useStorage.d.ts +13 -0
  92. package/dist/reactive/useStorage.js +62 -0
  93. package/dist/reactive/useStorage.js.map +1 -0
  94. package/dist/reactive/useStorageWithIndexedDB.d.ts +8 -0
  95. package/dist/reactive/useStorageWithIndexedDB.js +132 -0
  96. package/dist/reactive/useStorageWithIndexedDB.js.map +1 -0
  97. package/dist/vue-hooks/browser/useFileUpload.d.ts +1 -1
  98. package/dist/vue-hooks/browser/useFileUpload.js +10 -5
  99. package/dist/vue-hooks/browser/useFileUpload.js.map +1 -1
  100. package/dist/vue-hooks/state/handleUserInvalid.d.ts +10 -0
  101. package/dist/vue-hooks/state/handleUserInvalid.js +7 -0
  102. package/dist/vue-hooks/state/handleUserInvalid.js.map +1 -0
  103. package/dist/vue-hooks/state/useGlobalSettingsManager.d.ts +50 -0
  104. package/dist/vue-hooks/state/useGlobalSettingsManager.js +129 -0
  105. package/dist/vue-hooks/state/useGlobalSettingsManager.js.map +1 -0
  106. package/dist/vue-hooks/state/useSystemSettingsManager.d.ts +45 -0
  107. package/dist/vue-hooks/state/useSystemSettingsManager.js +102 -0
  108. package/dist/vue-hooks/state/useSystemSettingsManager.js.map +1 -0
  109. package/dist/vue-hooks/state/useToken.d.ts +36 -0
  110. package/dist/vue-hooks/state/useToken.js +121 -0
  111. package/dist/vue-hooks/state/useToken.js.map +1 -0
  112. package/dist/vue-hooks/state/useTokenManager.d.ts +55 -0
  113. package/dist/vue-hooks/state/useTokenManager.js +146 -0
  114. package/dist/vue-hooks/state/useTokenManager.js.map +1 -0
  115. package/dist/vue-hooks/state/useUserManager.d.ts +41 -0
  116. package/dist/vue-hooks/state/useUserManager.js +77 -0
  117. package/dist/vue-hooks/state/useUserManager.js.map +1 -0
  118. package/package.json +6 -1
  119. package/dist/functions/platform/tencent-cloud/deploy.tcb.d.ts +0 -13
  120. package/dist/functions/platform/tencent-cloud/deploy.tcb.js +0 -46
  121. package/dist/functions/platform/tencent-cloud/deploy.tcb.js.map +0 -1
  122. package/dist/functions/platform/tencent-cloud/getSecret.d.ts +0 -4
  123. package/dist/functions/platform/tencent-cloud/getSecret.js +0 -19
  124. package/dist/functions/platform/tencent-cloud/getSecret.js.map +0 -1
  125. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.d.ts +0 -27
  126. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.js +0 -287
  127. package/dist/functions/platform/uniapp/app-plus/buildAndroidApp.js.map +0 -1
  128. package/dist/functions/platform/uniapp/build.d.ts +0 -21
  129. package/dist/functions/platform/uniapp/build.js +0 -83
  130. package/dist/functions/platform/uniapp/build.js.map +0 -1
  131. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.d.ts +0 -11
  132. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.js +0 -30
  133. package/dist/functions/platform/uniapp/detectAndroidProjectStructure.js.map +0 -1
  134. package/dist/functions/platform/uniapp/detectProjectType.d.ts +0 -20
  135. package/dist/functions/platform/uniapp/detectProjectType.js +0 -68
  136. package/dist/functions/platform/uniapp/detectProjectType.js.map +0 -1
  137. package/dist/functions/platform/uniapp/parseManifest.d.ts +0 -18
  138. package/dist/functions/platform/uniapp/parseManifest.js +0 -49
  139. package/dist/functions/platform/uniapp/parseManifest.js.map +0 -1
  140. package/dist/functions/platform/uniapp/waitForPages.d.ts +0 -7
  141. package/dist/functions/platform/uniapp/waitForPages.js +0 -20
  142. package/dist/functions/platform/uniapp/waitForPages.js.map +0 -1
  143. package/dist/functions/string/visualizeRegexSteps.d.ts +0 -39
  144. package/dist/functions/string/visualizeRegexSteps.js +0 -446
  145. package/dist/functions/string/visualizeRegexSteps.js.map +0 -1
  146. package/dist/functions/utils/createI18n.d.ts +0 -2
  147. package/dist/functions/utils/createI18n.js +0 -97
  148. package/dist/functions/utils/createI18n.js.map +0 -1
  149. package/dist/functions/utils/formatString.d.ts +0 -5
  150. package/dist/functions/utils/formatString.js +0 -9
  151. package/dist/functions/utils/formatString.js.map +0 -1
  152. package/dist/hooks/usePermission.d.ts +0 -7
  153. package/dist/hooks/usePermission.js +0 -123
  154. package/dist/hooks/usePermission.js.map +0 -1
  155. package/dist/vue-hooks/dom/useKeyboard.d.ts +0 -29
  156. package/dist/vue-hooks/dom/useKeyboard.js +0 -129
  157. package/dist/vue-hooks/dom/useKeyboard.js.map +0 -1
  158. package/dist/vue-hooks/state/useFileUpload.d.ts +0 -23
  159. package/dist/vue-hooks/state/useFileUpload.js +0 -93
  160. package/dist/vue-hooks/state/useFileUpload.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ import type { DPTableVisualStep } from '../../../types/algorithm-visual';
2
+ export declare function lcsVisual(str1: string, str2: string): {
3
+ steps: DPTableVisualStep[];
4
+ length: number;
5
+ sequence: string;
6
+ };
@@ -0,0 +1,88 @@
1
+ export function lcsVisual(str1, str2) {
2
+ const steps = [];
3
+ let stepNumber = 0;
4
+ const m = str1.length;
5
+ const n = str2.length;
6
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
7
+ steps.push({
8
+ stepNumber: stepNumber++,
9
+ description: '初始化DP表',
10
+ dpTable: dp.map(row => [...row])
11
+ });
12
+ for (let i = 1; i <= m; i++) {
13
+ for (let j = 1; j <= n; j++) {
14
+ steps.push({
15
+ stepNumber: stepNumber++,
16
+ description: `处理 str1[${i - 1}]='${str1[i - 1]}' 和 str2[${j - 1}]='${str2[j - 1]}'`,
17
+ dpTable: dp.map(row => [...row]),
18
+ currentCell: { row: i, col: j }
19
+ });
20
+ if (str1[i - 1] === str2[j - 1]) {
21
+ dp[i][j] = dp[i - 1][j - 1] + 1;
22
+ steps.push({
23
+ stepNumber: stepNumber++,
24
+ description: `字符相同!dp[${i}][${j}] = dp[${i - 1}][${j - 1}] + 1 = ${dp[i][j]}`,
25
+ dpTable: dp.map(row => [...row]),
26
+ currentCell: { row: i, col: j },
27
+ dependencies: [{ row: i - 1, col: j - 1 }],
28
+ currentValue: dp[i][j]
29
+ });
30
+ }
31
+ else {
32
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
33
+ steps.push({
34
+ stepNumber: stepNumber++,
35
+ description: `字符不同,取最大值: dp[${i}][${j}] = max(${dp[i - 1][j]}, ${dp[i][j - 1]}) = ${dp[i][j]}`,
36
+ dpTable: dp.map(row => [...row]),
37
+ currentCell: { row: i, col: j },
38
+ dependencies: [{ row: i - 1, col: j }, { row: i, col: j - 1 }],
39
+ currentValue: dp[i][j]
40
+ });
41
+ }
42
+ }
43
+ }
44
+ let i = m, j = n;
45
+ const lcs = [];
46
+ while (i > 0 && j > 0) {
47
+ if (str1[i - 1] === str2[j - 1]) {
48
+ lcs.unshift(str1[i - 1]);
49
+ steps.push({
50
+ stepNumber: stepNumber++,
51
+ description: `回溯: 字符'${str1[i - 1]}'是LCS的一部分`,
52
+ dpTable: dp.map(row => [...row]),
53
+ currentCell: { row: i, col: j }
54
+ });
55
+ i--;
56
+ j--;
57
+ }
58
+ else if (dp[i - 1][j] > dp[i][j - 1]) {
59
+ steps.push({
60
+ stepNumber: stepNumber++,
61
+ description: `回溯: 向上移动`,
62
+ dpTable: dp.map(row => [...row]),
63
+ currentCell: { row: i, col: j }
64
+ });
65
+ i--;
66
+ }
67
+ else {
68
+ steps.push({
69
+ stepNumber: stepNumber++,
70
+ description: `回溯: 向左移动`,
71
+ dpTable: dp.map(row => [...row]),
72
+ currentCell: { row: i, col: j }
73
+ });
74
+ j--;
75
+ }
76
+ }
77
+ steps.push({
78
+ stepNumber: stepNumber++,
79
+ description: `LCS构建完成: "${lcs.join('')}", 长度 ${dp[m][n]}`,
80
+ dpTable: dp.map(row => [...row])
81
+ });
82
+ return {
83
+ steps,
84
+ length: dp[m][n],
85
+ sequence: lcs.join('')
86
+ };
87
+ }
88
+ //# sourceMappingURL=lcsVisual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lcsVisual.js","sourceRoot":"","sources":["../../../src/functions/algorithm/lcsVisual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ArrayVisualStep } from '../../../types/algorithm-visual';
2
+ export declare function mergeSortVisual(arr: number[]): {
3
+ steps: ArrayVisualStep[];
4
+ result: number[];
5
+ };
@@ -0,0 +1,103 @@
1
+ export function mergeSortVisual(arr) {
2
+ const steps = [];
3
+ let stepNumber = 0;
4
+ const result = [...arr];
5
+ steps.push({
6
+ stepNumber: stepNumber++,
7
+ description: '开始归并排序',
8
+ array: [...result],
9
+ highlights: {}
10
+ });
11
+ function merge(arr, left, mid, right) {
12
+ const leftArr = arr.slice(left, mid + 1);
13
+ const rightArr = arr.slice(mid + 1, right + 1);
14
+ steps.push({
15
+ stepNumber: stepNumber++,
16
+ description: `合并两个已排序数组: [${left}..${mid}] 和 [${mid + 1}..${right}]`,
17
+ array: [...arr],
18
+ highlights: { primary: [mid], secondary: Array.from({ length: right - left + 1 }, (_, i) => left + i) },
19
+ range: { left, right }
20
+ });
21
+ let i = 0, j = 0, k = left;
22
+ while (i < leftArr.length && j < rightArr.length) {
23
+ steps.push({
24
+ stepNumber: stepNumber++,
25
+ description: `比较 ${leftArr[i]} 和 ${rightArr[j]}`,
26
+ array: [...arr],
27
+ highlights: { comparing: [left + i, mid + 1 + j] },
28
+ range: { left, right }
29
+ });
30
+ if (leftArr[i] <= rightArr[j]) {
31
+ arr[k] = leftArr[i];
32
+ steps.push({
33
+ stepNumber: stepNumber++,
34
+ description: `选择 ${leftArr[i]},放入位置 ${k}`,
35
+ array: [...arr],
36
+ highlights: { completed: [k] },
37
+ range: { left, right }
38
+ });
39
+ i++;
40
+ }
41
+ else {
42
+ arr[k] = rightArr[j];
43
+ steps.push({
44
+ stepNumber: stepNumber++,
45
+ description: `选择 ${rightArr[j]},放入位置 ${k}`,
46
+ array: [...arr],
47
+ highlights: { completed: [k] },
48
+ range: { left, right }
49
+ });
50
+ j++;
51
+ }
52
+ k++;
53
+ }
54
+ while (i < leftArr.length) {
55
+ arr[k] = leftArr[i];
56
+ steps.push({
57
+ stepNumber: stepNumber++,
58
+ description: `复制剩余元素 ${leftArr[i]} 到位置 ${k}`,
59
+ array: [...arr],
60
+ highlights: { completed: [k] },
61
+ range: { left, right }
62
+ });
63
+ i++;
64
+ k++;
65
+ }
66
+ while (j < rightArr.length) {
67
+ arr[k] = rightArr[j];
68
+ steps.push({
69
+ stepNumber: stepNumber++,
70
+ description: `复制剩余元素 ${rightArr[j]} 到位置 ${k}`,
71
+ array: [...arr],
72
+ highlights: { completed: [k] },
73
+ range: { left, right }
74
+ });
75
+ j++;
76
+ k++;
77
+ }
78
+ }
79
+ function mergeSortHelper(arr, left, right) {
80
+ if (left >= right)
81
+ return;
82
+ const mid = Math.floor((left + right) / 2);
83
+ steps.push({
84
+ stepNumber: stepNumber++,
85
+ description: `分割数组 [${left}..${right}] 为 [${left}..${mid}] 和 [${mid + 1}..${right}]`,
86
+ array: [...arr],
87
+ highlights: { primary: [mid] },
88
+ range: { left, right }
89
+ });
90
+ mergeSortHelper(arr, left, mid);
91
+ mergeSortHelper(arr, mid + 1, right);
92
+ merge(arr, left, mid, right);
93
+ }
94
+ mergeSortHelper(result, 0, result.length - 1);
95
+ steps.push({
96
+ stepNumber: stepNumber++,
97
+ description: '归并排序完成!',
98
+ array: [...result],
99
+ highlights: { completed: result.map((_, i) => i) }
100
+ });
101
+ return { steps, result };
102
+ }
103
+ //# sourceMappingURL=mergeSortVisual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeSortVisual.js","sourceRoot":"","sources":["../../../src/functions/algorithm/mergeSortVisual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { BacktrackVisualStep } from '../../../types/algorithm-visual';
2
+ export interface NQueensVisualStep extends BacktrackVisualStep {
3
+ board: string[][];
4
+ currentRow: number;
5
+ tryingCol?: number;
6
+ conflicts?: Array<{
7
+ row: number;
8
+ col: number;
9
+ }>;
10
+ }
11
+ export declare function nQueensVisual(n: number): {
12
+ steps: NQueensVisualStep[];
13
+ solutions: string[][];
14
+ };
@@ -0,0 +1,94 @@
1
+ export function nQueensVisual(n) {
2
+ const steps = [];
3
+ let stepNumber = 0;
4
+ const solutions = [];
5
+ const board = Array.from({ length: n }, () => Array(n).fill('.'));
6
+ const cols = new Set();
7
+ const diag1 = new Set();
8
+ const diag2 = new Set();
9
+ steps.push({
10
+ stepNumber: stepNumber++,
11
+ description: `开始解决${n}皇后问题`,
12
+ path: [],
13
+ board: board.map(r => [...r]),
14
+ currentRow: 0
15
+ });
16
+ function backtrack(row) {
17
+ if (row === n) {
18
+ solutions.push(board.map(r => r.join('')));
19
+ steps.push({
20
+ stepNumber: stepNumber++,
21
+ description: `找到一个解决方案!(第${solutions.length}个)`,
22
+ path: Array.from({ length: n }, (_, i) => board[i].indexOf('Q')),
23
+ board: board.map(r => [...r]),
24
+ currentRow: row,
25
+ isBacktracking: false
26
+ });
27
+ return;
28
+ }
29
+ for (let col = 0; col < n; col++) {
30
+ steps.push({
31
+ stepNumber: stepNumber++,
32
+ description: `第${row}行: 尝试在第${col}列放置皇后`,
33
+ path: Array.from({ length: row }, (_, i) => board[i].indexOf('Q')),
34
+ board: board.map(r => [...r]),
35
+ currentRow: row,
36
+ tryingCol: col
37
+ });
38
+ const hasConflict = cols.has(col) || diag1.has(row - col) || diag2.has(row + col);
39
+ if (hasConflict) {
40
+ const conflicts = [];
41
+ for (let i = 0; i < row; i++) {
42
+ const queenCol = board[i].indexOf('Q');
43
+ if (queenCol === col || i - queenCol === row - col || i + queenCol === row + col) {
44
+ conflicts.push({ row: i, col: queenCol });
45
+ }
46
+ }
47
+ steps.push({
48
+ stepNumber: stepNumber++,
49
+ description: `冲突!该位置会与已放置的皇后冲突`,
50
+ path: [],
51
+ board: board.map(r => [...r]),
52
+ currentRow: row,
53
+ tryingCol: col,
54
+ conflicts
55
+ });
56
+ continue;
57
+ }
58
+ board[row][col] = 'Q';
59
+ cols.add(col);
60
+ diag1.add(row - col);
61
+ diag2.add(row + col);
62
+ steps.push({
63
+ stepNumber: stepNumber++,
64
+ description: `在(${row}, ${col})放置皇后,继续下一行`,
65
+ path: Array.from({ length: row + 1 }, (_, i) => board[i].indexOf('Q')),
66
+ board: board.map(r => [...r]),
67
+ currentRow: row
68
+ });
69
+ backtrack(row + 1);
70
+ board[row][col] = '.';
71
+ cols.delete(col);
72
+ diag1.delete(row - col);
73
+ diag2.delete(row + col);
74
+ steps.push({
75
+ stepNumber: stepNumber++,
76
+ description: `回溯:移除(${row}, ${col})的皇后`,
77
+ path: Array.from({ length: row }, (_, i) => board[i].indexOf('Q')),
78
+ board: board.map(r => [...r]),
79
+ currentRow: row,
80
+ isBacktracking: true
81
+ });
82
+ }
83
+ }
84
+ backtrack(0);
85
+ steps.push({
86
+ stepNumber: stepNumber++,
87
+ description: `完成!共找到${solutions.length}个解决方案`,
88
+ path: [],
89
+ board: board.map(r => [...r]),
90
+ currentRow: n
91
+ });
92
+ return { steps, solutions };
93
+ }
94
+ //# sourceMappingURL=nQueensVisual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nQueensVisual.js","sourceRoot":"","sources":["../../../src/functions/algorithm/nQueensVisual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { GraphVisualStep } from '../../../types/algorithm-visual';
2
+ export interface IslandVisualStep extends GraphVisualStep {
3
+ grid: string[][];
4
+ currentPos?: {
5
+ row: number;
6
+ col: number;
7
+ };
8
+ islandCount: number;
9
+ stack?: Array<{
10
+ row: number;
11
+ col: number;
12
+ }>;
13
+ }
14
+ export declare function numIslandsVisual(grid: string[][]): {
15
+ steps: IslandVisualStep[];
16
+ count: number;
17
+ };
@@ -0,0 +1,102 @@
1
+ export function numIslandsVisual(grid) {
2
+ const steps = [];
3
+ let stepNumber = 0;
4
+ const gridCopy = grid.map(row => [...row]);
5
+ const m = gridCopy.length;
6
+ const n = gridCopy[0].length;
7
+ let count = 0;
8
+ steps.push({
9
+ stepNumber: stepNumber++,
10
+ description: '开始搜索岛屿',
11
+ graph: [],
12
+ visited: [],
13
+ grid: gridCopy.map(r => [...r]),
14
+ islandCount: 0
15
+ });
16
+ function dfs(i, j, islandId) {
17
+ if (i < 0 || i >= m || j < 0 || j >= n || gridCopy[i][j] === '0') {
18
+ steps.push({
19
+ stepNumber: stepNumber++,
20
+ description: `位置(${i},${j})越界或是水域,返回`,
21
+ graph: [],
22
+ visited: [],
23
+ grid: gridCopy.map(r => [...r]),
24
+ currentPos: { row: i, col: j },
25
+ islandCount: count
26
+ });
27
+ return;
28
+ }
29
+ steps.push({
30
+ stepNumber: stepNumber++,
31
+ description: `访问陆地(${i},${j}),标记为岛屿${islandId}的一部分`,
32
+ graph: [],
33
+ visited: [],
34
+ grid: gridCopy.map(r => [...r]),
35
+ currentPos: { row: i, col: j },
36
+ islandCount: count
37
+ });
38
+ gridCopy[i][j] = '0';
39
+ steps.push({
40
+ stepNumber: stepNumber++,
41
+ description: `标记(${i},${j})为已访问`,
42
+ graph: [],
43
+ visited: [],
44
+ grid: gridCopy.map(r => [...r]),
45
+ currentPos: { row: i, col: j },
46
+ islandCount: count
47
+ });
48
+ const directions = [
49
+ { name: '下', dr: 1, dc: 0 },
50
+ { name: '上', dr: -1, dc: 0 },
51
+ { name: '右', dr: 0, dc: 1 },
52
+ { name: '左', dr: 0, dc: -1 }
53
+ ];
54
+ for (const dir of directions) {
55
+ steps.push({
56
+ stepNumber: stepNumber++,
57
+ description: `从(${i},${j})向${dir.name}搜索`,
58
+ graph: [],
59
+ visited: [],
60
+ grid: gridCopy.map(r => [...r]),
61
+ currentPos: { row: i, col: j },
62
+ islandCount: count
63
+ });
64
+ dfs(i + dir.dr, j + dir.dc, islandId);
65
+ }
66
+ }
67
+ for (let i = 0; i < m; i++) {
68
+ for (let j = 0; j < n; j++) {
69
+ if (gridCopy[i][j] === '1') {
70
+ count++;
71
+ steps.push({
72
+ stepNumber: stepNumber++,
73
+ description: `发现新岛屿${count}!起点(${i},${j})`,
74
+ graph: [],
75
+ visited: [],
76
+ grid: gridCopy.map(r => [...r]),
77
+ currentPos: { row: i, col: j },
78
+ islandCount: count
79
+ });
80
+ dfs(i, j, count);
81
+ steps.push({
82
+ stepNumber: stepNumber++,
83
+ description: `岛屿${count}搜索完成`,
84
+ graph: [],
85
+ visited: [],
86
+ grid: gridCopy.map(r => [...r]),
87
+ islandCount: count
88
+ });
89
+ }
90
+ }
91
+ }
92
+ steps.push({
93
+ stepNumber: stepNumber++,
94
+ description: `搜索完成!共找到${count}个岛屿`,
95
+ graph: [],
96
+ visited: [],
97
+ grid: gridCopy.map(r => [...r]),
98
+ islandCount: count
99
+ });
100
+ return { steps, count };
101
+ }
102
+ //# sourceMappingURL=numIslandsVisual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numIslandsVisual.js","sourceRoot":"","sources":["../../../src/functions/algorithm/numIslandsVisual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface SortStep {
2
+ description: string;
3
+ array: number[];
4
+ highlights: {
5
+ pivot?: number;
6
+ comparing?: number[];
7
+ swapping?: number[];
8
+ sorted?: number[];
9
+ };
10
+ range?: {
11
+ left: number;
12
+ right: number;
13
+ };
14
+ }
15
+ export declare function quickSortVisual(arr: number[]): {
16
+ steps: SortStep[];
17
+ result: number[];
18
+ };
@@ -0,0 +1,104 @@
1
+ export function quickSortVisual(arr) {
2
+ const steps = [];
3
+ const result = [...arr];
4
+ steps.push({
5
+ description: '开始排序',
6
+ array: [...result],
7
+ highlights: {}
8
+ });
9
+ function partition(arr, left, right) {
10
+ const pivot = arr[right];
11
+ const pivotIndex = right;
12
+ steps.push({
13
+ description: `选择基准值 arr[${right}] = ${pivot}`,
14
+ array: [...arr],
15
+ highlights: { pivot: right },
16
+ range: { left, right }
17
+ });
18
+ let i = left - 1;
19
+ for (let j = left; j < right; j++) {
20
+ steps.push({
21
+ description: `比较 arr[${j}] = ${arr[j]} 与基准值 ${pivot}`,
22
+ array: [...arr],
23
+ highlights: { pivot: pivotIndex, comparing: [j] },
24
+ range: { left, right }
25
+ });
26
+ if (arr[j] <= pivot) {
27
+ i++;
28
+ if (i !== j) {
29
+ steps.push({
30
+ description: `交换 arr[${i}] = ${arr[i]} 与 arr[${j}] = ${arr[j]}`,
31
+ array: [...arr],
32
+ highlights: { pivot: pivotIndex, swapping: [i, j] },
33
+ range: { left, right }
34
+ });
35
+ [arr[i], arr[j]] = [arr[j], arr[i]];
36
+ steps.push({
37
+ description: `交换后: arr[${i}] = ${arr[i]}, arr[${j}] = ${arr[j]}`,
38
+ array: [...arr],
39
+ highlights: { pivot: pivotIndex },
40
+ range: { left, right }
41
+ });
42
+ }
43
+ }
44
+ }
45
+ const newPivotIndex = i + 1;
46
+ if (newPivotIndex !== right) {
47
+ steps.push({
48
+ description: `将基准值放到正确位置: 交换 arr[${newPivotIndex}] 与 arr[${right}]`,
49
+ array: [...arr],
50
+ highlights: { swapping: [newPivotIndex, right] },
51
+ range: { left, right }
52
+ });
53
+ [arr[newPivotIndex], arr[right]] = [arr[right], arr[newPivotIndex]];
54
+ steps.push({
55
+ description: `基准值 ${pivot} 已就位于索引 ${newPivotIndex}`,
56
+ array: [...arr],
57
+ highlights: { sorted: [newPivotIndex] },
58
+ range: { left, right }
59
+ });
60
+ }
61
+ return newPivotIndex;
62
+ }
63
+ function quickSortHelper(arr, left, right) {
64
+ if (left >= right) {
65
+ if (left === right) {
66
+ steps.push({
67
+ description: `单个元素 arr[${left}] = ${arr[left]} 已有序`,
68
+ array: [...arr],
69
+ highlights: { sorted: [left] }
70
+ });
71
+ }
72
+ return;
73
+ }
74
+ steps.push({
75
+ description: `处理子数组 [${left}..${right}]`,
76
+ array: [...arr],
77
+ highlights: {},
78
+ range: { left, right }
79
+ });
80
+ const pivotIndex = partition(arr, left, right);
81
+ steps.push({
82
+ description: `递归处理左半部分 [${left}..${pivotIndex - 1}]`,
83
+ array: [...arr],
84
+ highlights: {},
85
+ range: { left, right: pivotIndex - 1 }
86
+ });
87
+ quickSortHelper(arr, left, pivotIndex - 1);
88
+ steps.push({
89
+ description: `递归处理右半部分 [${pivotIndex + 1}..${right}]`,
90
+ array: [...arr],
91
+ highlights: {},
92
+ range: { left: pivotIndex + 1, right }
93
+ });
94
+ quickSortHelper(arr, pivotIndex + 1, right);
95
+ }
96
+ quickSortHelper(result, 0, result.length - 1);
97
+ steps.push({
98
+ description: '排序完成!',
99
+ array: [...result],
100
+ highlights: { sorted: result.map((_, i) => i) }
101
+ });
102
+ return { steps, result };
103
+ }
104
+ //# sourceMappingURL=quickSortVisual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickSortVisual.js","sourceRoot":"","sources":["../../../src/functions/algorithm/quickSortVisual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Navigator } from '../../../references/browser.d';
2
+ export interface DetectDeviceDeps {
3
+ userAgent: Navigator['userAgent'];
4
+ }
5
+ export interface DeviceInfo {
6
+ type: 'mobile' | 'tablet' | 'desktop';
7
+ vendor: string;
8
+ model: string;
9
+ }
10
+ export declare function detectDevice(deps: DetectDeviceDeps): DeviceInfo;