Knapsack problem/Continuous: Difference between revisions

Content added Content deleted
(jq)
(→‎{{header|Ruby}}: items(Hash -> Array), correct output format)
Line 2,322: Line 2,322:


=={{header|Ruby}}==
=={{header|Ruby}}==
<lang ruby>
<lang ruby>items = [ [:beef , 3.8, 36],
[:pork , 5.4, 43],
# Solve Continuous Knapsdack Problem
[:ham , 3.6, 90],
#
[:greaves, 2.4, 45],
# Nigel_Galloway
[:flitch , 4.0, 30],
# September 8th., 2014.
[:brawn , 2.5, 56],
maxW, value = 15, 0
{:beef => [3.8,36],
[:welt , 3.7, 67],
:pork => [5.4,43],
[:salami , 3.0, 95],
[:sausage, 5.9, 98] ].sort_by{|item, weight, price| -price / weight}
:ham => [3.6,90],
maxW, value = 15.0, 0
:greaves => [2.4,45],
items.each do |item, weight, price|
:flitch => [4.0,30],
if (maxW -= weight) > 0
:brawn => [2.5,56],
puts "Take all #{item}"
:welt => [3.7,67],
value += price
:salami => [3.0,95],
:sausage => [5.9,98]}.sort_by{|n,g| -1*g[1]/g[0]}.each{|n,g|
if (maxW-=g[0]) > 0
puts "Take all #{n}"
value += g[1]
else
else
puts "Take #{t=g[0]+maxW}kg #{n}\n\nTotal value of swag is #{value+(g[1]/g[0])*t}"
puts "Take %gkg of %s" % [t=weight+maxW, item], "",
"Total value of swag is %g" % (value+(price/weight)*t)
break
break
end
end
end</lang>
}
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 2,352: Line 2,348:
Take all brawn
Take all brawn
Take all greaves
Take all greaves
Take 3.5kg welt
Take 3.5kg of welt


Total value of swag is 349.378378378378
Total value of swag is 349.378
</pre>
</pre>