summaryrefslogtreecommitdiff
path: root/2023/day01/Main.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.hs
parenta1895fe157e06ee4d119576163ea76390b3d402c (diff)
AoC 2023HEADmain
Diffstat (limited to '2023/day01/Main.hs')
-rw-r--r--2023/day01/Main.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/2023/day01/Main.hs b/2023/day01/Main.hs
new file mode 100644
index 0000000..5f31582
--- /dev/null
+++ b/2023/day01/Main.hs
@@ -0,0 +1,34 @@
+import Data.List
+import Data.Char
+
+-- isDigit :: Char -> Bool
+-- isDigit c = c >= '0' && c <= '9'
+
+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
+ | Just y <- elemIndex (take 4 s) wordDict = y
+ | Just y <- elemIndex (take 5 s) wordDict = y
+ | otherwise = findFirst xs wordDict
+
+rev [] = []
+rev (x:xs) = rev xs ++ [x]
+
+main :: IO ()
+main = do
+ inputLines <- lines <$> getContents
+
+ let filterLines = map (filter isDigit) inputLines
+ let outerChars = map (\x -> [head x, last x]) filterLines
+ mapM_ putStrLn outerChars
+
+ let intList = map read outerChars :: [Int]
+ -- let intList = map (\x -> findFirst x wordDict * 10 + findFirst (rev x) (map rev wordDict)) inputLines
+ let result = sum intList
+
+ putStrLn $ show result
+