[hs] Solve 2020_13 part 1
This commit is contained in:
parent
559659cd73
commit
e834e0c6de
2 changed files with 31 additions and 0 deletions
|
|
@ -15,6 +15,7 @@ import qualified Aoc.Y2020.D09 as D09
|
|||
import qualified Aoc.Y2020.D10 as D10
|
||||
import qualified Aoc.Y2020.D11 as D11
|
||||
import qualified Aoc.Y2020.D12 as D12
|
||||
import qualified Aoc.Y2020.D13 as D13
|
||||
|
||||
year :: Year
|
||||
year = Year 2020
|
||||
|
|
@ -30,4 +31,5 @@ year = Year 2020
|
|||
, (10, D10.day)
|
||||
, (11, D11.day)
|
||||
, (12, D12.day)
|
||||
, (13, D13.day)
|
||||
]
|
||||
|
|
|
|||
29
hs/src/Aoc/Y2020/D13.hs
Normal file
29
hs/src/Aoc/Y2020/D13.hs
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue