数独の正解確認のプログラムを作りたい
数独の正解確認のプログラムを作りたい
https://okwave.jp/qa/q9544201.html
やっぱり頭のネジが緩んでるな。間違いだらけだった。
let A = [ 7,6,1, 3,5,2, 8,4,9, 5,8,2, 9,4,1, 3,7,6, 4,9,3, 7,6,8, 2,1,5, 6,2,8, 4,7,3, 9,5,1, 9,7,4, 1,2,5, 6,3,8, 3,1,5, 8,9,6, 4,2,7, 2,5,7, 6,8,4, 1,9,3, 8,3,9, 2,1,7, 5,6,4, 1,4,6, 5,3,9, 7,8,2 ]; const SQRT = Math.sqrt, INT = Math.floor, MAX = SQRT (A.length), AREA = SQRT (MAX), COUNT = [...new Array (MAX)], slice = (i, n = AREA) => A.slice (i, i + n), is_aligned = ary => { let a = new Set (ary); return ary.every ((_, i) => a.has (i + 1)); }, getRow = row => slice (row * MAX, MAX), getCol = col => COUNT.map ((_, i) => A[col + i * MAX]), getArea = area => { let i = INT (area / 3) * MAX * AREA + (area % AREA) * AREA; return slice (i).concat (slice (i + MAX), slice (i + MAX * 2)); }, check = () => COUNT .reduce ((rst, _, i) => rst.concat ([getRow (i), getCol (i), getArea (i)]), []) .every (a => is_aligned (a)); alert (check () ? "出来た!": "できてな〜い!");