diff options
Diffstat (limited to 'src/Day1.idr')
-rw-r--r-- | src/Day1.idr | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Day1.idr b/src/Day1.idr new file mode 100644 index 0000000..12e9217 --- /dev/null +++ b/src/Day1.idr @@ -0,0 +1,30 @@ +module Day1 + +import System +import System.File +import Data.String +import Text.Parser + +parsePair : String -> Maybe (Int, Int) +parsePair pair = do + num1 <- parseInteger (fst p1) + num2 <- parseInteger (snd p2) + pure (num1, num2) where + p1 = span (/= ' ') pair + p2 = span (== ' ') (snd p1) + +parseStr : String -> List (Int, Int) +parseStr str = do + nums <- lines str + maybe [] pure (parsePair nums) + +transposePairs : List (a, b) -> (List a, List b) +transposePairs [] = ([], []) +transposePairs (x :: xs) = ((fst x) :: (fst rest), (snd x) :: (snd rest)) where + rest = transposePairs xs + +main : IO () +main = do + estr <- readFile "data/day1.txt" + str <- either (die . show) pure estr + putStrLn $ show $ transposePairs $ parseStr str |