Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { strict as assert } from "assert";
- function getOpener(type: string):string {
- switch (type) {
- case ")":
- return "("
- case "]":
- return "[";
- case "}":
- return "{"
- default:
- return "";
- }
- }
- /**
- *
- * @param bracket
- * Return the lower priority brackets for a given bracket
- */
- function getLower(bracket:string):Array<string> {
- switch (bracket) {
- case "]":
- return ["("]
- case "}":
- return ["(", "["]
- default:
- return []
- }
- }
- /**
- *
- * @param bracket the actual bracket in the bracket list
- * @param bracketMapKeys array of openned brackets from the list
- * check if it has lower priority bracket openned in the bracket list
- */
- function hasLower(bracket:string, bracketMapKeys:Array<string>):boolean {
- const lower:Array<string> = getLower(bracket);
- for (let i=0; i < lower.length; i++) {
- if (bracketMapKeys.includes(lower[i])) return true;
- }
- return false;
- }
- function bracketTester(data: string): boolean {
- const openers = ['{', '[', '('];
- const brackets = data.split(" ");
- let bracketMap = {};
- for (let i in brackets) {
- let element = brackets[i];
- if (openers.includes(element)) {
- if (bracketMap[element]){
- return false;
- } else {
- bracketMap[element] = true;
- }
- } else {
- if (hasLower(element, Object.keys(bracketMap))) {
- return false;
- }
- const opener = getOpener(element)
- if (bracketMap[opener]) {
- delete bracketMap[opener]
- } else {
- return false;
- }
- }
- }
- return !Object.keys(bracketMap).length;
- }
- const data = {
- "{ [ ] ( ) }": true,
- "{ [ ( ] ) }": false,
- "{ [ }": false,
- "} ( )": false
- }
- for (let brackets in data) {
- assert(bracketTester(brackets) === data[brackets], `Fail: ${brackets}`);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement