178
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
|
# File 'lib/unitmanager/unit_composition.rb', line 178
def Optimizer.process(params)
raise "Incoming parameter has to respond to [] method" unless params.respond_to?(:[])
coefficient = params[:coefficient] || 1
dividends = [] + (params[:dividends] || [])
divisors = [] + (params[:divisors] || [])
base_dividends = base(dividends)
base_divisors = base(divisors)
base_dividends.each_index { | i |
if index = base_divisors.index(base_dividends[i])
coefficient *= dividends[i].to_base(1.0)
coefficient /= divisors[index].to_base(1.0)
dividends[i] = divisors[index] = base_divisors[index] = nil
end
}
return {
:coefficient => coefficient,
:dividends => dividends.compact,
:divisors => divisors.compact
}
end
|