Files
aoc-2022/app/Main.hs
Christian e4eb5a2b9b Day 23
Sadly too slow
2024-11-29 09:07:09 +01:00

65 lines
1.4 KiB
Haskell

{-# 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