KnapsackBounded.frink

Download or view KnapsackBounded.frink in plain text format

/** Solver for the Rosetta Code problem "Knapsack problem/Bounded"

    https://rosettacode.org/wiki/Knapsack_problem/Bounded
*/

use knapsack.frink

// Item name, weight, value, piece(s)
i =     [   ["map", 9, 150, 1],
            ["compass", 13, 35, 1],
            ["water", 153, 200, 3],
            ["sandwich", 50, 60, 2],
            ["glucose", 15, 60, 2],
            ["tin", 68, 45, 3],
            ["banana", 27, 60, 3],
            ["apple", 39, 40, 3],
            ["cheese", 23, 30, 1],
            ["beer", 52, 10, 3],
            ["suntan cream", 11, 70, 1],
            ["camera", 32, 30, 1],
            ["t-shirt", 24, 15, 2],
            ["trousers", 48, 10, 2],
            ["umbrella", 73, 40, 1],
            ["waterproof trousers", 42, 70, 1],
            ["waterproof overclothes", 43, 75, 1],
            ["note-case", 22, 80, 1],
            ["sunglasses", 7, 20, 1],
            ["towel", 18, 12, 2],
            ["socks", 4, 50, 1],
            ["book", 30, 10, 2]]

[maxvalue, maxweight, usedDict] = knapsackBounded[i.getColumn[2], // value
                                                  i.getColumn[1], // weight
                                                  i.getColumn[3], // count
                                                  400]
res = new array
for ind = sort[keys[usedDict]]
   res.push[ ["   ", i@ind@0 , ":", usedDict@ind] ]

println["Items:"]
println[formatTable[res, "right"]]

println[]
println["Total weight: $maxweight"]
println["Total value:  $maxvalue"]



Download or view KnapsackBounded.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen, eliasen@mindspring.com