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())
打开浏览器控制台,复制执行查看结果 = =
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.