0
スムクトソルバーを代入すると、私はスドクの空白セルを解く際に問題に遭遇しました。私は独特のソリューションで細胞を簡単に解決することができますが、複数のソリューション(現在の状態では複数のソリューション)があるセルに出会うと、次の空白に移動して、できるだけ多くのそれに応じて私のソリューションを価値あるものにすることができます。スドク解法の最適化
私の問題は、自分がどの空白値を保持しているかを把握する方法がわからないことです。ここで
blank :: Sudoku -> Pos
blank sudoku
| elem '.' $ toString sudoku = ((positInRow `div` 9), (positInRow `mod` 9))
| otherwise = error "no blanks"
where
positInRow = fromJust $ elemIndex '.' $ toString sudoku
nextBlank :: Sudoku -> Pos -> Pos
nextBlank sudoku (x, y)
| elem '.' $ drop (x*9+y) $ toString sudoku = blank (fromString $ drop (x*9+y) $ toString sudoku)
| otherwise = error "no blanks"
は私試みたソリューションですが、私は再帰的に数独を解くしようとした場合、元の次の空白は上の値を更新しない場合、それは同じ「nextBlank」を見つける無限ループにはまります数独。
この機能を正しく実装する方法はありますか?