From 66f4cd1db888858f488b602f67431b4f1588c07b Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Tue, 1 Nov 2016 13:21:29 +0200 Subject: [PATCH 1/4] Everything done without the decoding --- exercises/secret-lang/Secret-lang.hs | 34 ++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/exercises/secret-lang/Secret-lang.hs b/exercises/secret-lang/Secret-lang.hs index 61c1406..5c7a7a7 100644 --- a/exercises/secret-lang/Secret-lang.hs +++ b/exercises/secret-lang/Secret-lang.hs @@ -2,29 +2,45 @@ 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 0 anyString = anyString +dropN a (x:xs) = dropN (a - 1) xs --Assume we'll be decoding only valid words From aefb483d3d12ca8c208f8d32b2fffb59f4d092a2 Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Tue, 1 Nov 2016 23:04:51 +0200 Subject: [PATCH 2/4] Fixed DropN and encode' --- exercises/secret-lang/Secret-lang.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/exercises/secret-lang/Secret-lang.hs b/exercises/secret-lang/Secret-lang.hs index 5c7a7a7..ae678c7 100644 --- a/exercises/secret-lang/Secret-lang.hs +++ b/exercises/secret-lang/Secret-lang.hs @@ -34,11 +34,12 @@ encode (x:xs) = x : (encode xs) encode' :: String -> String encode' [] = [] encode' (x:xs) - | isConsonant x = x : 'o' : toLower x : (encode xs) -encode' (x:xs) = x : (encode xs) + | isConsonant x = x : 'o' : toLower x : (encode' xs) +encode' (x:xs) = x : (encode' xs) -- Bonus #2 dropN :: Int -> String -> String +dropN _ [] = [] dropN 0 anyString = anyString dropN a (x:xs) = dropN (a - 1) xs From fcc6384a651d6b935943e129db38b32e00a61b96 Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Tue, 1 Nov 2016 23:27:46 +0200 Subject: [PATCH 3/4] Decode done! --- exercises/secret-lang/Secret-lang.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/secret-lang/Secret-lang.hs b/exercises/secret-lang/Secret-lang.hs index ae678c7..aca90fb 100644 --- a/exercises/secret-lang/Secret-lang.hs +++ b/exercises/secret-lang/Secret-lang.hs @@ -46,4 +46,7 @@ dropN a (x:xs) = dropN (a - 1) xs --Assume we'll be decoding only valid words decode :: String -> String -decode = undefined +decode [] = [] +decode (x:'o':y:xs) + | x == y = x : decode xs +decode (x:xs) = x:decode xs From 6b321b429def9a34de1287c042873f3241a4d08e Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Tue, 29 Nov 2016 10:35:05 -0800 Subject: [PATCH 4/4] Most of the stuff done except toc and raised some questions. --- exercises/md-processor/mdparser.hs | 77 +++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 2 deletions(-) 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)