Created
November 23, 2008 02:37
-
-
Save vito/28016 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 $ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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