-- http://i...content-available-to-author-only...e.com/sZ9tiN
import Data.List
checkBraces "" = True
checkBraces e = checkBrace e [] where
openBraces = "({["
closeBraces = ")}]"
braceToBrace fromBraces toBraces brace = toBraces!!(fromJust $ elemIndex brace fromBraces)
otcBrace = braceToBrace openBraces closeBraces
checkBrace
(c:e
) s
| elem c openBraces
= checkBrace e
((otcBrace 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 =
[
"({[{}]{}[]})",
"({}}{[{}]{}[]})",
"({[{}]{}[]}",
"({[{}]{}]})",
"({[{}{}[]})",
"",
"{}"
]
LS0gaHR0cDovL2kuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tL3NaOXRpTgppbXBvcnQgRGF0YS5MaXN0CmltcG9ydCBEYXRhLk1heWJlCmNoZWNrQnJhY2VzICIiID0gVHJ1ZQpjaGVja0JyYWNlcyBlID0gY2hlY2tCcmFjZSBlIFtdIHdoZXJlCglvcGVuQnJhY2VzID0gIih7WyIKCWNsb3NlQnJhY2VzID0gIil9XSIKCWJyYWNlVG9CcmFjZSBmcm9tQnJhY2VzIHRvQnJhY2VzIGJyYWNlID0gdG9CcmFjZXMhIShmcm9tSnVzdCAkIGVsZW1JbmRleCBicmFjZSBmcm9tQnJhY2VzKQoJb3RjQnJhY2UgPSBicmFjZVRvQnJhY2Ugb3BlbkJyYWNlcyBjbG9zZUJyYWNlcwoJY2hlY2tCcmFjZSAoYzplKSBzIHwgZWxlbSBjIG9wZW5CcmFjZXMgPSBjaGVja0JyYWNlIGUgKChvdGNCcmFjZSBjKTpzKQoJY2hlY2tCcmFjZSAoYzplKSAoaDpzKSB8IChlbGVtIGMgY2xvc2VCcmFjZXMpICYmIChoPT1jKSA9IGNoZWNrQnJhY2UgZSBzCgljaGVja0JyYWNlIChfOmUpIF8gPSBGYWxzZQoJY2hlY2tCcmFjZSBbXSBbXSA9IFRydWUKCWNoZWNrQnJhY2UgW10gXyA9IEZhbHNlCm1haW4gPSBtYXBNXyAocHJpbnQgLiBjaGVja0JyYWNlcykgYnJhY2VzRXhwcmVzc2lvbkV4YW1wbGVzIHdoZXJlCglicmFjZXNFeHByZXNzaW9uRXhhbXBsZXMgPSAKCQlbCgkJCSIoe1t7fV17fVtdfSkiLAoJCQkiKHt9fXtbe31de31bXX0pIiwKCQkJIih7W3t9XXt9W119IiwKCQkJIih7W3t9XXt9XX0pIiwKCQkJIih7W3t9e31bXX0pIiwKCQkJIiIsCgkJCSJ7fSIKCQld