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
Factor, take 2: much longer, much faster:
USING: kernel regexp command-line namespaces sequences io math.combinatorics math.parser math strings ;
IN: l
: g ( s -- ? )
R/ (\{\}|\(\)|\[\])/
[
2dup re-contains?
pick empty? not
and
] [
[ "" re-replace ] keep
] while drop empty?
;
: a ( n -- )
2 -
dup neg? [ drop ] [
dup 0 = [ drop "{}" "[]" "()" [ print ] tri@ ] [
"{[(" "}])" cartesian-product concat swap
"(){}[]" swap [
over
[
[ dup ] dip
[ first ] [ last ] bi [ 1string ] bi@
surround
dup g [ print ] [ drop ] if
] each drop
] each-selection drop
] if
] if
;
MAIN: [ command-line get [ string>number a ] each ]