[hs] Solve 2020_13 part 1

This commit is contained in:
Joscha 2020-12-13 10:17:54 +00:00
parent 559659cd73
commit e834e0c6de
2 changed files with 31 additions and 0 deletions

View file

@ -15,6 +15,7 @@ import qualified Aoc.Y2020.D09 as D09
import qualified Aoc.Y2020.D10 as D10 import qualified Aoc.Y2020.D10 as D10
import qualified Aoc.Y2020.D11 as D11 import qualified Aoc.Y2020.D11 as D11
import qualified Aoc.Y2020.D12 as D12 import qualified Aoc.Y2020.D12 as D12
import qualified Aoc.Y2020.D13 as D13
year :: Year year :: Year
year = Year 2020 year = Year 2020
@ -30,4 +31,5 @@ year = Year 2020
, (10, D10.day) , (10, D10.day)
, (11, D11.day) , (11, D11.day)
, (12, D12.day) , (12, D12.day)
, (13, D13.day)
] ]

29
hs/src/Aoc/Y2020/D13.hs Normal file
View file

@ -0,0 +1,29 @@
module Aoc.Y2020.D13
( day
) where
import Control.Monad
import Data.Function
import Data.List
import Data.Maybe
import Aoc.Day
import Aoc.Parse
parser :: Parser (Int, [Int])
parser = do
earliest <- decimal
void newline
buses <- sepBy ((Just <$> decimal) <|> (Nothing <$ char 'x')) (char ',')
void newline
pure (earliest, catMaybes buses)
solver :: (Int, [Int]) -> IO ()
solver (earliest, buses) = do
putStrLn ">> Part 1"
let busTimes = [(bus, earliest - mod earliest bus + bus) | bus <- buses]
(nextBus, nextBusTime) = minimumBy (compare `on` snd) busTimes
print $ nextBus * (nextBusTime - earliest)
day :: Day
day = dayParse parser solver