-- http://i...content-available-to-author-only...e.com/1OIrFf
import Data.List
import Data.Map (keys, fromList, elems)
checkBraces "" = True
checkBraces e = checkBrace e [] where
braceToBraceMap = fromList [('(',')'), ('{','}'), ('[',']')]
openBraces = keys braceToBraceMap
closeBraces = elems braceToBraceMap
braceToBrace brace
= fromJust
$ M
.lookup brace braceToBraceMap
checkBrace
(c:e
) s
| elem c openBraces
= checkBrace e
((braceToBrace c
):s
) checkBrace
(c:e
) (h:s
) | (elem c closeBraces
) && (h
==c
) = checkBrace e s
checkBrace (_:e) _ = False
checkBrace "" [] = True
checkBrace "" _ = False
main
= mapM_ (print . checkBraces
) bracesExpressionExamples
where bracesExpressionExamples =
[
"({[{}]{}[]})",
"({}}{[{}]{}[]})",
"({[{}]{}[]}",
"({[{}]{}]})",
"({[{}{}[]})",
"",
"{}"
]
LS0gaHR0cDovL2kuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tLzFPSXJGZgppbXBvcnQgRGF0YS5MaXN0CmltcG9ydCBEYXRhLk1heWJlCmltcG9ydCBEYXRhLk1hcCAoa2V5cywgZnJvbUxpc3QsIGVsZW1zKSAKaW1wb3J0IERhdGEuTWFwIGFzIE0gKGxvb2t1cCkKY2hlY2tCcmFjZXMgIiIgPSBUcnVlCmNoZWNrQnJhY2VzIGUgPSBjaGVja0JyYWNlIGUgW10gd2hlcmUKCWJyYWNlVG9CcmFjZU1hcCA9IGZyb21MaXN0IFsoJygnLCcpJyksICgneycsJ30nKSwgKCdbJywnXScpXQoJb3BlbkJyYWNlcyA9IGtleXMgYnJhY2VUb0JyYWNlTWFwCgljbG9zZUJyYWNlcyA9IGVsZW1zIGJyYWNlVG9CcmFjZU1hcAoJYnJhY2VUb0JyYWNlIGJyYWNlID0gZnJvbUp1c3QgJCBNLmxvb2t1cCBicmFjZSBicmFjZVRvQnJhY2VNYXAKCWNoZWNrQnJhY2UgKGM6ZSkgcyB8IGVsZW0gYyBvcGVuQnJhY2VzID0gY2hlY2tCcmFjZSBlICgoYnJhY2VUb0JyYWNlIGMpOnMpCgljaGVja0JyYWNlIChjOmUpIChoOnMpIHwgKGVsZW0gYyBjbG9zZUJyYWNlcykgJiYgKGg9PWMpID0gY2hlY2tCcmFjZSBlIHMKCWNoZWNrQnJhY2UgKF86ZSkgXyA9IEZhbHNlCgljaGVja0JyYWNlICIiIFtdID0gVHJ1ZQoJY2hlY2tCcmFjZSAiIiBfID0gRmFsc2UKbWFpbiA9IG1hcE1fIChwcmludCAuIGNoZWNrQnJhY2VzKSBicmFjZXNFeHByZXNzaW9uRXhhbXBsZXMgd2hlcmUKCWJyYWNlc0V4cHJlc3Npb25FeGFtcGxlcyA9IAoJCVsKCQkJIih7W3t9XXt9W119KSIsCgkJCSIoe319e1t7fV17fVtdfSkiLAoJCQkiKHtbe31de31bXX0iLAoJCQkiKHtbe31de31dfSkiLAoJCQkiKHtbe317fVtdfSkiLAoJCQkiIiwKCQkJInt9IgoJCV0=