Another approach to day 1
[advent-of-code-17.git] / adventofcode1701 / app / advent01verbose.hs
diff --git a/adventofcode1701/app/advent01verbose.hs b/adventofcode1701/app/advent01verbose.hs
new file mode 100644 (file)
index 0000000..a09046c
--- /dev/null
@@ -0,0 +1,32 @@
+{-# LANGUAGE NegativeLiterals #-}
+
+module Main(main) where
+
+import Data.List (tails)
+
+main :: IO ()
+main = do 
+        digits <- readFile "data/advent01.txt"
+        print $ part1 digits
+        print $ part2 digits
+
+part1 :: String -> Integer  
+part1 = sum_valid_pairs . part1_extract
+
+part2 :: String -> Integer  
+part2 = sum_valid_pairs . part2_extract
+
+part1_extract :: String -> [String]  
+part1_extract digits =  map (take 2) $ tails (digits ++ [head digits])
+
+part2_extract :: String -> [String]
+part2_extract digits = map (\ds -> (take 1 ds) ++ (take 1 $ drop offset ds)) 
+        $ take (length digits) 
+        $ tails (digits ++ digits)
+    where offset = length digits `div` 2
+
+sum_valid_pairs :: [String] -> Integer
+sum_valid_pairs possibles = sum $ map (read . take 1) 
+                   $ filter (\(x:y:_) -> x == y) 
+                   $ filter (\p -> length p == 2) possibles
+                       
\ No newline at end of file