【发布时间】:2014-06-19 18:05:12
【问题描述】:
我正在制作一个数独求解程序,我有一个potentialNbrsAt 函数,它可以获取可能位于 x y 位置的数字。
现在,我正在尝试获取列中每个潜在数字列表的交集。类似于下面的onlyOnePlaceForNbrInCol 函数。
代码:
potentialNbrsAt :: Int -> Int -> Sudoku -> [Int]
potentialNbrsAt x y sudoku = intersect rowMissingNbrs $ intersect colMissingNbrs sqrMissingNbrs
where rowMissingNbrs = getMissingNbrs $ getRow y sudoku
colMissingNbrs = getMissingNbrs $ getCol x sudoku
sqrMissingNbrs = getMissingNbrs $ getSquare squareIndex sudoku
squareIndex = 3 * (y `div` 3) + (x `div` 3)
onlyOnePlaceForNbrInCol :: Int -> Int -> Sudoku -> Bool
onlyOnePlaceForNbrInCol colIndex nbr sudoku = -- What goes here? Some pointers please???
我认为 onlyOnePlaceForNbrInCol 应该在某些时候调用 potentialNbrsAt,每个数字从 0 到 8 作为 y 的参数。告诉我如何做到这一点会有很大帮助。
【问题讨论】:
-
PS:当数字 9 或
div运算符出现在数独求解器中时,它表明建模不足:网格没有二维 (9x9),而是四维 (3x3x3x3)。在德语中,“die Anschauung ist auch oft der Feind des Verständnisses”。
标签: list haskell functional-programming