33 lines
764 B
Haskell
33 lines
764 B
Haskell
|
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
|