Русский | English
Вы можете предложить опубликовать новый метод поддержки решений на данном сайте. Для этого сообщите о себе через форму обратной связи.
Реализация должна быть на Ruby и/или на GNU C++. Реализации на других языках программирования обсуждаются.
Программа должна быть консольной и работать со стандартными потоками ввода/вывода.
Пример программы на Ruby:
require 'json'
file = $stdin.read
h = JSON.parse(file)
weight = []
raise "matrix not found" if !h["matrix"].kind_of?(Array) or h["matrix"].size < 2 or !h["matrix"][0].kind_of?(Array)
n = h["matrix"][0].size
raise "matrix size error" if h["matrix"].size != n
rs = [0.00, 0.00, 0.00, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51, 1.48, 1.56, 1.57, 1.59]
raise "size to big!" if n > rs.size
h["matrix"].each do |row|
weight << row.reduce(1, :*)**(1.0/n)
end
s = weight.reduce(:+)
raise "weight error" if s == 0
weight.map!{|w| w/s}
out_h={}
out_h["weight"] = weight
v = h["matrix"].transpose.map{|col| col.reduce(:+)}
l_max=weight.map.with_index{|x,i| x*v[i]}.reduce(:+)
out_h["l_max"] = l_max
out_h["consistency index"] = (l_max-n)/(n-1)
out_h["random consistency index"] = rs[n]
out_h["consistency ratio"] = out_h["consistency index"] / rs[n] if rs[n] > 0
puts JSON.pretty_generate(out_h)
Пример исходных данных:
{ "matrix": [
[1.000000, 5.000000, 6.000000, 7.000000],
[0.200000, 1.000000, 4.000000, 6.000000],
[0.166667, 0.250000, 1.000000, 4.000000],
[0.142857, 0.166667, 0.250000, 1.000000]
]
}
Пример локального запуска для тестирования:
ruby pairwise_comparison.rb < input.json