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