X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-20.git;a=blobdiff_plain;f=advent10%2Fsrc%2Fadvent10.hs;fp=advent10%2Fsrc%2Fadvent10.hs;h=b0b77bf943ee7732227544dc6e5baa82c603bf62;hp=0000000000000000000000000000000000000000;hb=1e9f01ceeffca5c34bec504c950f9c75686956f2;hpb=a8fa6a2019e66caa9f626b9fe942887040301e07 diff --git a/advent10/src/advent10.hs b/advent10/src/advent10.hs new file mode 100644 index 0000000..b0b77bf --- /dev/null +++ b/advent10/src/advent10.hs @@ -0,0 +1,31 @@ +-- import Debug.Trace + +import qualified Data.Map as M +-- import qualified Data.Set as S +import Data.List + +main :: IO () +main = + do + numStrs <- readFile "data/advent10.txt" + let nums = map (read @Int) $ lines numStrs + let device = 3 + maximum nums + let sortedNums = sort (0:device:nums) + print $ part1 sortedNums + print $ part2 sortedNums + +part1 :: [Int] -> Int +part1 nums = jolt1s * jolt3s + where jolt1s = joltNs 1 nums + jolt3s = joltNs 3 nums + +joltNs d ns = length $ filter diff $ zip ns (tail ns) + where diff (a, b) = (b - a) == d + +part2 :: [Int] -> Int +part2 nums = snd $ M.findMax $ foldl includeAdapter (M.singleton 0 1) $ tail nums + +includeAdapter arrangements adapter = M.insert adapter earlierCount arrangements + where + earlierArrangements = M.filterWithKey (\k _ -> (adapter - k) <= 3) arrangements + earlierCount = M.foldl (+) 0 earlierArrangements