unscramble 0.0 → 0.1
raw patch · 3 files changed
+63/−63 lines, 3 files
Files
- Main.hs +59/−0
- Unscramble.hs +0/−61
- unscramble.cabal +4/−2
+ Main.hs view
@@ -0,0 +1,59 @@+import Control.Lens hiding ((&), value)+import Data.List+import Data.Maybe+import Data.Ord+import Options.Applicative+import Paths_unscramble+import System.IO+import Unscramble.Input+import Unscramble.Output+import Unscramble.Score+import Unscramble.Search+import Unscramble.Types++parseOpts :: Parser ScrambleOpts+parseOpts = ScrambleOpts+ <$> option+ ( long "size" + & short 's'+ & metavar "SIZE"+ & help "Grid size (default 4)"+ & value 4)+ <*> option+ ( long "score"+ & metavar "SYSTEM"+ & help "Scoring system (one of \27[1mswf\27[0m (default),\+ \ \27[1mboggle\27[0m, \27[1mword-wars\27[0m)"+ & value SWF)+ <*> option+ ( long "display"+ & short 'd'+ & metavar "STYLE"+ & help "Display style: \27[1mone-line\27[0m to print all\+ \ the words in order on one line, or \27[1mchunked\27[0m\+ \ to display three-at-a-time with a board diagram for each."+ & value Chunked)++main :: IO ()+main = do+ sopts <- execParser opts+ grid' <- readGrid (gridSize sopts)+ mult' <- case scoreSystem sopts of+ SWF -> readMult+ _ -> return $ Multiplier [] Nothing [] Nothing+ filepath <- getDataFileName "lists/enable.txt"+ withFile filepath ReadMode $ \h -> do+ cont <- hGetContents h+ let foundWords = sortBy ((invert .) . comparing (_1 ^$))+ . mapMaybe (\a ->+ searchGrid a grid' mult' (scoreSystem sopts))+ $ lines cont+ display foundWords grid' mult' sopts+ where+ opts = info (helper <*> parseOpts)+ ( fullDesc+ & progDesc "Solve a Boggle-like word game"+ & header "unscramble")+ invert LT = GT+ invert GT = LT+ invert x = x
− Unscramble.hs
@@ -1,61 +0,0 @@-module Unscramble where--import Control.Lens hiding ((&), value)-import Data.List-import Data.Maybe-import Data.Ord-import Options.Applicative-import Paths_unscramble-import System.IO-import Unscramble.Input-import Unscramble.Output-import Unscramble.Score-import Unscramble.Search-import Unscramble.Types--parseOpts :: Parser ScrambleOpts-parseOpts = ScrambleOpts- <$> option- ( long "size" - & short 's'- & metavar "SIZE"- & help "Grid size (default 4)"- & value 4)- <*> option- ( long "score"- & metavar "SYSTEM"- & help "Scoring system (one of \27[1mswf\27[0m (default),\- \ \27[1mboggle\27[0m, \27[1mword-wars\27[0m)"- & value SWF)- <*> option- ( long "display"- & short 'd'- & metavar "STYLE"- & help "Display style: \27[1mone-line\27[0m to print all\- \ the words in order on one line, or \27[1mchunked\27[0m\- \ to display three-at-a-time with a board diagram for each."- & value Chunked)--main :: IO ()-main = do- sopts <- execParser opts- grid' <- readGrid (gridSize sopts)- mult' <- case scoreSystem sopts of- SWF -> readMult- _ -> return $ Multiplier [] Nothing [] Nothing- filepath <- getDataFileName "lists/enable.txt"- withFile filepath ReadMode $ \h -> do- cont <- hGetContents h- let foundWords = sortBy ((invert .) . comparing (_1 ^$))- . mapMaybe (\a ->- searchGrid a grid' mult' (scoreSystem sopts))- $ lines cont- display foundWords grid' mult' sopts- where- opts = info (helper <*> parseOpts)- ( fullDesc- & progDesc "Solve a Boggle-like word game"- & header "unscramble")- invert LT = GT- invert GT = LT- invert x = x
unscramble.cabal view
@@ -1,5 +1,7 @@ Name: unscramble-Version: 0.0+Category: Utils+Synopsis: Solve Boggle-like word games+Version: 0.1 Description: Solve Boggle-like word games License: GPL Author: Joel Taylor@@ -9,7 +11,7 @@ Data-Files: lists/enable.txt Executable unscramble- Main-is: Unscramble.hs+ Main-is: Main.hs Build-Depends: base == 4.*, hashmap == 1.3.*, lens == 3.7.*, mtl == 2.1.*, optparse-applicative == 0.4.* Default-extensions: TemplateHaskell, TupleSections Default-Language: Haskell2010