Skip to content

Instantly share code, notes, and snippets.

@vito
Created November 23, 2008 02:37
Show Gist options
  • Save vito/28016 to your computer and use it in GitHub Desktop.
Save vito/28016 to your computer and use it in GitHub Desktop.
import Control.Monad (replicateM)
import Data.List (intersect, intercalate, (\\))
import Data.Char (digitToInt)
import System.Environment (getArgs)
import TestPJ (allTests)
type Grid = [[Maybe Int]]
type Box = [[Maybe Int]]
type Tile = Maybe Int
type Coord = (Int, Int)
pad :: Int -> a -> [a] -> [a]
pad n x xs | length xs >= n = xs
| otherwise = xs ++ (take (n - length xs) (repeat x))
instances :: (Eq a) => a -> [a] -> Int
instances m [] = 0
instances m (x:xs) | m == x = 1 + instances m xs
| otherwise = instances m xs
split :: Int -> [a] -> [[a]]
split n [] = []
split n xs = take n xs : split n (drop n xs)
uniques :: (Eq a) => [a] -> [a]
uniques xs = filter ((== 1) . (flip instances xs)) xs
nums :: [Tile]
nums = map Just [1..9]
coord :: Grid -> Coord -> Tile
coord g (x, y) = (g !! y) !! x
range :: [Int] -> [Int] -> [Coord]
range xs ys = ys >>= ((zip xs) . repeat)
coordinates :: [Coord]
coordinates = range [0..8] [0..8]
row :: Grid -> Int -> [Tile]
row g n = g !! n
rowCoords :: Int -> [Coord]
rowCoords n = (split 9 coordinates) !! n
col :: Grid -> Int -> [Tile]
col g n = map (!! n) g
colCoords :: Int -> [Coord]
colCoords n = map (!! n) (split 9 coordinates)
box :: Coord -> Grid -> Box
box (x, y) g | x `elem` [0..2] && y `elem` [0..2] = numRange [0..2] [0..2] g -- Box 1
| x `elem` [3..5] && y `elem` [0..2] = numRange [3..5] [0..2] g -- Box 2
| x `elem` [6..8] && y `elem` [0..2] = numRange [6..8] [0..2] g -- Box 3
| x `elem` [0..2] && y `elem` [3..5] = numRange [0..2] [3..5] g -- Box 4
| x `elem` [3..5] && y `elem` [3..5] = numRange [3..5] [3..5] g -- Box 5
| x `elem` [6..8] && y `elem` [3..5] = numRange [6..8] [3..5] g -- Box 6
| x `elem` [0..2] && y `elem` [6..8] = numRange [0..2] [6..8] g -- Box 7
| x `elem` [3..5] && y `elem` [6..8] = numRange [3..5] [6..8] g -- Box 8
| x `elem` [6..8] && y `elem` [6..8] = numRange [6..8] [6..8] g -- Box 9
boxCoords :: (Int, Int) -> [Coord]
boxCoords (x, y) | x `elem` [0..2] && y `elem` [0..2] = range [0..2] [0..2] -- Box 1
| x `elem` [3..5] && y `elem` [0..2] = range [3..5] [0..2] -- Box 2
| x `elem` [6..8] && y `elem` [0..2] = range [6..8] [0..2] -- Box 3
| x `elem` [0..2] && y `elem` [3..5] = range [0..2] [3..5] -- Box 4
| x `elem` [3..5] && y `elem` [3..5] = range [3..5] [3..5] -- Box 5
| x `elem` [6..8] && y `elem` [3..5] = range [6..8] [3..5] -- Box 6
| x `elem` [0..2] && y `elem` [6..8] = range [0..2] [6..8] -- Box 7
| x `elem` [3..5] && y `elem` [6..8] = range [3..5] [6..8] -- Box 8
| x `elem` [6..8] && y `elem` [6..8] = range [6..8] [6..8] -- Box 9
set :: Grid -> Coord -> Tile -> Grid
set g c v = split 9 $ map (\(x, y) -> if (x, y) == c
then v
else coord g (x, y)) coordinates
possibilities :: Grid -> Coord -> [Tile]
possibilities g (x, y) | coord g (x, y) /= Nothing = []
| otherwise = (hPossibilities y g) `intersect`
(vPossibilities x g) `intersect`
(boxPossibilities (box (x, y) g))
hPossibilities :: Int -> Grid -> [Tile]
hPossibilities x g = filter (not . (`elem` (g !! x))) nums
vPossibilities :: Int -> Grid -> [Tile]
vPossibilities y g = filter (not . (`elem` (map (!! y) g))) nums
boxPossibilities :: Box -> [Tile]
boxPossibilities b = filter (not . (`elem` (concat b))) nums
numRange :: [Int] -> [Int] -> Grid -> Grid
numRange xs ys g = map (flip map xs . (!!)) (map (g !!) ys)
done :: Grid -> Bool
done g = and $ map (not . (Nothing `elem`)) g
valid :: Grid -> Bool
valid g = valid_rows && valid_cols && valid_boxes
where
valid_rows = and $ map (null . (\\ nums)) g
valid_cols = and $ map (null . (\\ nums)) (map (col g) [0..8])
valid_boxes = (and $ map (null . (\\ nums)) (box (0, 0) g)) && -- Box 1
(and $ map (null . (\\ nums)) (box (3, 0) g)) && -- Box 2
(and $ map (null . (\\ nums)) (box (6, 0) g)) && -- Box 3
(and $ map (null . (\\ nums)) (box (0, 3) g)) && -- Box 4
(and $ map (null . (\\ nums)) (box (3, 3) g)) && -- Box 5
(and $ map (null . (\\ nums)) (box (6, 3) g)) && -- Box 6
(and $ map (null . (\\ nums)) (box (0, 6) g)) && -- Box 7
(and $ map (null . (\\ nums)) (box (3, 6) g)) && -- Box 8
(and $ map (null . (\\ nums)) (box (6, 6) g)) -- Box 9
solve :: Grid -> Coord -> Tile
solve g (x, y) | solved = coord g (x, y)
| onePossible = head coordChoices
| oneBox = head uniquesBox
| oneRow = head uniquesRow
| oneCol = head uniquesCol
| otherwise = Nothing
where
uniquesBox = uniques $ boxCoords (x, y) >>= possibilities g
uniquesRow = uniques $ rowCoords y >>= possibilities g
uniquesCol = uniques $ colCoords x >>= possibilities g
coordChoices = possibilities g (x, y)
onePossible = length coordChoices == 1
oneBox = length uniquesBox == 1 && (uniquesBox !! 0) `elem` coordChoices
oneCol = length uniquesCol == 1 && (uniquesCol !! 0) `elem` coordChoices
oneRow = length uniquesRow == 1 && (uniquesRow !! 0) `elem` coordChoices
solved = coord g (x, y) /= Nothing
guess :: Grid -> [Grid]
guess g = guessFirst g coordinates
where guessFirst :: Grid -> [Coord] -> [Grid]
guessFirst g [] = [g]
guessFirst g (c:cs) | guessable = map (set g c) possible
| otherwise = guessFirst g cs
where possible = possibilities g c
guessable = coord g c == Nothing && length possible > 0
solveLoop :: Grid -> Grid
solveLoop g = solveLoop' g []
where
solveLoop' g g' | done g = g
| g == g' = tryAll (guess g)
| otherwise = solveLoop' (split 9 $ map (solve g) coordinates) g
tryAll :: [Grid] -> Grid
tryAll gs = tryAll' gs []
where
tryAll' [] [g] = solveLoop g
tryAll' [g] [] = g
tryAll' [] (f:fs) | valid g = g
| otherwise = tryAll' [] fs
where g = solveLoop f
tryAll' (g:gs) fs | valid s = s
| otherwise = tryAll' gs (g : fs)
where s = solveLoopNoGuess g
solveLoopNoGuess :: Grid -> Grid
solveLoopNoGuess g = solveLoop' g []
where
solveLoop' g g' | done g = g
| g == g' = g
| otherwise = solveLoop' (split 9 $ map (solve g) coordinates) g
tile :: Maybe Int -> String
tile (Just x) = show x
tile (Nothing) = " "
solveGrid :: Grid -> IO ()
solveGrid = putStrLn . result
result :: Grid -> String
result g = unlines [prettyPrint g, "", "Solution:", prettyPrint s, "", "Valid: " ++ v]
where s = solveLoop g
v = if valid s then "Yes" else "No"
toGrid :: [String] -> Grid
toGrid = (map (map (\x -> if x `elem` " .X-0=_" then Nothing else Just (digitToInt x)))) . (map (pad 9 '.'))
prettyPrint :: Grid -> String
prettyPrint g = intercalate "\n" $ map (intercalate " | ") $ map (map tile) g
test :: IO ()
test = do mapM (\x -> do putStrLn $ (fst x) ++ ":"
(solveGrid . toGrid $ snd x)
putStrLn $ (pad 33 '-' "") ++ "\n") allTests
return ()
main = do args <- getArgs
if "test" `elem` args
then test
else do putStrLn "Type out the grid to solve (one of \" .X-0=_\" for empty tiles):"
grid <- replicateM 9 getLine
putStrLn "\nSolving:"
solveGrid . toGrid $ grid
Haskell $ ./sudoku test # Takes roughly 50 seconds.
tst1:
| 5 | | 1 | | | | |
4 | | | 6 | | 2 | | |
| 6 | | | | 8 | 1 | 7 |
7 | 4 | | 8 | | | | |
| | | | | | | |
| | | | | 3 | | 5 | 9
| 1 | 3 | 7 | | | | 2 |
| | | 4 | | 6 | | | 8
| | | | | 5 | | 9 |
Solution:
3 | 5 | 8 | 1 | 7 | 4 | 9 | 6 | 2
4 | 7 | 1 | 6 | 9 | 2 | 5 | 8 | 3
9 | 6 | 2 | 5 | 3 | 8 | 1 | 7 | 4
7 | 4 | 9 | 8 | 5 | 1 | 2 | 3 | 6
2 | 3 | 5 | 9 | 6 | 7 | 8 | 4 | 1
1 | 8 | 6 | 2 | 4 | 3 | 7 | 5 | 9
6 | 1 | 3 | 7 | 8 | 9 | 4 | 2 | 5
5 | 9 | 7 | 4 | 2 | 6 | 3 | 1 | 8
8 | 2 | 4 | 3 | 1 | 5 | 6 | 9 | 7
Valid: Yes
---------------------------------
tst2:
3 | | | | | 9 | | 5 |
| 6 | 7 | | 1 | | | |
2 | | | | | | 7 | |
| 7 | | 9 | | | | |
| 9 | | 4 | | 1 | | 3 |
| | | | | 6 | | 8 |
| | 4 | | | | | | 9
| | | | 6 | | 8 | 2 |
| 5 | | 3 | | | | | 1
Solution:
3 | 4 | 8 | 7 | 2 | 9 | 1 | 5 | 6
9 | 6 | 7 | 8 | 1 | 5 | 2 | 4 | 3
2 | 1 | 5 | 6 | 4 | 3 | 7 | 9 | 8
5 | 7 | 3 | 9 | 8 | 2 | 6 | 1 | 4
8 | 9 | 6 | 4 | 7 | 1 | 5 | 3 | 2
4 | 2 | 1 | 5 | 3 | 6 | 9 | 8 | 7
1 | 8 | 4 | 2 | 5 | 7 | 3 | 6 | 9
7 | 3 | 9 | 1 | 6 | 4 | 8 | 2 | 5
6 | 5 | 2 | 3 | 9 | 8 | 4 | 7 | 1
Valid: Yes
---------------------------------
tst3:
| | | | 8 | | 1 | 3 | 2
| | | | | | | |
6 | | | | 4 | 5 | | 7 | 9
| | 2 | 8 | | 7 | 6 | |
| | 1 | | | | 5 | |
| | 4 | 5 | | 1 | 9 | |
2 | 3 | | 6 | 1 | | | | 8
| | | | | | | |
7 | 9 | 6 | | 3 | | | |
Solution:
5 | 4 | 7 | 9 | 8 | 6 | 1 | 3 | 2
1 | 8 | 9 | 2 | 7 | 3 | 4 | 6 | 5
6 | 2 | 3 | 1 | 4 | 5 | 8 | 7 | 9
3 | 5 | 2 | 8 | 9 | 7 | 6 | 1 | 4
9 | 6 | 1 | 3 | 2 | 4 | 5 | 8 | 7
8 | 7 | 4 | 5 | 6 | 1 | 9 | 2 | 3
2 | 3 | 5 | 6 | 1 | 9 | 7 | 4 | 8
4 | 1 | 8 | 7 | 5 | 2 | 3 | 9 | 6
7 | 9 | 6 | 4 | 3 | 8 | 2 | 5 | 1
Valid: Yes
---------------------------------
tst4:
| | 9 | | | 3 | | | 2
| | | 4 | | 1 | | | 8
| | 5 | | | | | | 4
| 3 | | | 4 | | | 7 |
| 8 | | | 9 | | | 2 |
| 1 | | | 6 | | | 5 |
7 | | | | | | 6 | |
4 | | | 8 | | 7 | | |
3 | | | 2 | | | 1 | |
Solution:
1 | 4 | 9 | 5 | 8 | 3 | 7 | 6 | 2
2 | 6 | 3 | 4 | 7 | 1 | 5 | 9 | 8
8 | 7 | 5 | 6 | 2 | 9 | 3 | 1 | 4
5 | 3 | 2 | 1 | 4 | 8 | 9 | 7 | 6
6 | 8 | 7 | 3 | 9 | 5 | 4 | 2 | 1
9 | 1 | 4 | 7 | 6 | 2 | 8 | 5 | 3
7 | 2 | 1 | 9 | 3 | 4 | 6 | 8 | 5
4 | 5 | 6 | 8 | 1 | 7 | 2 | 3 | 9
3 | 9 | 8 | 2 | 5 | 6 | 1 | 4 | 7
Valid: Yes
---------------------------------
tst5:
| | 2 | 9 | 7 | 4 | | |
| | | | | | | 5 | 7
| | | | | | | |
| | 4 | | 5 | | | | 2
| | 9 | | 1 | | 6 | |
8 | | | | 3 | | 4 | |
| | | | | | | |
1 | 3 | | | | | | |
| | | 6 | 8 | 2 | 9 | |
Solution:
5 | 1 | 2 | 9 | 7 | 4 | 3 | 6 | 8
4 | 9 | 3 | 1 | 6 | 8 | 2 | 5 | 7
6 | 8 | 7 | 5 | 2 | 3 | 1 | 4 | 9
3 | 6 | 4 | 8 | 5 | 9 | 7 | 1 | 2
2 | 5 | 9 | 4 | 1 | 7 | 6 | 8 | 3
8 | 7 | 1 | 2 | 3 | 6 | 4 | 9 | 5
9 | 2 | 8 | 3 | 4 | 1 | 5 | 7 | 6
1 | 3 | 6 | 7 | 9 | 5 | 8 | 2 | 4
7 | 4 | 5 | 6 | 8 | 2 | 9 | 3 | 1
Valid: Yes
---------------------------------
tst8:
5 | | | 6 | | 2 | | |
| | | | | | | 6 |
| 6 | 2 | | | 3 | | 5 | 4
| 1 | | | | 8 | | |
| 4 | 8 | | | | 1 | 7 |
| | | 2 | | | | 3 |
4 | 9 | | 8 | | | 7 | 1 |
| 5 | | | | | | |
| | | 1 | | 4 | | | 6
Solution:
5 | 8 | 7 | 6 | 4 | 2 | 3 | 9 | 1
1 | 3 | 4 | 5 | 8 | 9 | 2 | 6 | 7
9 | 6 | 2 | 7 | 1 | 3 | 8 | 5 | 4
3 | 1 | 5 | 4 | 7 | 8 | 6 | 2 | 9
2 | 4 | 8 | 9 | 3 | 6 | 1 | 7 | 5
6 | 7 | 9 | 2 | 5 | 1 | 4 | 3 | 8
4 | 9 | 6 | 8 | 2 | 5 | 7 | 1 | 3
8 | 5 | 1 | 3 | 6 | 7 | 9 | 4 | 2
7 | 2 | 3 | 1 | 9 | 4 | 5 | 8 | 6
Valid: Yes
---------------------------------
tst9:
| 9 | 1 | | 2 | | | |
| | 6 | | 1 | | | 3 |
2 | | | | | 5 | | |
| | | | | 2 | 9 | | 4
| | | 1 | 7 | 6 | | |
6 | | 3 | 4 | | | | |
| | | 9 | | | | | 7
| 3 | | | 5 | | 8 | |
| | | | 8 | | 2 | 5 |
Solution:
3 | 9 | 1 | 6 | 2 | 7 | 4 | 8 | 5
4 | 5 | 6 | 8 | 1 | 9 | 7 | 3 | 2
2 | 7 | 8 | 3 | 4 | 5 | 6 | 1 | 9
8 | 1 | 7 | 5 | 3 | 2 | 9 | 6 | 4
9 | 4 | 5 | 1 | 7 | 6 | 3 | 2 | 8
6 | 2 | 3 | 4 | 9 | 8 | 5 | 7 | 1
5 | 8 | 2 | 9 | 6 | 3 | 1 | 4 | 7
7 | 3 | 4 | 2 | 5 | 1 | 8 | 9 | 6
1 | 6 | 9 | 7 | 8 | 4 | 2 | 5 | 3
Valid: Yes
---------------------------------
tst10:
8 | 5 | | | | | | | 2
| | | | | 1 | 6 | 4 |
2 | | | 4 | 7 | | | | 8
3 | | 8 | 6 | | | 7 | |
| 6 | | | | | | |
| 7 | 9 | | 8 | | | 5 |
| | | | | 2 | | | 4
| | | 5 | | 9 | 3 | 6 |
9 | | | | | | | |
Solution:
8 | 5 | 4 | 9 | 3 | 6 | 1 | 7 | 2
7 | 9 | 3 | 8 | 2 | 1 | 6 | 4 | 5
2 | 1 | 6 | 4 | 7 | 5 | 9 | 3 | 8
3 | 2 | 8 | 6 | 5 | 4 | 7 | 1 | 9
5 | 6 | 1 | 2 | 9 | 7 | 4 | 8 | 3
4 | 7 | 9 | 1 | 8 | 3 | 2 | 5 | 6
6 | 3 | 5 | 7 | 1 | 2 | 8 | 9 | 4
1 | 8 | 2 | 5 | 4 | 9 | 3 | 6 | 7
9 | 4 | 7 | 3 | 6 | 8 | 5 | 2 | 1
Valid: Yes
---------------------------------
tst11:
| | | 4 | | 2 | | |
7 | 8 | 4 | | 1 | | | |
5 | | | | | 6 | | | 3
2 | | | 8 | 3 | | | | 1
| | | | | 4 | | 6 |
| 5 | | | | | | 9 |
| | | | | 1 | | |
| 9 | | 6 | | | | |
1 | 6 | 5 | 7 | | | 9 | 4 |
Solution:
6 | 3 | 9 | 4 | 8 | 2 | 1 | 5 | 7
7 | 8 | 4 | 3 | 1 | 5 | 6 | 2 | 9
5 | 1 | 2 | 9 | 7 | 6 | 4 | 8 | 3
2 | 4 | 6 | 8 | 3 | 9 | 5 | 7 | 1
9 | 7 | 3 | 1 | 5 | 4 | 8 | 6 | 2
8 | 5 | 1 | 2 | 6 | 7 | 3 | 9 | 4
4 | 2 | 8 | 5 | 9 | 1 | 7 | 3 | 6
3 | 9 | 7 | 6 | 4 | 8 | 2 | 1 | 5
1 | 6 | 5 | 7 | 2 | 3 | 9 | 4 | 8
Valid: Yes
---------------------------------
tst12:
| | | 2 | | 7 | | |
| | | 1 | 8 | 9 | | |
| 9 | | | | | | 3 |
| | 6 | | | | 1 | |
5 | | | | | | | | 3
4 | 1 | 3 | | | | 5 | 8 | 9
| 4 | | 8 | | 3 | | 6 |
| 8 | 7 | | | | 3 | 9 |
| | 5 | 4 | | 6 | 7 | |
Solution:
8 | 6 | 4 | 2 | 3 | 7 | 9 | 5 | 1
3 | 5 | 2 | 1 | 8 | 9 | 4 | 7 | 6
7 | 9 | 1 | 6 | 4 | 5 | 8 | 3 | 2
9 | 2 | 6 | 3 | 5 | 8 | 1 | 4 | 7
5 | 7 | 8 | 9 | 1 | 4 | 6 | 2 | 3
4 | 1 | 3 | 7 | 6 | 2 | 5 | 8 | 9
1 | 4 | 9 | 8 | 7 | 3 | 2 | 6 | 5
6 | 8 | 7 | 5 | 2 | 1 | 3 | 9 | 4
2 | 3 | 5 | 4 | 9 | 6 | 7 | 1 | 8
Valid: Yes
---------------------------------
tst13:
2 | | | | | | | |
9 | | 3 | 2 | 5 | | | 4 |
5 | | | | | 9 | 6 | | 1
| | | 4 | 6 | 2 | | | 3
| | | | | | | |
| | | 5 | 1 | 3 | | | 9
8 | | | | | 1 | 3 | | 7
3 | | 4 | 9 | 7 | | | 8 |
1 | | | | | | | |
Solution:
2 | 7 | 6 | 1 | 8 | 4 | 9 | 3 | 5
9 | 1 | 3 | 2 | 5 | 6 | 7 | 4 | 8
5 | 4 | 8 | 7 | 3 | 9 | 6 | 2 | 1
7 | 5 | 9 | 4 | 6 | 2 | 8 | 1 | 3
4 | 3 | 1 | 8 | 9 | 7 | 2 | 5 | 6
6 | 8 | 2 | 5 | 1 | 3 | 4 | 7 | 9
8 | 2 | 5 | 6 | 4 | 1 | 3 | 9 | 7
3 | 6 | 4 | 9 | 7 | 5 | 1 | 8 | 2
1 | 9 | 7 | 3 | 2 | 8 | 5 | 6 | 4
Valid: Yes
---------------------------------
tst14:
| | | | | | | |
| | | | | | 1 | 4 | 7
| | | 7 | 3 | | 9 | | 6
| | 9 | | | 6 | | 1 |
| | 8 | | 7 | 3 | 6 | |
| | | 9 | 2 | | 5 | |
| 3 | 7 | | 5 | 8 | | 9 |
| 2 | | 1 | | | 3 | |
| 1 | 4 | | | | | |
Solution:
5 | 7 | 6 | 4 | 1 | 9 | 8 | 3 | 2
3 | 9 | 2 | 6 | 8 | 5 | 1 | 4 | 7
4 | 8 | 1 | 7 | 3 | 2 | 9 | 5 | 6
2 | 5 | 9 | 8 | 4 | 6 | 7 | 1 | 3
1 | 4 | 8 | 5 | 7 | 3 | 6 | 2 | 9
7 | 6 | 3 | 9 | 2 | 1 | 5 | 8 | 4
6 | 3 | 7 | 2 | 5 | 8 | 4 | 9 | 1
9 | 2 | 5 | 1 | 6 | 4 | 3 | 7 | 8
8 | 1 | 4 | 3 | 9 | 7 | 2 | 6 | 5
Valid: Yes
---------------------------------
xwing1:
| | | 1 | 3 | | | | 5
| 4 | | | | | 2 | |
8 | | | 9 | | | | |
| | | | 5 | | 9 | |
| | 2 | | | | 4 | |
| | 3 | | 6 | | | |
| | | | | 3 | | | 6
| | 5 | | | | | 1 |
7 | | | | 2 | 8 | | |
Solution:
6 | 2 | 9 | 1 | 3 | 7 | 8 | 4 | 5
3 | 4 | 1 | 6 | 8 | 5 | 2 | 7 | 9
8 | 5 | 7 | 9 | 4 | 2 | 6 | 3 | 1
4 | 7 | 8 | 3 | 5 | 1 | 9 | 6 | 2
1 | 6 | 2 | 8 | 7 | 9 | 4 | 5 | 3
5 | 9 | 3 | 2 | 6 | 4 | 1 | 8 | 7
9 | 8 | 4 | 7 | 1 | 3 | 5 | 2 | 6
2 | 3 | 5 | 4 | 9 | 6 | 7 | 1 | 8
7 | 1 | 6 | 5 | 2 | 8 | 3 | 9 | 4
Valid: Yes
---------------------------------
xwing2:
| | 1 | 8 | | | 6 | |
5 | | | | | | | |
| | | 7 | 9 | | | |
| 7 | 3 | | | | | |
| 8 | | 9 | | 4 | | 1 |
| | | | | | 2 | 9 |
| | | | 1 | 5 | | |
| | | | | | | | 3
| | 6 | | | 2 | 4 | |
Solution:
7 | 9 | 1 | 8 | 5 | 3 | 6 | 4 | 2
5 | 3 | 8 | 2 | 4 | 6 | 9 | 7 | 1
6 | 4 | 2 | 7 | 9 | 1 | 8 | 3 | 5
9 | 7 | 3 | 1 | 2 | 8 | 5 | 6 | 4
2 | 8 | 5 | 9 | 6 | 4 | 3 | 1 | 7
1 | 6 | 4 | 5 | 3 | 7 | 2 | 9 | 8
3 | 2 | 9 | 4 | 1 | 5 | 7 | 8 | 6
4 | 5 | 7 | 6 | 8 | 9 | 1 | 2 | 3
8 | 1 | 6 | 3 | 7 | 2 | 4 | 5 | 9
Valid: Yes
---------------------------------
xwing3:
| 8 | | | | 5 | | | 3
7 | | | 2 | | | | |
| | | | | | 6 | |
| | | | 4 | | 1 | | 8
| | 6 | | | | 9 | |
2 | | 3 | | 7 | | | |
| | 9 | | | | | |
| | | | | 1 | | | 4
5 | | | 8 | | | | 2 |
Solution:
6 | 8 | 4 | 7 | 1 | 5 | 2 | 9 | 3
7 | 9 | 5 | 2 | 3 | 6 | 4 | 8 | 1
1 | 3 | 2 | 4 | 8 | 9 | 6 | 5 | 7
9 | 5 | 7 | 6 | 4 | 2 | 1 | 3 | 8
8 | 4 | 6 | 1 | 5 | 3 | 9 | 7 | 2
2 | 1 | 3 | 9 | 7 | 8 | 5 | 4 | 6
4 | 6 | 9 | 3 | 2 | 7 | 8 | 1 | 5
3 | 2 | 8 | 5 | 9 | 1 | 7 | 6 | 4
5 | 7 | 1 | 8 | 6 | 4 | 3 | 2 | 9
Valid: Yes
---------------------------------
xwing4:
| | 6 | | | | | |
1 | | | | | | | | 3
| 4 | | | 7 | | | 2 |
| 2 | | 3 | | | | | 9
| | | 1 | 4 | 5 | | |
4 | | | | | 8 | | 6 |
| 7 | | | 9 | | | 8 |
3 | | | | | | | | 1
| | | | | | 4 | |
Solution:
7 | 5 | 6 | 2 | 3 | 9 | 8 | 1 | 4
1 | 8 | 2 | 6 | 5 | 4 | 7 | 9 | 3
9 | 4 | 3 | 8 | 7 | 1 | 5 | 2 | 6
8 | 2 | 5 | 3 | 6 | 7 | 1 | 4 | 9
6 | 3 | 9 | 1 | 4 | 5 | 2 | 7 | 8
4 | 1 | 7 | 9 | 2 | 8 | 3 | 6 | 5
5 | 7 | 1 | 4 | 9 | 3 | 6 | 8 | 2
3 | 6 | 4 | 7 | 8 | 2 | 9 | 5 | 1
2 | 9 | 8 | 5 | 1 | 6 | 4 | 3 | 7
Valid: Yes
---------------------------------
swordfish1:
| | | 4 | 7 | | 6 | |
| | 4 | | | | 3 | | 5
9 | 2 | | | | | | |
| 3 | 1 | | | | | |
| | | 9 | 3 | 6 | | |
| | | | | | 2 | 8 |
| | | | | | | 1 | 6
4 | | 8 | | | | 9 | |
| | 7 | | 5 | 2 | | |
Solution:
3 | 1 | 5 | 4 | 7 | 9 | 6 | 2 | 8
7 | 8 | 4 | 2 | 6 | 1 | 3 | 9 | 5
9 | 2 | 6 | 5 | 8 | 3 | 1 | 4 | 7
5 | 3 | 1 | 7 | 2 | 8 | 4 | 6 | 9
8 | 4 | 2 | 9 | 3 | 6 | 5 | 7 | 1
6 | 7 | 9 | 1 | 4 | 5 | 2 | 8 | 3
2 | 5 | 3 | 8 | 9 | 4 | 7 | 1 | 6
4 | 6 | 8 | 3 | 1 | 7 | 9 | 5 | 2
1 | 9 | 7 | 6 | 5 | 2 | 8 | 3 | 4
Valid: Yes
---------------------------------
swordfish2:
| 1 | | | | | 8 | | 3
5 | | | | 9 | 6 | | |
| | 4 | | | | | 6 |
9 | | | 4 | | 3 | | |
| 2 | | | | | | 1 |
| | | 8 | | 5 | | | 7
| 6 | | | | | 4 | |
| | | 1 | 7 | | | | 5
1 | | 3 | | | | | 2 |
Solution:
7 | 1 | 6 | 2 | 5 | 4 | 8 | 9 | 3
5 | 8 | 2 | 3 | 9 | 6 | 1 | 7 | 4
3 | 9 | 4 | 7 | 8 | 1 | 5 | 6 | 2
9 | 7 | 8 | 4 | 1 | 3 | 2 | 5 | 6
4 | 2 | 5 | 9 | 6 | 7 | 3 | 1 | 8
6 | 3 | 1 | 8 | 2 | 5 | 9 | 4 | 7
2 | 6 | 7 | 5 | 3 | 9 | 4 | 8 | 1
8 | 4 | 9 | 1 | 7 | 2 | 6 | 3 | 5
1 | 5 | 3 | 6 | 4 | 8 | 7 | 2 | 9
Valid: Yes
---------------------------------
swordfish3:
| | 8 | | 9 | | 1 | | 5
| 3 | 1 | 6 | | | | |
4 | | | | | | | |
| | | | | 5 | | |
| | 3 | | 1 | | 6 | |
| | | 4 | | | | |
| | | | | | | | 7
| | | | | 7 | 4 | 2 |
8 | | 9 | | 6 | | 3 | |
Solution:
7 | 6 | 8 | 3 | 9 | 2 | 1 | 4 | 5
5 | 3 | 1 | 6 | 4 | 8 | 7 | 9 | 2
4 | 9 | 2 | 5 | 7 | 1 | 8 | 6 | 3
9 | 4 | 6 | 7 | 3 | 5 | 2 | 1 | 8
2 | 5 | 3 | 8 | 1 | 9 | 6 | 7 | 4
1 | 8 | 7 | 4 | 2 | 6 | 5 | 3 | 9
6 | 2 | 4 | 1 | 5 | 3 | 9 | 8 | 7
3 | 1 | 5 | 9 | 8 | 7 | 4 | 2 | 6
8 | 7 | 9 | 2 | 6 | 4 | 3 | 5 | 1
Valid: Yes
---------------------------------
swordfish4:
| 8 | | | | | 6 | 1 |
1 | | | | 9 | | 2 | |
2 | | | | | 5 | | | 4
9 | | | | | | | 7 |
| | | 3 | 2 | 6 | | |
| 4 | | | | | | | 1
6 | | | 8 | | | | | 3
| | 3 | | 1 | | | | 5
| 1 | 7 | | | | | 9 |
Solution:
5 | 8 | 4 | 7 | 3 | 2 | 6 | 1 | 9
1 | 3 | 6 | 4 | 9 | 8 | 2 | 5 | 7
2 | 7 | 9 | 1 | 6 | 5 | 8 | 3 | 4
9 | 6 | 8 | 5 | 4 | 1 | 3 | 7 | 2
7 | 5 | 1 | 3 | 2 | 6 | 9 | 4 | 8
3 | 4 | 2 | 9 | 8 | 7 | 5 | 6 | 1
6 | 9 | 5 | 8 | 7 | 4 | 1 | 2 | 3
4 | 2 | 3 | 6 | 1 | 9 | 7 | 8 | 5
8 | 1 | 7 | 2 | 5 | 3 | 4 | 9 | 6
Valid: Yes
---------------------------------
swordfish5:
| | 2 | | | 5 | 3 | 7 |
7 | | | 9 | | | | | 8
6 | 1 | | | | | | |
| | 8 | | 1 | | | |
| 7 | | | 3 | | | 5 |
| | | | 2 | | 4 | |
| | | | | | | 3 | 2
5 | | | | | 6 | | | 7
| 4 | 1 | 7 | | | 9 | |
Solution:
8 | 9 | 2 | 1 | 6 | 5 | 3 | 7 | 4
7 | 3 | 5 | 9 | 4 | 2 | 6 | 1 | 8
6 | 1 | 4 | 3 | 7 | 8 | 5 | 2 | 9
3 | 2 | 8 | 5 | 1 | 4 | 7 | 9 | 6
4 | 7 | 6 | 8 | 3 | 9 | 2 | 5 | 1
1 | 5 | 9 | 6 | 2 | 7 | 4 | 8 | 3
9 | 6 | 7 | 4 | 5 | 1 | 8 | 3 | 2
5 | 8 | 3 | 2 | 9 | 6 | 1 | 4 | 7
2 | 4 | 1 | 7 | 8 | 3 | 9 | 6 | 5
Valid: Yes
---------------------------------
swordfish6:
8 | | | | | | | 5 | 9
| 6 | | | 2 | | | | 4
5 | | | | | 1 | 7 | |
| 5 | | | | | 3 | |
| | | 4 | 9 | 7 | | |
| | 2 | | | | | 6 |
| | 8 | 5 | | | | | 3
7 | | | | 6 | | | 8 |
4 | 3 | | | | | | | 1
Solution:
8 | 7 | 1 | 6 | 3 | 4 | 2 | 5 | 9
3 | 6 | 9 | 7 | 2 | 5 | 8 | 1 | 4
5 | 2 | 4 | 9 | 8 | 1 | 7 | 3 | 6
9 | 5 | 7 | 2 | 1 | 6 | 3 | 4 | 8
6 | 8 | 3 | 4 | 9 | 7 | 1 | 2 | 5
1 | 4 | 2 | 3 | 5 | 8 | 9 | 6 | 7
2 | 1 | 8 | 5 | 4 | 9 | 6 | 7 | 3
7 | 9 | 5 | 1 | 6 | 3 | 4 | 8 | 2
4 | 3 | 6 | 8 | 7 | 2 | 5 | 9 | 1
Valid: Yes
---------------------------------
swordfish7:
5 | | | | | | | | 4
| 8 | 9 | | | 3 | | 7 |
| 6 | 7 | 2 | | | | |
| | 3 | | 7 | | | |
| 2 | | | 6 | | | 9 |
| | | | 1 | | 8 | |
| | | | | 9 | 4 | 3 |
| 4 | | 8 | | | 6 | 5 |
8 | | | | | | | | 1
Solution:
5 | 3 | 2 | 7 | 8 | 6 | 9 | 1 | 4
1 | 8 | 9 | 5 | 4 | 3 | 2 | 7 | 6
4 | 6 | 7 | 2 | 9 | 1 | 3 | 8 | 5
6 | 1 | 3 | 9 | 7 | 8 | 5 | 4 | 2
7 | 2 | 8 | 4 | 6 | 5 | 1 | 9 | 3
9 | 5 | 4 | 3 | 1 | 2 | 8 | 6 | 7
2 | 7 | 6 | 1 | 5 | 9 | 4 | 3 | 8
3 | 4 | 1 | 8 | 2 | 7 | 6 | 5 | 9
8 | 9 | 5 | 6 | 3 | 4 | 7 | 2 | 1
Valid: Yes
---------------------------------
rubylips1:
| | | | 4 | | | 3 |
9 | 8 | | 6 | | 1 | | |
| | | | | | 2 | |
| | | | | | | | 1
| | 4 | | 5 | | 7 | |
6 | | | | | | | |
| | 5 | | | | | |
| | | 9 | | 8 | | 7 | 6
| 7 | | | 3 | | | |
Solution:
2 | 6 | 7 | 5 | 4 | 9 | 1 | 3 | 8
9 | 8 | 3 | 6 | 2 | 1 | 4 | 5 | 7
5 | 4 | 1 | 7 | 8 | 3 | 2 | 6 | 9
7 | 5 | 8 | 3 | 9 | 2 | 6 | 4 | 1
3 | 1 | 4 | 8 | 5 | 6 | 7 | 9 | 2
6 | 2 | 9 | 1 | 7 | 4 | 3 | 8 | 5
1 | 9 | 5 | 4 | 6 | 7 | 8 | 2 | 3
4 | 3 | 2 | 9 | 1 | 8 | 5 | 7 | 6
8 | 7 | 6 | 2 | 3 | 5 | 9 | 1 | 4
Valid: Yes
---------------------------------
rubylips2:
| | | | 3 | | | |
| 2 | | 5 | | 1 | | |
4 | | | | | | 9 | 7 |
| | | | | | | | 5
| | 8 | | 7 | | 6 | |
3 | | | | | | | |
| 5 | 9 | | | | | | 1
| | | 6 | | 4 | | 3 |
| | | | 8 | | | |
Solution:
9 | 8 | 6 | 4 | 3 | 7 | 1 | 5 | 2
7 | 2 | 3 | 5 | 9 | 1 | 4 | 6 | 8
4 | 1 | 5 | 2 | 6 | 8 | 9 | 7 | 3
2 | 6 | 7 | 1 | 4 | 9 | 3 | 8 | 5
5 | 9 | 8 | 3 | 7 | 2 | 6 | 1 | 4
3 | 4 | 1 | 8 | 5 | 6 | 2 | 9 | 7
6 | 5 | 9 | 7 | 2 | 3 | 8 | 4 | 1
8 | 7 | 2 | 6 | 1 | 4 | 5 | 3 | 9
1 | 3 | 4 | 9 | 8 | 5 | 7 | 2 | 6
Valid: Yes
---------------------------------
rubylips3:
| | | | | 9 | | |
| | | | 1 | 4 | 7 | |
| | 2 | | | | | |
7 | | | | | | | 8 | 6
5 | | | | 3 | | | | 2
9 | 4 | | | | | | | 1
| | | | | | 4 | |
| | 6 | 2 | 5 | | | |
| | | 8 | | | | |
Solution:
8 | 1 | 4 | 7 | 2 | 9 | 6 | 3 | 5
6 | 5 | 9 | 3 | 1 | 4 | 7 | 2 | 8
3 | 7 | 2 | 5 | 6 | 8 | 1 | 9 | 4
7 | 2 | 1 | 4 | 9 | 5 | 3 | 8 | 6
5 | 6 | 8 | 1 | 3 | 7 | 9 | 4 | 2
9 | 4 | 3 | 6 | 8 | 2 | 5 | 7 | 1
2 | 8 | 5 | 9 | 7 | 1 | 4 | 6 | 3
4 | 9 | 6 | 2 | 5 | 3 | 8 | 1 | 7
1 | 3 | 7 | 8 | 4 | 6 | 2 | 5 | 9
Valid: Yes
---------------------------------
rubylips4:
| 2 | | | | | | |
| | | 6 | | | | | 3
| 7 | 4 | | 8 | | | |
| | | | | 3 | | | 2
| 8 | | | 4 | | | 1 |
6 | | | 5 | | | | |
| | | | 1 | | 7 | 8 |
5 | | | | | 9 | | |
| | | | | | | 4 |
Solution:
1 | 2 | 6 | 4 | 3 | 7 | 9 | 5 | 8
8 | 9 | 5 | 6 | 2 | 1 | 4 | 7 | 3
3 | 7 | 4 | 9 | 8 | 5 | 1 | 2 | 6
4 | 5 | 7 | 1 | 9 | 3 | 8 | 6 | 2
9 | 8 | 3 | 2 | 4 | 6 | 5 | 1 | 7
6 | 1 | 2 | 5 | 7 | 8 | 3 | 9 | 4
2 | 6 | 9 | 3 | 1 | 4 | 7 | 8 | 5
5 | 4 | 8 | 7 | 6 | 9 | 2 | 3 | 1
7 | 3 | 1 | 8 | 5 | 2 | 6 | 4 | 9
Valid: Yes
---------------------------------
rubylips5:
| | | | | 9 | 7 | |
| 1 | | | | | 9 | |
4 | | | | 5 | 3 | | 2 |
| | | | | 7 | | |
| 3 | | | | | | 4 |
| | | 8 | | | | |
| 6 | | 4 | 1 | | | | 2
| | 9 | | | | | 5 |
| | 8 | 6 | | | | |
Solution:
3 | 8 | 5 | 2 | 6 | 9 | 7 | 1 | 4
6 | 1 | 2 | 7 | 8 | 4 | 9 | 3 | 5
4 | 9 | 7 | 1 | 5 | 3 | 6 | 2 | 8
9 | 2 | 6 | 5 | 4 | 7 | 3 | 8 | 1
8 | 3 | 1 | 9 | 2 | 6 | 5 | 4 | 7
5 | 7 | 4 | 8 | 3 | 1 | 2 | 6 | 9
7 | 6 | 3 | 4 | 1 | 5 | 8 | 9 | 2
2 | 4 | 9 | 3 | 7 | 8 | 1 | 5 | 6
1 | 5 | 8 | 6 | 9 | 2 | 4 | 7 | 3
Valid: Yes
---------------------------------
rubylips6:
| | 9 | 6 | | | | 5 |
6 | | | | | | | |
3 | | | | 2 | 1 | | 8 |
| | | | | 5 | | |
| 7 | | | | | | 2 |
| | | 9 | | | | |
| 8 | | 5 | 6 | | | | 3
| | | | | | | | 4
| 1 | | | | 8 | 7 | |
Solution:
1 | 2 | 9 | 6 | 8 | 3 | 4 | 5 | 7
6 | 4 | 8 | 7 | 5 | 9 | 1 | 3 | 2
3 | 5 | 7 | 4 | 2 | 1 | 9 | 8 | 6
8 | 9 | 3 | 2 | 7 | 5 | 6 | 4 | 1
4 | 7 | 1 | 8 | 3 | 6 | 5 | 2 | 9
5 | 6 | 2 | 9 | 1 | 4 | 3 | 7 | 8
9 | 8 | 4 | 5 | 6 | 7 | 2 | 1 | 3
7 | 3 | 5 | 1 | 9 | 2 | 8 | 6 | 4
2 | 1 | 6 | 3 | 4 | 8 | 7 | 9 | 5
Valid: Yes
---------------------------------
rubylips7:
| | | | | | 6 | | 3
| | | | 4 | | 2 | |
| 5 | | 9 | 7 | | | | 8
| | | 1 | | | | |
| 9 | | | | | | 4 |
| | | | | 3 | | |
1 | | | | 9 | 4 | | 7 |
| | 8 | | 5 | | | |
6 | | 4 | | | | | |
Solution:
7 | 4 | 2 | 5 | 1 | 8 | 6 | 9 | 3
8 | 1 | 9 | 3 | 4 | 6 | 2 | 5 | 7
3 | 5 | 6 | 9 | 7 | 2 | 4 | 1 | 8
4 | 6 | 7 | 1 | 8 | 9 | 5 | 3 | 2
2 | 9 | 3 | 7 | 6 | 5 | 8 | 4 | 1
5 | 8 | 1 | 4 | 2 | 3 | 7 | 6 | 9
1 | 2 | 5 | 8 | 9 | 4 | 3 | 7 | 6
9 | 3 | 8 | 6 | 5 | 7 | 1 | 2 | 4
6 | 7 | 4 | 2 | 3 | 1 | 9 | 8 | 5
Valid: Yes
---------------------------------
rubylips8:
| | 8 | | 4 | | | | 5
| | 6 | 3 | | | | |
7 | 2 | | | | | | |
5 | | | 1 | | | | |
3 | | | | | | | | 4
| | | | | 6 | | | 8
| | | | | | | 1 | 3
| | | | | 5 | 9 | |
4 | | | | 7 | | 2 | |
Solution:
1 | 3 | 8 | 7 | 4 | 9 | 6 | 2 | 5
9 | 4 | 6 | 3 | 5 | 2 | 8 | 7 | 1
7 | 2 | 5 | 6 | 1 | 8 | 4 | 3 | 9
5 | 6 | 4 | 1 | 8 | 3 | 7 | 9 | 2
3 | 8 | 9 | 5 | 2 | 7 | 1 | 6 | 4
2 | 7 | 1 | 4 | 9 | 6 | 3 | 5 | 8
8 | 9 | 7 | 2 | 6 | 4 | 5 | 1 | 3
6 | 1 | 2 | 8 | 3 | 5 | 9 | 4 | 7
4 | 5 | 3 | 9 | 7 | 1 | 2 | 8 | 6
Valid: Yes
---------------------------------
rubylips9:
| | | | | | | 6 |
1 | | | 9 | | 4 | | |
| 3 | | 7 | | | 8 | |
| | 6 | | | | 9 | |
| 8 | | | 3 | | | 7 |
| | 2 | | | | 5 | |
| | 9 | | | 2 | | 4 |
| | | 1 | | 5 | | | 3
| 7 | | | | | | |
Solution:
8 | 9 | 7 | 2 | 5 | 3 | 1 | 6 | 4
1 | 6 | 5 | 9 | 8 | 4 | 3 | 2 | 7
2 | 3 | 4 | 7 | 6 | 1 | 8 | 5 | 9
3 | 5 | 6 | 4 | 2 | 7 | 9 | 8 | 1
9 | 8 | 1 | 5 | 3 | 6 | 4 | 7 | 2
7 | 4 | 2 | 8 | 1 | 9 | 5 | 3 | 6
5 | 1 | 9 | 3 | 7 | 2 | 6 | 4 | 8
6 | 2 | 8 | 1 | 4 | 5 | 7 | 9 | 3
4 | 7 | 3 | 6 | 9 | 8 | 2 | 1 | 5
Valid: Yes
---------------------------------
rubylips10:
| | | | | | | 7 |
4 | | | | 9 | | 1 | |
| | 3 | 6 | | 2 | | |
| 5 | | | | | 6 | 3 |
| | | | 8 | | | |
| 1 | 9 | | | | | 2 |
| | | 4 | | 3 | 5 | |
| | 2 | | 1 | | | | 8
| 7 | | | | | | |
Solution:
8 | 6 | 5 | 1 | 3 | 4 | 9 | 7 | 2
4 | 2 | 7 | 5 | 9 | 8 | 1 | 6 | 3
1 | 9 | 3 | 6 | 7 | 2 | 4 | 8 | 5
2 | 5 | 8 | 9 | 4 | 7 | 6 | 3 | 1
6 | 3 | 4 | 2 | 8 | 1 | 7 | 5 | 9
7 | 1 | 9 | 3 | 6 | 5 | 8 | 2 | 4
9 | 8 | 6 | 4 | 2 | 3 | 5 | 1 | 7
5 | 4 | 2 | 7 | 1 | 6 | 3 | 9 | 8
3 | 7 | 1 | 8 | 5 | 9 | 2 | 4 | 6
Valid: Yes
---------------------------------
solverVH1:
| | 8 | | 6 | | 4 | |
| 3 | | | | | | 7 |
4 | | | 8 | | 1 | | | 3
| | 7 | 4 | | 9 | 6 | |
| | | | | | | |
| | 2 | 3 | | 6 | 5 | |
9 | | | 6 | | 8 | | | 4
| 2 | | | | | | 9 |
| | 4 | | 2 | | 7 | |
Solution:
7 | 5 | 8 | 2 | 6 | 3 | 4 | 1 | 9
2 | 3 | 1 | 5 | 9 | 4 | 8 | 7 | 6
4 | 6 | 9 | 8 | 7 | 1 | 2 | 5 | 3
5 | 8 | 7 | 4 | 1 | 9 | 6 | 3 | 2
6 | 4 | 3 | 7 | 5 | 2 | 9 | 8 | 1
1 | 9 | 2 | 3 | 8 | 6 | 5 | 4 | 7
9 | 7 | 5 | 6 | 3 | 8 | 1 | 2 | 4
8 | 2 | 6 | 1 | 4 | 7 | 3 | 9 | 5
3 | 1 | 4 | 9 | 2 | 5 | 7 | 6 | 8
Valid: Yes
---------------------------------
indp1:
6 | 2 | 5 | 7 | | 3 | | |
8 | 7 | 3 | | | | | 4 |
| | | | | | | | 3
3 | | 8 | | | | 2 | |
| 9 | | | | 5 | | |
| 4 | | | | | 8 | |
| | 6 | | | | | |
4 | 3 | 1 | | | 7 | 9 | 6 |
| 5 | | | 2 | 1 | | 3 |
Solution:
6 | 2 | 5 | 7 | 4 | 3 | 1 | 8 | 9
8 | 7 | 3 | 9 | 1 | 2 | 6 | 4 | 5
9 | 1 | 4 | 5 | 6 | 8 | 7 | 2 | 3
3 | 6 | 8 | 1 | 7 | 9 | 2 | 5 | 4
1 | 9 | 2 | 4 | 8 | 5 | 3 | 7 | 6
5 | 4 | 7 | 2 | 3 | 6 | 8 | 9 | 1
2 | 8 | 6 | 3 | 9 | 4 | 5 | 1 | 7
4 | 3 | 1 | 8 | 5 | 7 | 9 | 6 | 2
7 | 5 | 9 | 6 | 2 | 1 | 4 | 3 | 8
Valid: Yes
---------------------------------
gordon1:
| | | | | | 1 | |
4 | | | | | | | |
| 2 | | | | | | |
| | | | 5 | | 6 | | 4
| | 8 | | | | 3 | |
| | 1 | | 9 | | | |
3 | | | 4 | | | 2 | |
| 5 | | 1 | | | | |
| | | 8 | | 7 | | |
Solution:
9 | 8 | 7 | 6 | 4 | 2 | 1 | 5 | 3
4 | 6 | 3 | 5 | 8 | 1 | 9 | 2 | 7
1 | 2 | 5 | 9 | 7 | 3 | 4 | 6 | 8
7 | 9 | 2 | 3 | 5 | 8 | 6 | 1 | 4
5 | 4 | 8 | 7 | 1 | 6 | 3 | 9 | 2
6 | 3 | 1 | 2 | 9 | 4 | 8 | 7 | 5
3 | 7 | 9 | 4 | 6 | 5 | 2 | 8 | 1
8 | 5 | 4 | 1 | 2 | 9 | 7 | 3 | 6
2 | 1 | 6 | 8 | 3 | 7 | 5 | 4 | 9
Valid: Yes
---------------------------------
Haskell $
Haskell $ ./sudoku
Type out the grid to solve (one of " .X-0=_" for empty tiles):
1....7.9
.3..2...8
..96..5
..53..9
.1..8...2
6....4
3......1
.4......7
..7...3
Solving:
1 | | | | | 7 | | 9 |
| 3 | | | 2 | | | | 8
| | 9 | 6 | | | 5 | |
| | 5 | 3 | | | 9 | |
| 1 | | | 8 | | | | 2
6 | | | | | 4 | | |
3 | | | | | | | 1 |
| 4 | | | | | | | 7
| | 7 | | | | 3 | |
Solution:
1 | 6 | 2 | 8 | 5 | 7 | 4 | 9 | 3
5 | 3 | 4 | 1 | 2 | 9 | 6 | 7 | 8
7 | 8 | 9 | 6 | 4 | 3 | 5 | 2 | 1
4 | 7 | 5 | 3 | 1 | 2 | 9 | 8 | 6
9 | 1 | 3 | 5 | 8 | 6 | 7 | 4 | 2
6 | 2 | 8 | 7 | 9 | 4 | 1 | 3 | 5
3 | 5 | 6 | 4 | 7 | 8 | 2 | 1 | 9
2 | 4 | 1 | 9 | 3 | 5 | 8 | 6 | 7
8 | 9 | 7 | 2 | 6 | 1 | 3 | 5 | 4
Valid: Yes
Haskell $
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment