2023-08-27 22:30:00 +02:00
|
|
|
{-# LANGUAGE LambdaCase #-}
|
|
|
|
|
|
|
|
|
|
module Main where
|
|
|
|
|
|
2023-11-18 09:45:28 +01:00
|
|
|
import Data.List (uncons)
|
|
|
|
|
import Data.Maybe (mapMaybe)
|
2024-11-29 09:07:09 +01:00
|
|
|
import Lib
|
|
|
|
|
import System.Environment (getArgs)
|
2023-08-27 22:30:00 +02:00
|
|
|
|
2023-08-30 09:32:12 +02:00
|
|
|
paths :: [FilePath]
|
|
|
|
|
paths =
|
2024-11-29 09:07:09 +01:00
|
|
|
[ "./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"
|
|
|
|
|
]
|
2023-08-28 18:40:38 +02:00
|
|
|
|
2023-08-30 09:32:12 +02:00
|
|
|
solutions :: [(Int, Day, FilePath)]
|
2023-11-18 09:45:28 +01:00
|
|
|
solutions =
|
|
|
|
|
let maybeSolutions = zip3 [1 ..] days paths
|
|
|
|
|
available (num, daySolutions, filepath) = do
|
|
|
|
|
(firstSolution, _) <- uncons daySolutions
|
|
|
|
|
return (num, firstSolution, filepath)
|
|
|
|
|
in mapMaybe available maybeSolutions
|
2023-08-30 09:32:12 +02:00
|
|
|
|
2023-08-28 18:40:38 +02:00
|
|
|
runAll :: [(Int, Day, FilePath)] -> IO ()
|
|
|
|
|
runAll = mapM_ (\(dayNum, day, path) -> run day path >>= printDR dayNum)
|
|
|
|
|
|
2023-08-27 22:30:00 +02:00
|
|
|
usage :: IO ()
|
|
|
|
|
usage = putStrLn "./Main"
|
|
|
|
|
|
|
|
|
|
main :: IO ()
|
|
|
|
|
main =
|
2024-11-29 09:07:09 +01:00
|
|
|
printHeader
|
|
|
|
|
>> getArgs
|
|
|
|
|
>>= ( \case
|
2023-08-30 10:02:11 +02:00
|
|
|
["all"] -> runAll solutions
|
2024-11-29 09:07:09 +01:00
|
|
|
("day" : dayNumStrs) ->
|
|
|
|
|
let dayNums = map read dayNumStrs
|
|
|
|
|
in runAll (filter (\(a, _, _) -> a `elem` dayNums) solutions)
|
|
|
|
|
_ -> runAll [last solutions]
|
|
|
|
|
)
|
|
|
|
|
>> printFooter
|