Advertisement
Guest User

Untitled

a guest
Jul 15th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. import { strict as assert } from "assert";
  2.  
  3. function getOpener(type: string):string {
  4. switch (type) {
  5. case ")":
  6. return "("
  7. case "]":
  8. return "[";
  9. case "}":
  10. return "{"
  11. default:
  12. return "";
  13. }
  14. }
  15.  
  16. /**
  17. *
  18. * @param bracket
  19. * Return the lower priority brackets for a given bracket
  20. */
  21. function getLower(bracket:string):Array<string> {
  22. switch (bracket) {
  23. case "]":
  24. return ["("]
  25. case "}":
  26. return ["(", "["]
  27. default:
  28. return []
  29. }
  30. }
  31.  
  32. /**
  33. *
  34. * @param bracket the actual bracket in the bracket list
  35. * @param bracketMapKeys array of openned brackets from the list
  36. * check if it has lower priority bracket openned in the bracket list
  37. */
  38.  
  39. function hasLower(bracket:string, bracketMapKeys:Array<string>):boolean {
  40. const lower:Array<string> = getLower(bracket);
  41. for (let i=0; i < lower.length; i++) {
  42. if (bracketMapKeys.includes(lower[i])) return true;
  43. }
  44. return false;
  45. }
  46.  
  47. function bracketTester(data: string): boolean {
  48. const openers = ['{', '[', '('];
  49. const brackets = data.split(" ");
  50. let bracketMap = {};
  51. for (let i in brackets) {
  52. let element = brackets[i];
  53. if (openers.includes(element)) {
  54. if (bracketMap[element]){
  55. return false;
  56. } else {
  57. bracketMap[element] = true;
  58. }
  59. } else {
  60. if (hasLower(element, Object.keys(bracketMap))) {
  61. return false;
  62. }
  63. const opener = getOpener(element)
  64. if (bracketMap[opener]) {
  65. delete bracketMap[opener]
  66. } else {
  67. return false;
  68. }
  69. }
  70. }
  71. return !Object.keys(bracketMap).length;
  72. }
  73.  
  74. const data = {
  75. "{ [ ] ( ) }": true,
  76. "{ [ ( ] ) }": false,
  77. "{ [ }": false,
  78. "} ( )": false
  79. }
  80.  
  81. for (let brackets in data) {
  82. assert(bracketTester(brackets) === data[brackets], `Fail: ${brackets}`);
  83.  
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement