diff options
author | cos <cos> | 2023-12-01 23:58:06 +0100 |
---|---|---|
committer | cos <cos> | 2023-12-03 14:55:14 +0100 |
commit | 9cd5b11547e2805359271703944e316cc071eb67 (patch) | |
tree | 27a406e72329a5815f2583c71f3be2bf934c6585 /2023/haskell/day01 | |
parent | aefd26f3d7bf22bbc3f29c1f2cb18e91c28cf363 (diff) | |
download | adventofcode-9cd5b11547e2805359271703944e316cc071eb67.zip |
Diffstat (limited to '2023/haskell/day01')
-rw-r--r-- | 2023/haskell/day01/part1.hs | 17 | ||||
-rw-r--r-- | 2023/haskell/day01/part2.hs | 31 |
2 files changed, 48 insertions, 0 deletions
diff --git a/2023/haskell/day01/part1.hs b/2023/haskell/day01/part1.hs new file mode 100644 index 0000000..65ea098 --- /dev/null +++ b/2023/haskell/day01/part1.hs @@ -0,0 +1,17 @@ +import Data.Char +import System.Environment +import System.IO + +main :: IO () +main = do + args <- getArgs + case args of + [filename] -> do + fh <- openFile filename ReadMode + lines <- lines <$> readFile filename + let digits = map (\line -> [c | c <- line, isDigit c ]) lines + let numbers = map (\line -> head line : [last line]) digits + let ints = map (\num -> read num :: Int ) numbers + let part1 = sum ints + print part1 + _ -> putStrLn "Missing input filename." diff --git a/2023/haskell/day01/part2.hs b/2023/haskell/day01/part2.hs new file mode 100644 index 0000000..a99fabf --- /dev/null +++ b/2023/haskell/day01/part2.hs @@ -0,0 +1,31 @@ +import Data.Char +import Data.List +import System.Environment +import System.IO + +fixInput str + | "one" `isPrefixOf` str = '1' + | "two" `isPrefixOf` str = '2' + | "three" `isPrefixOf` str = '3' + | "four" `isPrefixOf` str = '4' + | "five" `isPrefixOf` str = '5' + | "six" `isPrefixOf` str = '6' + | "seven" `isPrefixOf` str = '7' + | "eight" `isPrefixOf` str = '8' + | "nine" `isPrefixOf` str = '9' + | otherwise = head str + +main :: IO () +main = do + args <- getArgs + case args of + [filename] -> do + fh <- openFile filename ReadMode + lines <- lines <$> readFile filename + let fixed = [ [ fixInput part | part <- tails line, part /= "" ] | line <- lines ] + let digits = map (\line -> [c | c <- line, isDigit c ]) fixed + let numbers = map (\line -> head line : [last line]) digits + let ints = map (\num -> read num :: Int ) numbers + let part2 = sum ints + print part2 + _ -> putStrLn "Missing input filename." |