тогда всё правильно
2006-Feb-21, Tuesday 16:12программа на ruby расчета сопротивления разных вариантов распайки набора из N деталей.
надо бы, конечно, отфильтровать одинаковые варианты...
зато с рекурсией.
люблю с рекурсией...
#!/usr/local/bin/ruby --
#
reslist = Hash[“1”, 1.0, “2”, 2.0, “3”, 3.0, “4”, 4.0, “5”, 5.0]
def f(reslist)
y = Hash.new
yy = Hash.new
if reslist.length == 1
reslist.each { |n,v|
print n + ‘=’ + v.to_s + “\n”
}
return 0
elsif reslist.length == 2
x = reslist.to_a
n = ‘(’ + x[0][0] + ‘+’ + x[1][0] + ‘)’
v = x[0][1] + x[1][1]
y.clear
y[n] = v
f(y)
n = ‘(’ + x[0][0] + ‘|’ + x[1][0] + ‘)’
v = (x[0][1]*x[1][1]) / (x[0][1]+x[1][1])
y.clear
y[n] = v
f(y)
y.clear
return 0
else
reslist.each { |n,v|
y = reslist.dup
y.delete(n)
f(y) # чтоб считались варианты и с неиспользуемыми деталями
y.each { |nn,vv|
yy = y.dup
yy.delete(nn)
nnn = ‘(’ + n + ‘+’ + nn + ‘)’
vvv = v + vv
yy[nnn] = vvv
f(yy)
yy.clear
yy = y
yy.delete(nn)
nnn = ‘(’ + n + ‘|’ + nn + ‘)’
vvv = (v*vv)/(v+vv)
yy[nnn] = vvv
f(yy)
yy.clear
}
y.clear
}
end
return 0
end
f(reslist)
надо бы, конечно, отфильтровать одинаковые варианты...
зато с рекурсией.
люблю с рекурсией...