-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Ex 2
The following is Okay
constraints :: Sudoku -> [Constraint]
constraints s = sortBy length3rd
[(r,c, freeAtPos' s (r,c) sudokuConstraints) |
(r,c) <- openPositions s ]
but why not refactor the code
prune :: (Row,Column,Value)
-> [Constraint] -> [Constraint]
prune _ [] = []
prune (r,c,v) ((x,y,zs):rest)
| r == x = (x,y,zs\\[v]) : prune (r,c,v) rest
| c == y = (x,y,zs\\[v]) : prune (r,c,v) rest
| sameblock (r,c) (x,y) =
(x,y,zs\\[v]) : prune (r,c,v) rest
| otherwise = (x,y,zs) : prune (r,c,v) rest
sameblock :: (Row,Column) -> (Row,Column) -> Bool
sameblock (r,c) (x,y) = bl r == bl x && bl c == bl y
I see you understand this, but you are on the half way.
Exercise 4
Nice reasoning. But still sudoko's with 4 empty blocks and an unique solution exists.
| 8 6 | 3 | |
| 3 | 4 1 | |
| 9 | | |
+-------+-------+-------+
| | 6 | |
| | | |
| | 5 | |
+-------+-------+-------+
| 2 3 | | 8 |
| 8 | | 9 3 |
| 5 | | 7 2 |
+-------+-------+-------+
Metadata
Metadata
Assignees
Labels
No labels