{-# LANGUAGE LambdaCase #-} module Main where import Lib import System.Environment (getArgs) import Data.List (uncons) import Data.Maybe (mapMaybe) 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/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 _ -> runAll [last solutions]) >> printFooter