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);