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