diff --git a/exercises/lists/Lists.hs b/exercises/lists/Lists.hs
index 7656510..370141c 100644
--- a/exercises/lists/Lists.hs
+++ b/exercises/lists/Lists.hs
@@ -36,29 +36,33 @@ null [] = True
null _ = False
length :: [Int] -> Int
-length = undefined
+length [] = 0
+length [_] = 1
+length (_:xs) = 1 + length(xs)
take :: Int -> [Int] -> [Int]
take _ [] = []
-take 1 (x:xs) = [x]
+take 1 (x:_) = [x]
take n _ | n < 1 = []
take n (x:xs) = x : take (n-1) xs
take' :: Int -> [Int] -> [Int]
take' 0 _ = []
-take' n [] = []
+take' _ [] = []
take' n (x:xs) | n < 0 = []
| otherwise = x : take' (n-1) xs
drop :: Int -> [Int] -> [Int]
-drop = undefined
-
+drop _ [] = []
+drop 1 (_:xs) = xs
+drop n (_:xs) = drop (n - 1) xs
elem :: Int -> [Int] -> Bool
-elem = undefined
-
+elem _ [] = False
+elem n (x:xs) | n == x = True
+ | otherwise = elem n xs
reverseHelper :: [Int] -> [Int] -> [Int]
reverseHelper acc [] = acc
@@ -80,28 +84,33 @@ concat = undefined
replicate :: Int -> Int -> [Int]
-replicate = undefined
-
+replicate 0 _ = []
+replicate 1 n = [n]
+replicate k n = n : replicate (k - 1) n
interleave :: [Int] -> [Int] -> [Int]
interleave = undefined
sum :: [Int] -> Int
-sum = undefined
+sum [] = 0
+sum [x] = x
+sum (x:xs) = x + sum xs
maximum :: [Int] -> Int
-maximum = undefined
-
+maximum [] = 0
+maximum (x:xs) | x > maximum xs = x
+ | otherwise = maximum xs
nub :: [Int] -> [Int]
nub = undefined
delete :: Int -> [Int] -> [Int]
-delete = undefined
-
+delete _ [] = []
+delete 1 (_:xs) = xs
+delete n (x:xs) = x : delete (n - 1) xs
difference :: [Int] -> [Int] -> [Int]
difference = undefined
diff --git a/exercises/md-processor/mdparser.hs b/exercises/md-processor/mdparser.hs
index a5c8353..cbfdfbd 100644
--- a/exercises/md-processor/mdparser.hs
+++ b/exercises/md-processor/mdparser.hs
@@ -1,4 +1,5 @@
module MDProcessor where
+import Data.Char(toLower)
data Lang = Haskell | C | Python | None deriving (Eq, Show)
data HeadingSize = H1 | H2 | H3 | H4 deriving (Eq, Show)
@@ -15,9 +16,12 @@ data Element =
| HorizontalRule
deriving (Eq, Show)
-myText :: Element
-myText = Italic (Bold (Underline (Text "This is a test")))
+-- myList :: Element
+-- myList = Ordered
+myText :: Element
+myText = Bold(Text "This is a test")
+-- myText = List Unordered [Text "Elemen1", Text "Element2", Text "Element 3"]
headingPrefix :: HeadingSize -> String
headingPrefix H1 = "#"
@@ -25,6 +29,18 @@ headingPrefix H2 = "##"
headingPrefix H3 = "###"
headingPrefix H4 = "####"
+htmlHeadingPrefix :: HeadingSize -> String
+htmlHeadingPrefix H1 = "
"
+htmlHeadingPrefix H2 = ""
+htmlHeadingPrefix H3 = ""
+htmlHeadingPrefix H4 = ""
+
+htmlHeadingPostfix :: HeadingSize -> String
+htmlHeadingPostfix H1 = "
"
+htmlHeadingPostfix H2 = ""
+htmlHeadingPostfix H3 = ""
+htmlHeadingPostfix H4 = ""
+
lang :: Lang -> String
lang Haskell = "hs"
lang C = "c"
@@ -44,3 +60,60 @@ render2md (List mode items) = renderList mode items
--renderList :: ListMode -> [Element] -> String
renderList Ordered l = unlines [show i ++ ". " ++ render2md (l !! (i-1)) | i <- [1..length l]]
renderList Unordered l = unlines ["- " ++ render2md x | x <- l]
+
+render2html :: Element -> String
+render2html (Text s) = "" ++ s ++ "
"
+render2html (Bold el) = "" ++ render2html el ++ ""
+render2html (Italic el) = "" ++ render2html el ++ ""
+render2html (Underline el) = "" ++ render2html el ++ ""
+-- render2html (Heading size str) = htmlHeadingPrefix ++ render2html str ++ htmlHeadingPostfix
+render2html (CodeBlock _ code) = "" ++ unlines code ++ ""
+render2html (List mode items) | mode == Ordered = "" ++ renderList Ordered items ++ "
"
+ | mode == Unordered = "" ++ renderList Unordered items ++ "
"
+ where
+ renderList Ordered l = unlines ["" ++ render2html (l !! (i - 1)) ++"" | i <- [1..length l]]
+ renderList Unordered l = unlines ["" ++ render2html (l !! (i - 1)) ++"" | i <- [1..length l]]
+
+robberify :: Element -> Element
+robberify (Text s) = Text (encode' s)
+robberify (Bold el) = Bold (robberify el)
+robberify (Italic el) = Italic (robberify el)
+robberify (Underline el) = Underline (robberify el)
+-- robberify (Heading size el) = Heading size (robberify el) I will work on those later :)
+-- robberify (CodeBlock pl el) = CodeBlock pl (encode' el)
+-- robberify (List el) = List (robberify el)
+-- robberify (x el) = x robberify el -- Ask why this doesn't work!?!
+
+-- toc :: [Element] -> [Element]
+-- -- toc [] = List Ordered []
+-- toc ((Heading H4 x) : xs) = Text (x) : toc(xs)
+-- toc (x : xs) = toc(xs)
+
+isChar :: Char -> Bool
+isChar ch
+ |toLower ch >= 'a' && toLower ch <= 'z' = True
+isChar _ = False
+
+isVowel :: Char -> Bool
+isVowel ch
+ | toLower ch == 'a' = True
+ | toLower ch == 'e' = True
+ | toLower ch == 'u' = True
+ | toLower ch == 'i' = True
+ | toLower ch == 'o' = True
+ | toLower ch == 'y' = True
+isVowel _ = False
+
+
+isConsonant :: Char -> Bool
+isConsonant ch
+ | not (isChar ch) = False
+ | isVowel ch = False
+isConsonant _ = True
+
+-- Bonus #1
+encode' :: String -> String
+encode' [] = []
+encode' (x:xs)
+ | isConsonant x = x : 'o' : toLower x : (encode' xs)
+encode' (x:xs) = x : (encode' xs)
diff --git a/exercises/secret-lang/Secret-lang.hs b/exercises/secret-lang/Secret-lang.hs
index 987c26d..2728443 100644
--- a/exercises/secret-lang/Secret-lang.hs
+++ b/exercises/secret-lang/Secret-lang.hs
@@ -1,32 +1,56 @@
import Data.Char(toLower)
isChar :: Char -> Bool
-isChar = undefined
-
+isChar ch
+ |toLower ch >= 'a' && toLower ch <= 'z' = True
+isChar _ = False
isVowel :: Char -> Bool
-isVowel = undefined
+isVowel ch
+ | toLower ch == 'a' = True
+ | toLower ch == 'e' = True
+ | toLower ch == 'u' = True
+ | toLower ch == 'i' = True
+ | toLower ch == 'o' = True
+ | toLower ch == 'y' = True
+isVowel _ = False
isConsonant :: Char -> Bool
-isConsonant = undefined
+isConsonant ch
+ | not (isChar ch) = False
+ | isVowel ch = False
+isConsonant _ = True
encode :: String -> String
-encode = undefined
-
+encode [] = []
+encode (x:xs)
+ | isConsonant x = x : 'o' : x : (encode xs)
+encode (x:xs) = x : (encode xs)
-- Bonus #1
encode' :: String -> String
-encode' = undefined
-
+encode' [] = []
+encode' (x:xs)
+ | isConsonant x = x : 'o' : toLower x : (encode' xs)
+encode' (x:xs) = x : (encode' xs)
-- Bonus #2
dropN :: Int -> String -> String
-dropN = undefined
+dropN _ [] = []
+dropN 0 anyString = anyString
+dropN a (x:xs) = dropN (a - 1) xs
-- Assume we'll be decoding only valid words
decode :: String -> String
+<<<<<<< HEAD
+decode [] = []
+decode (x:'o':y:xs)
+ | x == y = x : decode xs
+decode (x:xs) = x:decode xs
+=======
decode = undefined
+>>>>>>> c48c6b3660bd9b1429acba58cb5198a8ec08411d