summaryrefslogtreecommitdiff
path: root/2023/day01/Main_clean.hs
diff options
context:
space:
mode:
Diffstat (limited to '2023/day01/Main_clean.hs')
-rw-r--r--2023/day01/Main_clean.hs25
1 files changed, 25 insertions, 0 deletions
diff --git a/2023/day01/Main_clean.hs b/2023/day01/Main_clean.hs
new file mode 100644
index 0000000..21b18a3
--- /dev/null
+++ b/2023/day01/Main_clean.hs
@@ -0,0 +1,25 @@
+import Data.List
+import Data.Char
+
+wordDict = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
+
+findFirst :: String -> [String] -> Int
+findFirst [] _ = 0
+findFirst s@(x:xs) wordDict
+ | isDigit x = read [x]
+ | Just y <- elemIndex (take 3 s) wordDict = y -- not needed for exercise 1
+ | Just y <- elemIndex (take 4 s) wordDict = y -- not needed for exercise 1
+ | Just y <- elemIndex (take 5 s) wordDict = y -- not needed for exercise 1
+ | otherwise = findFirst xs wordDict
+
+findLast s wordDict = findFirst (reverse s) (map reverse wordDict)
+
+main :: IO ()
+main = do
+ inputLines <- lines <$> getContents
+
+ let intList = map (\x -> findFirst x wordDict * 10 + findLast x wordDict) inputLines
+ let result = sum intList
+
+ print result
+