随机生成《数独》二维数组= =
資深大佬 : vitozyf 0
function getSudokuItem(params) { const sudokuItem = [] while (sudokuItem.length < 9) { let num =parseInt(Math.random() * 9 + 1,10) while (sudokuItem.includes(num)) { num =parseInt(Math.random() * 9 + 1,10) } sudokuItem.push(num) } return sudokuItem } function getSudokuData(params) { const sudokuData = []; while (sudokuData.length < 9) { let item = getSudokuItem() function getExisted() { item = getSudokuItem() let existed = false for (let i = 0; i < 9; i++) { if (sudokuData.map(a => a[i]).includes(item[i])) { existed = true; break } } const s = [1,4,7], t = [2,5,8], i = sudokuData.length if (s.includes(i)) { const flag0 = sudokuData[i - 1].filter((d, j) => j < 3).find(a => a === item[0] || a === item[1] || a === item[2]) const flag1 = sudokuData[i - 1].filter((d, j) => j < 6 && j >= 3).find(a => a === item[3] || a === item[4] || a === item[5]) const flag2 = sudokuData[i - 1].filter((d, j) => j < 9 && j >= 6).find(a => a === item[6] || a === item[7] || a === item[8]) if (flag0 || flag1 || flag2) { existed = true; } } if (t.includes(i)) { const flag0 = sudokuData[i - 2].filter((d, j) => j < 3).concat(sudokuData[i - 1].filter((d, j) => j < 3)).find(a => a === item[0] || a === item[1] || a === item[2]) const flag1 = sudokuData[i - 2].filter((d, j) => j < 6 && j >= 3).concat(sudokuData[i - 1].filter((d, j) => j < 6 && j >= 3)).find(a => a === item[3] || a === item[4] || a === item[5]) const flag2 = sudokuData[i - 2].filter((d, j) => j < 9 && j >= 6).concat(sudokuData[i - 1].filter((d, j) => j < 9 && j >= 6)).find(a => a === item[6] || a === item[7] || a === item[8]) if (flag0 || flag1 || flag2) { existed = true; } } return existed } while(getExisted()) {} sudokuData.push(item) } return sudokuData } console.table(getSudokuData())
打开浏览器控制台,复制执行查看结果 = =
大佬有話說 (0)