|
possible.rb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Possibility
16 attr_reader :count, :table, :type, :params, :c_size
17
18 def initialize(params=Array.new)
19 @count = 0
20 @table = Array.new
21 @type = ""
22 @params = params
23 end
24
25 def setParams(params)
26 @params.replace(params)
27 end
28
29 def addParam(param)
30 @params.push(param)
31 end
32
33 def getCombos(size=@params.length)
34 @c_size = size
35 @type = "combination"
36 @table.clear
37 combination(@params,Array.new)
38 @table.uniq!
39 @count = @table.length
40 return @count
41 end
42
43 def getPerms()
44 @c_size = 0 45 @type = "permutation"
46 @table.clear
47 permutation(@params,Array.new)
48 @count = @table.length
49 return @count
50 end
51
52 private
53
54 55 def combination(params,str)
56 if(str.length == @c_size)
57 @table.push(str)
58 else
59 if(params.length == 1)
60 @table.push(str.push(params[0]))
61 else
62 params.each_with_index do |item,i|
63 newstr = str.dup.push(item)
64 newparams = params.dup
65 newparams.slice!(i)
66 combination(newparams,newstr)
67 end
68 end
69 end
70 return 0
71 end
72
73 74 def permutation(params,str)
75 if(str.length == @params.length)
76 @table.push(str)
77 else
78 params[0].each do |item|
79 newstr = str.dup
80 newstr.push(item)
81 newparams = params.dup
82 newparams.slice!(0)
83 permutation(newparams,newstr)
84 end
85 end
86 return 0
87 end
88 end
89
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
112 c = Possibility.new( ['1','1','2','3'] )
113 c.getCombos(3)
114 puts c.type, c.params.join(',')
115 puts "total: #{c.count}"
116 c.table.each do |combo|
117 puts combo.join(' ')
118 end
119
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
146 p = Possibility.new()
147 4.times { p.addParam([0,1]) }
148 p.getPerms()
149 puts p.type
150 print p.params.map {|param| '['+param.join(',')+']'},"\n"
151 puts "total: #{p.count}"
152 p.table.each do |perm|
153 puts perm.join(' ')
154 end
|