Bracket Inc. wants to ship out new products using their excess brackets. They have tasked you with generating every possible assortment of brackets for some n brackets where the brackets will match

  • A bracket match is an opening and closing version of the same kind of bracket beside each other ()
  • If a bracket matches then outer brackets can also match (())
  • n will be an even number
  • The valid brackets are ()[]{}

For example for n = 4 the options are

  • ()()
  • (())
  • [][]
  • [[]]
  • {}{}
  • {{}}
  • []()
  • ()[]
  • (){}
  • {}()
  • []{}
  • {}[]
  • ({})
  • {()}
  • ([])
  • [()]
  • {[]}
  • [{}]

You must accept n as a command line argument (entered when your app is ran) and print out all of the matches, one per line

(It will be called like node main.js 4 or however else to run apps in your language)

You can use the solution tester in this post to test you followed the correct format https://programming.dev/post/1805174

Any programming language may be used. 2 points will be given if you pass all the test cases with 1 bonus point going to whoevers performs the quickest and 1 for whoever can get the least amount of characters

To submit put the code and the language you used below

  •  brie   ( @brie@beehaw.org ) 
    link
    fedilink
    English
    11 year ago

    Probably doesn’t count since the lines are out of order, but here’s a first attempt at a C solution.

    #include <stdio.h>
    
    char const brackets[6] = "()[]{}";
    
    void combo(int pairs, int seed)
    {
    	if (pairs <= 0) {
    		return;
    	}
    	char const *pair = brackets + ((seed % 3) << 1);
    	if (pairs == 1) {
    		putchar(pair[0]);
    		putchar(pair[1]);
    	} else {
    		putchar(pair[0]);
    		if (seed & 1) {
    			combo(pairs - 1, seed / 6);
    			putchar(pair[1]);
    		} else {
    			putchar(pair[1]);
    			combo(pairs - 1, seed / 6);
    		}
    	}
    }
    
    int main(int argc, char **argv)
    {
    	int n;
    	size_t combos = 1;
    	size_t i;
    
    	sscanf(argv[1], "%d", &n);
    	for (i = 0; i < n; i += 2) {
    		combos *= 6;
    	}
    	combos >>= 1;
    	int pairs = n / 2;
    	for (i = 0; i < combos; i++) {
    		combo(pairs, i);
    		puts("");
    	}
    	return 0;
    }