summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Day1.idr30
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