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/day12.hs | |
parent | 97b4c5d86cc12447ac6845e25a863e26a88aec35 (diff) |
Add 2015 sources
Diffstat (limited to '2015/day12.hs')
-rw-r--r-- | 2015/day12.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/2015/day12.hs b/2015/day12.hs new file mode 100644 index 0000000..6dbf8a0 --- /dev/null +++ b/2015/day12.hs @@ -0,0 +1,46 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Data.Char +import Data.Maybe +import Data.Word +import Data.Scientific +import qualified Data.Aeson as JSON +import qualified Data.Vector as Vector +import qualified Data.HashMap.Strict as HM +import qualified Data.ByteString.Lazy as BS +import qualified Data.ByteString.Internal as BS (c2w,w2c) + +contains :: (Eq a) => [a] -> a -> Bool +contains [] _ = False +contains (x:xs) v = if x == v then True else contains xs v + +isDigitOrMinus :: Char -> Bool +isDigitOrMinus c = isDigit c || c == '-' + +extractNumbers :: String -> [Int] +extractNumbers s@(x:xs) + | isDigitOrMinus x = read (takeWhile isDigitOrMinus s) : extractNumbers (dropWhile isDigitOrMinus xs) + | otherwise = extractNumbers xs +extractNumbers [] = [] + +sumnumsnored :: JSON.Value -> Int +sumnumsnored (JSON.Object o) = if any (== JSON.String "red") $ HM.elems o then 0 else HM.foldl' (\a v -> a + sumnumsnored v) 0 o +sumnumsnored (JSON.Array a) = Vector.sum $ Vector.map sumnumsnored a +sumnumsnored (JSON.String _) = 0 +sumnumsnored (JSON.Number n) = floor n +sumnumsnored (JSON.Bool _) = 0 + +day12 :: IO () +day12 = do + input <- readFile "day12.txt" + print $ sum $ extractNumbers input + +dopart2 :: String -> Int +dopart2 s = sumnumsnored $ fromJust $ JSON.decode $ BS.pack $ map BS.c2w s + +day12_2 :: IO () +day12_2 = do + input <- readFile "day12.txt" + print $ dopart2 input + +main = day12_2 |