summary refs log tree commit diff
path: root/1/2.hs
diff options
context:
space:
mode:
Diffstat (limited to '1/2.hs')
-rw-r--r--1/2.hs19
1 files changed, 19 insertions, 0 deletions
diff --git a/1/2.hs b/1/2.hs
new file mode 100644
index 0000000..dd932d5
--- /dev/null
+++ b/1/2.hs
@@ -0,0 +1,19 @@
+import Prelude
+import Text.Read
+import Data.Maybe
+import Data.List
+import Data.Monoid
+import System.Environment
+
+digits = ["one","two","three","four","five","six","seven","eight","nine"]
+
+parse [] = (mempty,mempty)
+parse l@(x:xs) = case findIndex (`isPrefixOf` l) digits of
+  Just i -> f (Just $ i+1) <> parse xs
+  Nothing -> f (readMaybe [x]) <> parse xs
+  where
+    f = (,) . First <*> Last
+
+add (First x, Last y) = (+) . (*10) <$> x <*> y
+
+main = head <$> getArgs >>= readFile >>= print . sum . catMaybes . map (add . parse) <$> lines