[hs] Switch to new day system

This commit is contained in:
Joscha 2020-12-03 00:40:20 +00:00
parent 3b0ea44036
commit b87c8e4555
4 changed files with 35 additions and 39 deletions

View file

@ -1,34 +1,24 @@
module Main where module Main where
import Options.Applicative import Control.Monad
import Aoc.Y2019 import Options.Applicative
import Aoc.Y2020
data Settings = Settings import Aoc.Day (Day (..))
{ function :: FilePath -> IO () import qualified Aoc.Y2019 as Y2019
, filename :: FilePath import qualified Aoc.Y2020 as Y2020
}
solutions :: Parser (FilePath -> IO ()) toCommand :: Day -> Mod CommandFields (IO ())
solutions = subparser $ mconcat $ map (\(name, func) -> command name (info (pure func) mempty)) toCommand (DayPure name f) = command name $ info (helper <*> pure f) mempty
[ ("2019_01", solve201901) toCommand (DayFile name f) = command name $ info (helper <*> p) mempty
, ("2019_02", solve201902) where
, ("2019_03", solve201903) p = f <$> strArgument (metavar "INPUTFILE")
, ("2019_04", solve201904)
, ("2019_05", solve201905)
, ("2020_01", solve202001)
]
parser :: Parser Settings parser :: Parser (IO ())
parser = Settings parser = subparser $ mconcat $ map toCommand $ Y2019.days ++ Y2020.days
<$> solutions
<*> strArgument (metavar "INPUTFILE")
opts :: ParserInfo Settings opts :: ParserInfo (IO ())
opts = info (helper <*> parser) $ fullDesc <> failureCode 1 opts = info (helper <*> parser) $ fullDesc <> failureCode 1
main :: IO () main :: IO ()
main = do main = join $ customExecParser (prefs showHelpOnEmpty) opts
settings <- customExecParser (prefs showHelpOnEmpty) opts
function settings $ filename settings

View file

@ -1,13 +1,8 @@
module Aoc.Y2019 module Aoc.Y2019
( solve201901 ( days
, solve201902
, solve201903
, solve201904
, solve201905
) where ) where
import Aoc.Y2019.A01 import Aoc.Day
import Aoc.Y2019.A02
import Aoc.Y2019.A03 days :: [Day]
import Aoc.Y2019.A04 days = []
import Aoc.Y2019.A05

View file

@ -1,5 +1,11 @@
module Aoc.Y2020 module Aoc.Y2020
( solve202001 ( days
) where ) where
import Aoc.Y2020.A01 import Aoc.Day
import qualified Aoc.Y2020.D01 as D01
days :: [Day]
days =
[ D01.day
]

View file

@ -1,8 +1,10 @@
module Aoc.Y2020.A01 module Aoc.Y2020.D01
( solve202001 ( day
) where ) where
import Control.Monad import Control.Monad
import Aoc.Day
findPair :: [Integer] -> (Integer, Integer) findPair :: [Integer] -> (Integer, Integer)
findPair l = head $ do findPair l = head $ do
@ -30,3 +32,6 @@ solve202001 f = do
let (y1, y2, y3) = findTriple values let (y1, y2, y3) = findTriple values
putStrLn ">> Part 2" putStrLn ">> Part 2"
putStrLn $ show y1 ++ " * " ++ show y2 ++ " * " ++ show y3 ++ " = " ++ show (y1 * y2 * y3) putStrLn $ show y1 ++ " * " ++ show y2 ++ " * " ++ show y3 ++ " = " ++ show (y1 * y2 * y3)
day :: Day
day = dayFile "2020_01" solve202001