Skip to content

Instantly share code, notes, and snippets.

@khannurien
Last active July 2, 2021 06:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khannurien/587f47a936320623d2217bd7626c6a55 to your computer and use it in GitHub Desktop.
Save khannurien/587f47a936320623d2217bd7626c6a55 to your computer and use it in GitHub Desktop.
Contrived functional solution to a classic coding interview question.
const values = [
null, 'abc', '',
'()', '[]',
'([])', '[()]',
'([]())', '[[]()]',
'([][]())', '[[[()()]()]()]',
'(abc)', '[]def', 'ijk[]()',
'[a(b)c]', 'x[a(b)c]y',
'x[a(b)c]', '[a(b)c]y',
'[([[]])]', '[][(]',
']()', '([)]',
']', '[',
];
const matches = {
'(': ')',
'[': ']',
}
if (!values || values.length === 0) return true;
const scores = values.map((value) => {
if (!value || value.length === 0) return true;
const stack = [];
return [...value]
.map((char) => {
Object.keys(matches).some(c => c === char)
&& stack.push(char);
return !(Object.values(matches).some(c => c === char)
&& matches[stack.pop()] !== char);
})
.reduce((previous, current) =>
previous && current,
true
) && stack.length === 0;
});
const result = Object.fromEntries(values.map((_, i) => [values[i], scores[i]]));
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment