Last active
February 24, 2019 21:45
-
-
Save okovalov/fe7ac821ebc8c5da12b9fd8d2c1eae48 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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