fork(6) download
  1. # your code goes here$a=0
  2. $a=1
  3. class Node
  4. attr_accessor :rank
  5. attr_accessor :children
  6. attr_accessor :parent
  7.  
  8. def initialize
  9. @parent=nil
  10. @children=[]
  11. end
  12.  
  13. def dup()
  14. result=Node.new
  15. result.rank=@rank
  16. @children.each{|c|
  17. x=c.dup()
  18. x.parent=result
  19. result.children<<x
  20. }
  21. return result
  22. end
  23.  
  24. def leaf()
  25. return self if(children.length==0)
  26. return @children.last.leaf
  27. end
  28.  
  29. def succ()
  30. # $a+=1
  31. l=leaf()
  32. p=l.parent
  33. return false if(p==nil)
  34. p.children.pop
  35. pp=p.parent
  36. if(pp!=nil)
  37. then
  38. $a.times{
  39. n=p.dup
  40. n.parent=pp
  41. pp.children<<n
  42. }
  43. else
  44. pp=p
  45. end
  46.  
  47. if(l.rank>0)
  48. then
  49. n=generate($a,l.rank-1)
  50. n.parent=pp
  51. pp.children<<n
  52. end
  53. return true
  54. end
  55.  
  56. def dump()
  57. lp_list=["(","[","<","{"]
  58. rp_list=[")","]",">","}"]
  59. if @rank>3
  60. lp="{"
  61. rp="}"
  62. else
  63. lp=lp_list[@rank]
  64. rp=rp_list[@rank]
  65. end
  66. return lp+children.collect{|c| c.dump()}.join()+rp
  67. end
  68. end
  69.  
  70. def generate(i,rank)
  71. n=Node.new
  72. n.rank=rank
  73. return n if(i==0)
  74. c=generate(i-1,rank)
  75. c.parent=n
  76. n.children<<c
  77. return n
  78. end
  79.  
  80. x=generate(1,3)
  81. i=0
  82. print x.dump,"\n"
  83. while(x.succ)
  84. print x.dump,"\n"
  85. i+=1
  86. break if(i>100)
  87. end
Success #stdin #stdout 0.02s 9776KB
stdin
Standard input is empty
stdout
{{}}
{<<>>}
{<><>[[]]}
{<><>[][](())}
{<><>[][]()()}
{<><>[][]()}
{<><>[][]}
{<><>[](())}
{<><>[]()()}
{<><>[]()}
{<><>[]}
{<><>(())}
{<><>()()}
{<><>()}
{<><>}
{<>[[]]}
{<>[][](())}
{<>[][]()()}
{<>[][]()}
{<>[][]}
{<>[](())}
{<>[]()()}
{<>[]()}
{<>[]}
{<>(())}
{<>()()}
{<>()}
{<>}
{[[]]}
{[][](())}
{[][]()()}
{[][]()}
{[][]}
{[](())}
{[]()()}
{[]()}
{[]}
{(())}
{()()}
{()}
{}