39 lines
765 B
Text
39 lines
765 B
Text
func bagchain(x, n, bb, start=0) {
|
|
n || return [x]
|
|
|
|
var out = []
|
|
for i in (start .. bb.end) {
|
|
var (c, s) = bb[i]...
|
|
if (c <= n) {
|
|
out += bagchain([x[0] + c, x[1] + s], n-c, bb, i)
|
|
}
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
func bags(n) {
|
|
n || return [[0, ""]]
|
|
var upto = []
|
|
for i in (n ^.. 1) { upto += bags(i) }
|
|
bagchain([0, ""], n-1, upto).map{|p| [p[0]+1, '('+p[1]+')'] }
|
|
}
|
|
|
|
func replace_brackets(s) {
|
|
var (depth, out) = (0, [])
|
|
for c in s {
|
|
if (c == '(') {
|
|
out.append(<( [ {>[depth%3])
|
|
++depth
|
|
}
|
|
else {
|
|
--depth
|
|
out.append(<) ] }>[depth%3])
|
|
}
|
|
}
|
|
return out.join
|
|
}
|
|
|
|
for x in (bags(5)) {
|
|
say replace_brackets(x[1])
|
|
}
|