Browse Source

Day 10

mistress
Agatha Lovelace 2 months ago
parent
commit
d15e8ec49c
  1. 33
      Day10.hs
  2. 35
      Day10_1.hs

33
Day10.hs

@ -0,0 +1,33 @@
module Day10 where
import System.IO (openFile, IOMode (ReadMode), hClose, hGetContents)
import Data.Maybe (mapMaybe)
closing :: Char -> Char
closing '(' = ')'
closing '[' = ']'
closing '{' = '}'
closing '<' = '>'
score :: Char -> Int
score ')' = 3
score ']' = 57
score '}' = 1197
score '>' = 25137
matchBraces :: [Char] -> [Char] -> Maybe Char
matchBraces _ [] = Nothing
matchBraces acc (x:xs)
| x `elem` ['(', '[', '{', '<'] = matchBraces (closing x : acc) xs
| x == head acc = matchBraces (tail acc) xs
| otherwise = Just x
main :: IO ()
main = do
input <- openFile "inputs/10.txt" ReadMode
contents <- hGetContents input
let routes = lines contents
print . sum . map score $ mapMaybe (matchBraces []) routes
hClose input

35
Day10_1.hs

@ -0,0 +1,35 @@
module Day10_1 where
import System.IO (openFile, IOMode (ReadMode), hClose, hGetContents)
import Data.Maybe (mapMaybe)
import Data.List (sort)
closing :: Char -> Char
closing '(' = ')'
closing '[' = ']'
closing '{' = '}'
closing '<' = '>'
score :: Char -> Int
score ')' = 1
score ']' = 2
score '}' = 3
score '>' = 4
matchBraces :: [Char] -> [Char] -> Maybe [Char]
matchBraces [] [] = Nothing
matchBraces acc [] = Just acc
matchBraces acc (x:xs)
| x `elem` ['(', '[', '{', '<'] = matchBraces (closing x : acc) xs
| x == head acc = matchBraces (tail acc) xs
| otherwise = Nothing
main :: IO ()
main = do
input <- openFile "inputs/10.txt" ReadMode
contents <- hGetContents input
let routes = lines contents
print . (\x -> x !! (length x `div` 2)) . sort $ map (foldl (\acc x -> score x + (acc * 5)) 0) $ mapMaybe (matchBraces []) routes
hClose input
Loading…
Cancel
Save