From 2d02f553aa4cc4ded630628eccdf34f55937cee5 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Wed, 14 Dec 2016 20:19:02 +0100 Subject: Add 2015 sources --- 2015/day08.hs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 2015/day08.hs (limited to '2015/day08.hs') 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 -- cgit v1.2.3-70-g09d2