JSFiddle - React, Tailwind, and code Playground
by vigneshwaranr
JavaScript
/*def balance(chars: List[Char]): Boolean = {
def balanced(chars: List[Char], open: Int): Boolean =
if (chars.isEmpty) open == 0
else if (chars.head == '(') balanced(chars.tail, open + 1)
else if (chars.head == ')') open > 0 && balanced(chars.tail, open - 1)
else balanced(chars.tail, open)
balanced(chars, 0)
}*/
var check = function (str, expected) {
var result = isOpen(str) === expected;
console.log(str + ": " + (result ? "pass" : "fail"));
};
var start = '{$';
var end = '$}';
var isOpen = function (str, open) {
if (open === undefined) { return isOpen(str, 0); }
if (str.length === 0) { return open !== 0; }
else if (str.indexOf(start) === 0) { return isOpen(str.substring(start.length), open + 1); }
else if (str.indexOf(end) === 0) { return open > 0 && isOpen(str.substring(end.length), open - 1); }
else { return isOpen(str.substring(1), open); }
};
check('', false);
check('abc', false);
check('abc$}', false);
check('abc{$cde', true);
check('abc${cde', false);
check('{$abcdef', true);
check('abc{$$}', false);
check('abc{$}', true);
check('abc{$Apple$}', false);
check('abc{$Apple$}Orange', false);
check('abc{$Apple$}Orange{$', true);
check('abc{$Apple$}Orange{$omg', true);
check('abc{$Apple$}Orange{$def}', true);
check('abc{$Apple$}Orange{$def$}', false);
check('abc{$Apple$}Orange{$def}', true);
check('abc{$Apple$}Orange{$def}ohla', true);
check('abc{$Apple$}Orange{$def$}ohla', false);