Knapsack problem/Continuous: Difference between revisions
Content added Content deleted
(Updated first D entry) |
(Added Bracmat example) |
||
Line 191: | Line 191: | ||
Total price = 349.378379 |
Total price = 349.378379 |
||
</pre> |
</pre> |
||
=={{header|Bracmat}}== |
|||
<lang bracmat>( ( fixed {function to convert a rational number to fixed point notation. |
|||
The second argument is the number of decimals. } |
|||
= value decimals powerOf10 |
|||
. !arg:(?value.?decimals) |
|||
& 10^!decimals:?powerOf10 |
|||
& str |
|||
$ ( div$(!value.1) |
|||
"." |
|||
mod |
|||
$ (div$(!value+1/2*!powerOf10^-1.!powerOf10^-1).!powerOf10) |
|||
) |
|||
) |
|||
& (beef.38/10.36) |
|||
(pork.54/10.43) |
|||
(ham.36/10.90) |
|||
(greaves.24/10.45) |
|||
(flitch.40/10.30) |
|||
(brawn.25/10.56) |
|||
(welt.37/10.67) |
|||
(salami.30/10.95) |
|||
(sausage.59/10.98) |
|||
: ?items |
|||
& 0:?sorteditems |
|||
& whl |
|||
' ( !items:(?name.?mass.?price) ?items |
|||
& (!mass*!price^-1.!mass.!name)+!sorteditems:?sorteditems |
|||
) |
|||
& 0:?totalMass |
|||
& :?stolenItems |
|||
& whl |
|||
' ( !sorteditems:(?massPerPriceunit.?mass.?name)+?sorteditems |
|||
& (!mass.!massPerPriceunit.!name) !stolenItems |
|||
: ?stolenItems |
|||
& !mass+!totalMass:?totalMass:~>15 |
|||
) |
|||
& !stolenItems:(?mass.?massPerPriceunit.?name) ?stolenItems |
|||
& 15+!mass+-1*!totalMass:?mass |
|||
& (!mass.!massPerPriceunit.!name) !stolenItems:?stolenItems |
|||
& 0:?totalPrice |
|||
& ( !stolenItems |
|||
: ? |
|||
( (?mass.?massPerPriceunit.?name) |
|||
& out$(fixed$(!mass.1) "kg of" !name) |
|||
& !mass*!massPerPriceunit^-1+!totalPrice:?totalPrice |
|||
& ~ |
|||
) |
|||
? |
|||
| out$(fixed$(!totalPrice.2)) |
|||
) |
|||
);</lang> |
|||
Output: |
|||
<pre>3.5 kg of welt |
|||
2.4 kg of greaves |
|||
2.5 kg of brawn |
|||
3.6 kg of ham |
|||
3.0 kg of salami |
|||
349.38</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |