summaryrefslogtreecommitdiff
path: root/2023/day01/Main_clean.hs
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
committerOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
commitc6075f736e67e47b940abb9c1a0c54753d4b55b8 (patch)
tree69d827646e615e00f91ef54361cc1701e4f0eff7 /2023/day01/Main_clean.hs
parenta1895fe157e06ee4d119576163ea76390b3d402c (diff)
AoC 2023HEADmain
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
+