179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/split/configuration.rb', line 179
def normalize_alternatives(alternatives)
given_probability, num_with_probability = alternatives.inject([0, 0]) do |a, v|
p, n = a
if percent = value_for(v, :percent)
[p + percent, n + 1]
else
a
end
end
num_without_probability = alternatives.length - num_with_probability
unassigned_probability = ((100.0 - given_probability) / num_without_probability / 100.0)
if num_with_probability.nonzero?
alternatives = alternatives.map do |v|
if (name = value_for(v, :name)) && (percent = value_for(v, :percent))
{ name => percent / 100.0 }
elsif name = value_for(v, :name)
{ name => unassigned_probability }
else
{ v => unassigned_probability }
end
end
[alternatives.shift, alternatives]
else
alternatives = alternatives.dup
[alternatives.shift, alternatives]
end
end
|