Skip to content

Instantly share code, notes, and snippets.

@okovalov
Last active February 24, 2019 21:45
Show Gist options
  • Save okovalov/fe7ac821ebc8c5da12b9fd8d2c1eae48 to your computer and use it in GitHub Desktop.
Save okovalov/fe7ac821ebc8c5da12b9fd8d2c1eae48 to your computer and use it in GitHub Desktop.
const isOpen = (parenthesisChar, pts) => pts.filter(pt => pt[0] === parenthesisChar).length
const matches = (topOfStack, closed, pts) => pts.filter(pt => pt[0] === topOfStack && pt[1] === closed).length
const getValidCharacters = patterns => patterns.map(p => p.join('')).join('')
const verify = string => {
const charactersArr = string.split('')
const patterns = [
['(', ')'],
['[', ']'],
['<', '>'],
]
const validCharacters = getValidCharacters(patterns).split('')
const tempStack = []
let result = true
for (let idx in charactersArr) {
char = charactersArr[idx]
if(!validCharacters.includes(char)) {
continue
}
if (isOpen(char, patterns)) {
tempStack.push(char)
continue
}
if (tempStack.length === 0) {
result = false
break
}
const top = tempStack.pop()
if (!matches(top, char, patterns)) {
result = false
break
}
}
console.log(`Result for "${string}" is ${result}`)
return result
}
verify("---(++++)----") // -> 1
verify("") // -> 1
verify("before ( middle []) after ") // -> 1
verify(") (") // -> 0
verify("<( >)") // -> 0
verify("( [ <> () ] <> )") // -> 1
verify(" ( [)") // -> 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment