36 lines
958 B
Haskell
36 lines
958 B
Haskell
module Main (main) where
|
|
|
|
import System.Environment.Blank ( getArgs )
|
|
import Common
|
|
import Task1 (task1)
|
|
import Task2 (task2)
|
|
|
|
main :: IO ()
|
|
main = do
|
|
args <- getArgs
|
|
case args of
|
|
["1", file] -> do
|
|
equations <- readEquationsFromFile file
|
|
print $ task1 equations
|
|
["2", file] -> do
|
|
equations <- readEquationsFromFile file
|
|
print $ task2 equations
|
|
_ -> error "Usage: <1|2> <input file>"
|
|
|
|
readEquationsFromFile :: String -> IO [Equation]
|
|
readEquationsFromFile file = do
|
|
content <- readFile file
|
|
return $ map parseLine $ lines content
|
|
|
|
parseLine :: String -> Equation
|
|
parseLine line = fromWords $ words line
|
|
where
|
|
fromWords :: [String] -> Equation
|
|
fromWords (firstWord:args) = (read $ reverse $ dropFirst $ reverse firstWord, map read args)
|
|
where
|
|
dropFirst :: String -> String
|
|
dropFirst (_:xs) = xs
|
|
dropFirst x = x
|
|
fromWords parts = error $ "Illegal line: " ++ unwords parts
|
|
|