12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/List_rooted_trees
- #
- 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])
- }
|