interviews-in23/Main.hs

42 lines
1.1 KiB
Haskell
Raw Permalink Normal View History

2023-12-02 16:38:53 +01:00
{-# LANGUAGE OverloadedStrings #-}
module Main where
2023-12-02 16:54:37 +01:00
import Data.Attoparsec.Text (parseOnly)
2023-12-05 21:00:32 +01:00
import Data.Either (fromRight)
import Options.Applicative
2023-12-02 16:38:53 +01:00
import qualified Data.Text.IO as T
2023-12-02 16:54:37 +01:00
import INAST
import INSolver
2023-12-02 16:38:53 +01:00
2023-12-05 21:00:32 +01:00
data FCInsurersOpt = FCInsurersOpt
{ path :: FilePath
, intInput :: Int
}
fCInsurersOpt :: Parser FCInsurersOpt
fCInsurersOpt = FCInsurersOpt
<$> strOption
( long "network"
<> metavar "PATH"
<> help "the path to a file that defines a network" )
<*> option auto
( long "input"
<> metavar "INT"
<> help "an integer input to the network" )
2023-12-02 16:38:53 +01:00
main :: IO ()
2023-12-05 21:00:32 +01:00
main = fcinsurers =<< execParser opts
where
opts = info (fCInsurersOpt <**> helper)
( fullDesc
<> progDesc "A small command line program that outputs a list of the \
\ fewest contributing insurers (by their integer ids)"
<> header "Fewest Contributing Insurers (in23)" )
fcinsurers :: FCInsurersOpt -> IO ()
fcinsurers (FCInsurersOpt p i) = do
inputNetwork <- T.readFile p
print $ fromRight [] $ solve i <$> parseOnly insuranceNetworkParser inputNetwork