diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-12-13 09:33:20 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-12-13 09:33:20 +0100 |
commit | c56796a2ebe192fe0832b4e5000e900fcfd5fa40 (patch) | |
tree | d260de4424b0298cdda79884d85185ad7435f90b /2017/13.hs | |
parent | 685cd03f19eef60dbd4079ff79fbedb2e344ca1f (diff) |
Day 13
Diffstat (limited to '2017/13.hs')
-rw-r--r-- | 2017/13.hs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/2017/13.hs b/2017/13.hs new file mode 100644 index 0000000..77254ca --- /dev/null +++ b/2017/13.hs @@ -0,0 +1,21 @@ +import Control.Monad +import Data.Char +import Data.List +import Data.Maybe + + +l2t :: [a] -> (a,a) +l2t [a,b] = (a,b) + +check :: [(Int, Int)] -> Int -> Bool +check inp off = all (\(d,r) -> if (d + off) `mod` (2 * (r - 1)) == 0 then False else True) inp + +cost :: [(Int, Int)] -> Int -> Int +cost inp off = sum $ map (\(d,r) -> if (d + off) `mod` (2 * (r - 1)) == 0 then d * r else 0) inp + +main :: IO () +main = do + input <- liftM (map (l2t . map (read . takeWhile isDigit) . words) . lines) (readFile "13.in") + + print $ cost input 0 + print $ fromJust $ findIndex id $ map (check input) [0..] |