[hs] Solve 2020_10

This commit is contained in:
Joscha 2020-12-10 12:08:13 +00:00
parent f642872ea1
commit 8233376b4c
2 changed files with 35 additions and 0 deletions

View file

@ -12,6 +12,7 @@ import qualified Aoc.Y2020.D06 as D06
import qualified Aoc.Y2020.D07 as D07 import qualified Aoc.Y2020.D07 as D07
import qualified Aoc.Y2020.D08 as D08 import qualified Aoc.Y2020.D08 as D08
import qualified Aoc.Y2020.D09 as D09 import qualified Aoc.Y2020.D09 as D09
import qualified Aoc.Y2020.D10 as D10
year :: Year year :: Year
year = Year 2020 year = Year 2020
@ -24,4 +25,5 @@ year = Year 2020
, ( 7, D07.day) , ( 7, D07.day)
, ( 8, D08.day) , ( 8, D08.day)
, ( 9, D09.day) , ( 9, D09.day)
, (10, D10.day)
] ]

33
hs/src/Aoc/Y2020/D10.hs Normal file
View file

@ -0,0 +1,33 @@
module Aoc.Y2020.D10
( day
) where
import Data.List
import Aoc.Day
import Aoc.Parse
parser :: Parser [Integer]
parser = manyLines decimal
possibilities :: Integer -> Integer -> Integer -> [Integer] -> Integer
possibilities _ _ c [] = c
possibilities a b c (1:xs) = possibilities b c (a + b + c) [x - 1 | x <- xs]
possibilities _ b c (2:xs) = possibilities c 0 (b + c) [x - 2 | x <- xs]
possibilities _ _ c (3:xs) = possibilities 0 0 c [x - 3 | x <- xs]
possibilities _ _ _ (_:_) = 0
solver :: [Integer] -> IO ()
solver nums = do
let snums = sort nums ++ [maximum nums + 3]
putStrLn ">> Part 1"
let diffs = zipWith (-) snums (0 : snums)
print $ length (filter (==1) diffs) * length (filter (==3) diffs)
putStrLn ""
putStrLn ">> Part 2"
print $ possibilities 0 0 1 snums
day :: Day
day = dayParse parser solver