189 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			189 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | id: 594dc6c729e5700999302b45 | ||
|  | title: Balanced brackets | ||
|  | challengeType: 5 | ||
|  | forumTopicId: 302230 | ||
|  | dashedName: balanced-brackets | ||
|  | --- | ||
|  | 
 | ||
|  | # --description--
 | ||
|  | 
 | ||
|  | Determine whether a generated string of brackets is balanced; that is, whether it consists entirely of pairs of opening/closing brackets (in that order), none of which mis-nest. | ||
|  | 
 | ||
|  | **Examples:** | ||
|  | | Input                     | Output | | ||
|  | | ------------------------- | ------ | | ||
|  | | <code>\[]</code> | true   | | ||
|  | | <code>]\[</code> | false  | | ||
|  | | <code>[][]</code> | true   | | ||
|  | | <code>]\[]</code> | false  | | ||
|  | | <code>\[]]\[\[]</code> | false  | | ||
|  | | <code>\[\[\[\[]]]]</code> | true   | | ||
|  | 
 | ||
|  | # --hints--
 | ||
|  | 
 | ||
|  | `isBalanced` should be a function. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(typeof isBalanced === 'function'); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[]")` should return true. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(isBalanced(testCases[0])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("]][[[][][][]][")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[1])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[][[[[][][[[]]]]]]")` should return true. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(isBalanced(testCases[2])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[3])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[[[]]]][[]")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[4])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][[]")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[5])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][[][]][[[]]")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[6])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[[][]]][")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[7])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[[[]]][[]]]][][[")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[8])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[]][[]]][[[[][]]")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[9])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][]][[][")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[10])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[[]][[][]]")` should return true. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(isBalanced(testCases[11])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[[]]")` should return true. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(isBalanced(testCases[12])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("]][]][[]][[[")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[13])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][]][][[")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[14])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("][][")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[15])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("[]]]")` should return false. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(!isBalanced(testCases[16])); | ||
|  | ``` | ||
|  | 
 | ||
|  | `isBalanced("")` should return true. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(isBalanced(testCases[17])); | ||
|  | ``` | ||
|  | 
 | ||
|  | # --seed--
 | ||
|  | 
 | ||
|  | ## --after-user-code--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | const testCases = [ | ||
|  |   '[]', | ||
|  |   ']][[[][][][]][', | ||
|  |   '[][[[[][][[[]]]]]]', | ||
|  |   '][', | ||
|  |   '[[[]]]][[]', | ||
|  |   '][[]', | ||
|  |   '][[][]][[[]]', | ||
|  |   '[[][]]][', | ||
|  |   '[[[]]][[]]]][][[', | ||
|  |   '[]][[]]][[[[][]]', | ||
|  |   '][]][[][', | ||
|  |   '[[]][[][]]', | ||
|  |   '[[]]', | ||
|  |   ']][]][[]][[[', | ||
|  |   '][]][][[', | ||
|  |   '][][', | ||
|  |   '[]]]', | ||
|  |   '' | ||
|  | ]; | ||
|  | ``` | ||
|  | 
 | ||
|  | ## --seed-contents--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function isBalanced(str) { | ||
|  | 
 | ||
|  |   return true; | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | # --solutions--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function isBalanced(str) { | ||
|  |   if (str === '') return true; | ||
|  |   let a = str; | ||
|  |   let b; | ||
|  |   do { | ||
|  |     b = a; | ||
|  |     a = a.replace(/\[\]/g, ''); | ||
|  |   } while (a !== b); | ||
|  |   return !a; | ||
|  | } | ||
|  | ``` |