{-# LANGUAGE LambdaCase #-} module Main where import Data.List (uncons) import Data.Maybe (mapMaybe) import Lib import System.Environment (getArgs) paths :: [FilePath] paths = [ "./data/01.in", "./data/02.in", "./data/03.in", "./data/04.in", "./data/05.in", "./data/06.in", "./data/07.in", "./data/08.in", "./data/09.in", "./data/10.in", "./data/11.in", "./data/12.in", "./data/13.in", "./data/14.in", "./data/15.in", "./data/16.in", "./data/17.in", "./data/18.in", "./data/19.in", "./data/20.in", "./data/21.in", "", "./data/23.in", "./data/24.in", "./data/25.in" ] solutions :: [(Int, Day, FilePath)] solutions = let maybeSolutions = zip3 [1 ..] days paths available (num, daySolutions, filepath) = do (firstSolution, _) <- uncons daySolutions return (num, firstSolution, filepath) in mapMaybe available maybeSolutions runAll :: [(Int, Day, FilePath)] -> IO () runAll = mapM_ (\(dayNum, day, path) -> run day path >>= printDR dayNum) usage :: IO () usage = putStrLn "./Main" main :: IO () main = printHeader >> getArgs >>= ( \case ["all"] -> runAll solutions ("day" : dayNumStrs) -> let dayNums = map read dayNumStrs in runAll (filter (\(a, _, _) -> a `elem` dayNums) solutions) _ -> runAll [last solutions] ) >> printFooter