Adds types, and read-show functions
This commit is contained in:
parent
7fe01ba070
commit
b2a0dd8817
@ -1,6 +0,0 @@
|
|||||||
module Main where
|
|
||||||
|
|
||||||
import Lib
|
|
||||||
|
|
||||||
main :: IO ()
|
|
||||||
main = someFunc
|
|
12
package.yaml
12
package.yaml
@ -14,23 +14,19 @@ description: Please see the README on GitHub at <https://github.com/abhi
|
|||||||
dependencies:
|
dependencies:
|
||||||
- base >= 4.7 && < 5
|
- base >= 4.7 && < 5
|
||||||
|
|
||||||
library:
|
|
||||||
source-dirs: src
|
|
||||||
|
|
||||||
executables:
|
executables:
|
||||||
hasdoku:
|
hasdoku:
|
||||||
main: Main.hs
|
main: Sudoku.hs
|
||||||
source-dirs: app
|
source-dirs: src
|
||||||
ghc-options:
|
ghc-options:
|
||||||
- -threaded
|
- -threaded
|
||||||
- -rtsopts
|
- -rtsopts
|
||||||
- -with-rtsopts=-N
|
- -with-rtsopts=-N
|
||||||
dependencies:
|
dependencies:
|
||||||
- hasdoku
|
- split
|
||||||
|
|
||||||
tests:
|
tests:
|
||||||
hasdoku-test:
|
hasdoku-test:
|
||||||
main: Spec.hs
|
main: Spec.hs
|
||||||
source-dirs: test
|
source-dirs: test
|
||||||
dependencies:
|
dependencies: []
|
||||||
- hasdoku
|
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
module Lib
|
|
||||||
( someFunc
|
|
||||||
) where
|
|
||||||
|
|
||||||
someFunc :: IO ()
|
|
||||||
someFunc = putStrLn "someFunc"
|
|
39
src/Sudoku.hs
Normal file
39
src/Sudoku.hs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module Main where
|
||||||
|
|
||||||
|
import qualified Data.Char
|
||||||
|
import qualified Data.List.Split
|
||||||
|
import qualified Data.List
|
||||||
|
|
||||||
|
data Cell = Fixed Int | Possible [Int] deriving (Show, Eq)
|
||||||
|
type Row = [Cell]
|
||||||
|
type Grid = [Row]
|
||||||
|
|
||||||
|
possibleVals :: Cell -> [Int]
|
||||||
|
possibleVals (Fixed x) = [x]
|
||||||
|
possibleVals (Possible xs) = xs
|
||||||
|
|
||||||
|
readGrid :: String -> Maybe Grid
|
||||||
|
readGrid s = if length s /= 81
|
||||||
|
then Nothing
|
||||||
|
else sequence . map (sequence . map readCell) . Data.List.Split.chunksOf 9 $ s
|
||||||
|
where
|
||||||
|
readCell '.' = Just $ Possible [1..9]
|
||||||
|
readCell c
|
||||||
|
| Data.Char.isDigit c && c > '0' = Just . Fixed . Data.Char.digitToInt $ c
|
||||||
|
| otherwise = Nothing
|
||||||
|
|
||||||
|
showGrid :: Grid -> String
|
||||||
|
showGrid = unlines . map (unwords . map showCell)
|
||||||
|
where
|
||||||
|
showCell (Fixed x) = show x
|
||||||
|
showCell _ = "."
|
||||||
|
|
||||||
|
showGridWithPossibilities :: Grid -> String
|
||||||
|
showGridWithPossibilities = unlines . map (unwords . map showCell)
|
||||||
|
where
|
||||||
|
showCell (Fixed x) = show x ++ " "
|
||||||
|
showCell (Possible xs) =
|
||||||
|
(Data.List.foldl' (\acc x -> acc ++ if x `elem` xs then show x else " ") "[" [1..9]) ++ "]"
|
||||||
|
|
||||||
|
|
||||||
|
main = undefined
|
Loading…
Reference in New Issue
Block a user