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;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 |