diff options
author | tomsmeding <tom.smeding@gmail.com> | 2016-12-14 20:19:02 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2016-12-14 20:19:02 +0100 |
commit | 2d02f553aa4cc4ded630628eccdf34f55937cee5 (patch) | |
tree | d5377ebdff68788725b5820d5331ce7b6c9d4a84 /2015/day08.hs | |
parent | 97b4c5d86cc12447ac6845e25a863e26a88aec35 (diff) |
Add 2015 sources
Diffstat (limited to '2015/day08.hs')
-rw-r--r-- | 2015/day08.hs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/2015/day08.hs b/2015/day08.hs new file mode 100644 index 0000000..d48212b --- /dev/null +++ b/2015/day08.hs @@ -0,0 +1,39 @@ +module Main where + +import Data.Char +import Control.Monad + +parseHexSingle :: Char -> Int +parseHexSingle x -- = -- subl syntax + | ord x >= ord '0' && ord x <= ord '9' = ord x - ord '0' + | ord x >= ord 'a' && ord x <= ord 'f' = 10 + ord x - ord 'a' + | ord x >= ord 'A' && ord x <= ord 'F' = 10 + ord x - ord 'A' + | otherwise = undefined + +parseHex :: String -> Int +parseHex "" = 0 +parseHex (x:xs) = 16 * parseHexSingle x + parseHex xs + +parse :: String -> String +parse s -- = -- subl syntax + | length s > 1 && head s == '"' && last s == '"' = parse' $ init $ tail s + | otherwise = undefined + +parse' :: String -> String +parse' "" = "" +parse' ('\\':'\\':xs) = '\\' : parse' xs +parse' ('\\':'"':xs) = '"' : parse' xs +parse' ('\\':'x':a:b:xs) = chr (parseHex $ [a,b]) : parse' xs +parse' (x:xs) = x : parse' xs + +day8 :: IO () +day8 = do + input <- liftM lines $ readFile "day08.txt" + print $ sum [length s - length (parse s) | s <- input] + +day8_2 :: IO () +day8_2 = do + input <- liftM lines $ readFile "day08.txt" + print $ sum [length (show s) - length s | s <- input] + +main = day8 |