RosettaCodeData/Task/Knapsack-problem-Bounded/Groovy/knapsack-problem-bounded-2....

37 lines
2.0 KiB
Groovy

def items = [
[name:"map", weight: 9, value:150, pieces:1],
[name:"compass", weight: 13, value: 35, pieces:1],
[name:"water", weight:153, value:200, pieces:2],
[name:"sandwich", weight: 50, value: 60, pieces:2],
[name:"glucose", weight: 15, value: 60, pieces:2],
[name:"tin", weight: 68, value: 45, pieces:3],
[name:"banana", weight: 27, value: 60, pieces:3],
[name:"apple", weight: 39, value: 40, pieces:3],
[name:"cheese", weight: 23, value: 30, pieces:1],
[name:"beer", weight: 52, value: 10, pieces:3],
[name:"suntan cream", weight: 11, value: 70, pieces:1],
[name:"camera", weight: 32, value: 30, pieces:1],
[name:"t-shirt", weight: 24, value: 15, pieces:2],
[name:"trousers", weight: 48, value: 10, pieces:2],
[name:"umbrella", weight: 73, value: 40, pieces:1],
[name:"waterproof trousers", weight: 42, value: 70, pieces:1],
[name:"waterproof overclothes", weight: 43, value: 75, pieces:1],
[name:"note-case", weight: 22, value: 80, pieces:1],
[name:"sunglasses", weight: 7, value: 20, pieces:1],
[name:"towel", weight: 18, value: 12, pieces:2],
[name:"socks", weight: 4, value: 50, pieces:1],
[name:"book", weight: 30, value: 10, pieces:2],
]
def start = System.currentTimeMillis()
def packingList = knapsackBounded(items)
def elapsed = System.currentTimeMillis() - start
println "Elapsed Time: ${elapsed/1000.0} s"
println "Total Weight: ${totalWeight(packingList)}"
println " Total Value: ${totalValue(packingList)}"
packingList.each {
printf (' item: %-22s weight:%4d value:%4d count:%2d\n',
it.item.name, it.item.weight, it.item.value, it.count)
}