From a4206d103d1f8d3aa2c1f76c988be88be81936bf Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Sat, 15 Oct 2016 16:04:27 +0200 Subject: [PATCH] Implemented exercise 3: wordFitsTemplate --- Lecture 02/Scrabble/Scrabble.hs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/Lecture 02/Scrabble/Scrabble.hs b/Lecture 02/Scrabble/Scrabble.hs index eb8dc4b..2e6e1d5 100644 --- a/Lecture 02/Scrabble/Scrabble.hs +++ b/Lecture 02/Scrabble/Scrabble.hs @@ -10,9 +10,6 @@ formableBy [] _ = True formableBy (x:xs) hand = let remainingHand = delete x hand in elem x hand && formableBy xs remainingHand -wordsFrom :: Hand -> [String] -wordsFrom hand = wordsFromList hand allWords - wordsFromList :: Hand -> [String] -> [String] wordsFromList hand [] = [] wordsFromList hand (x:[]) @@ -20,3 +17,26 @@ wordsFromList hand (x:[]) | otherwise = [] wordsFromList hand (x:xs) = wordsFromList hand [x] ++ wordsFromList hand xs +wordsFrom :: Hand -> [String] +wordsFrom hand = wordsFromList hand allWords + +type Template = String + +wordMatchesTemplate :: String -> Template -> Bool +wordMatchesTemplate [] [] = True +wordMatchesTemplate (w:ws) (t:ts) + | t == '?' = wordMatchesTemplate ws ts + | otherwise = w == t && wordMatchesTemplate ws ts +wordMatchesTemplate _ _ = False + +removeTemplateChars :: String -> Template -> String +removeTemplateChars word [] = word +removeTemplateChars word (t:ts) + | t == '?' = removeTemplateChars word ts + | otherwise = removeTemplateChars (delete t word) ts + +wordFitsTemplate :: Template -> Hand -> String -> Bool +wordFitsTemplate template hand word = let matchWord = removeTemplateChars word template in + formableBy matchWord hand && wordMatchesTemplate word template + +