Select Git revision
Spec.hs 4.25 KiB
import Challenges
import Data.List
main :: IO ()
main = challenge2Test
exGrid1'1 = [ "HAGNIRTSH" , "SACAGETAK", "GCSTACKEL","MGHKMILKI","EKNLETGCN","TNIRTLETE","IRAAHCLSR","MAMROSAGD","GIZKDDNRG" ]
exWords1'1 = [ "HASKELL","STRING","STACK","MAIN","METHOD"]
exAns1'1 = [("HASKELL",Just((0,0),DownForward)),("STRING",Just((7,0),Back)),("STACK",Just((2,2),Forward)),
("MAIN", Just((2,7),Up )),("METHOD",Just((4,3),Down))]
exGrid1'2 = ["ROBREUMBR","AURPEPSAN","UNLALMSEE","YGAUNPYYP","NLMNBGENA","NBLEALEOR","ALRYPBBLG","NREPBEBEP","YGAYAROMR"]
exWords1'2 = [ "BANANA", "ORANGE", "MELON", "RASPBERRY","APPLE","PLUM","GRAPE" ]
exAns1'2 = [("BANANA", Just((5,6),UpBack )),("ORANGE",Just((1,0),DownForward)),("MELON",Just((7,8),Up )),
("RASPBERRY",Just((8,0),DownBack)),("APPLE", Just((2,8),UpForward )),("PLUM", Just((5,1),DownBack)),
("GRAPE", Just((8,6),Up ))]
exGrid1'3 = ["TEST","ASBD","GDFI","FDGS"]
exWords1'3 = ["TEST"]
exAns1'3 = [("TEST",Just((0,0),Forward))]
printGrid :: WordSearchGrid -> IO ()
printGrid [] = return ()
printGrid (w:ws) = do putStrLn $ intersperse ' ' w
printGrid ws
pPrintList :: Show a => [a] -> IO ()
pPrintList cs = do putStr "["
ppl cs
where
ppl (x:[]) = putStrLn $ " " ++ show x ++ "]\n"
ppl (x:y:[]) = putStrLn $ " " ++ show x ++ "," ++ show y ++ "]\n"
ppl (x:y:z:[]) = putStrLn $ " " ++ show x ++ "," ++ show y ++ "," ++ show z ++ "]\n"
ppl (x:y:z:xs) = do putStrLn $ " " ++ show x ++ "," ++ show y ++ "," ++ show z ++ ","
ppl $ xs
assert1 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO ()
assert1 grid result correct | result == correct = do putStrLn "Testing Grid:\n"
printGrid grid
putStrLn "\nExpected Result:"
pPrintList correct
putStrLn "Passed! Result:"
pPrintList result
| otherwise = do putStrLn "Testing Grid:\n"
printGrid grid
putStrLn "\nExpected Result:"
pPrintList correct
putStrLn "Failed! Result:"
pPrintList result
challenge1Test :: IO ()
challenge1Test = do putStrLn "Challenge 1 Start Test"
putStrLn "========================================="
assert1 exGrid1'1 (solveWordSearch exWords1'1 exGrid1'1) exAns1'1
assert1 exGrid1'2 (solveWordSearch exWords1'2 exGrid1'2) exAns1'2
putStrLn "========================================="
putStrLn "Challenge 1 End Test"
assert2 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> IO ()
assert2 grid answers = do putStrLn "Checking Grid Contains all Given Words:\n"
printGrid grid
putStrLn "\nWords in Grid:"
pPrintList answers
putStrLn areWordsPresent
where
areWordsPresent = if foldl1 (||) $ map (\(_,x) -> x == Nothing) answers
then "Not all words present!"
else "All words are present!"
createAndSolve :: [ String ] -> Double -> IO (WordSearchGrid,[ (String,Maybe Placement) ])
createAndSolve words maxDensity = do g <- createWordSearch words maxDensity
let soln = solveWordSearch words g
return (g,soln)
challenge2Test :: IO ()
challenge2Test = do putStrLn "Challenge 2 Start Test"
putStrLn "========================================="
(g1,sol1) <- createAndSolve ["WORD","EXAMPLE","SEARCH"] 0.3
assert2 g1 sol1
putStrLn "========================================="
putStrLn "Challenge 2 End Test"