Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,93 @@
|
|||
import "/fmt" for Fmt
|
||||
|
||||
class Item {
|
||||
construct new(name, weight, value, count) {
|
||||
_name = name
|
||||
_weight = weight
|
||||
_value = value
|
||||
_count = count
|
||||
}
|
||||
|
||||
name { _name }
|
||||
weight { _weight }
|
||||
value { _value }
|
||||
count { _count }
|
||||
}
|
||||
|
||||
var items = [
|
||||
Item.new("map", 9, 150, 1),
|
||||
Item.new("compass", 13, 35, 1),
|
||||
Item.new("water", 153, 200, 2),
|
||||
Item.new("sandwich", 50, 60, 2),
|
||||
Item.new("glucose", 15, 60, 2),
|
||||
Item.new("tin", 68, 45, 3),
|
||||
Item.new("banana", 27, 60, 3),
|
||||
Item.new("apple", 39, 40, 3),
|
||||
Item.new("cheese", 23, 30, 1),
|
||||
Item.new("beer", 52, 10, 3),
|
||||
Item.new("suntan cream", 11, 70, 1),
|
||||
Item.new("camera", 32, 30, 1),
|
||||
Item.new("T-shirt", 24, 15, 2),
|
||||
Item.new("trousers", 48, 10, 2),
|
||||
Item.new("umbrella", 73, 40, 1),
|
||||
Item.new("waterproof trousers", 42, 70, 1),
|
||||
Item.new("waterproof overclothes", 43, 75, 1),
|
||||
Item.new("note-case", 22, 80, 1),
|
||||
Item.new("sunglasses", 7, 20, 1),
|
||||
Item.new("towel", 18, 12, 2),
|
||||
Item.new("socks", 4, 50, 1),
|
||||
Item.new("book", 30, 10, 2)
|
||||
]
|
||||
|
||||
var n = items.count
|
||||
var maxWeight = 400
|
||||
|
||||
var knapsack = Fn.new { |w|
|
||||
var m = List.filled(n + 1, null)
|
||||
for (i in 0..n) m[i] = List.filled(w + 1, 0)
|
||||
for (i in 1..n) {
|
||||
for (j in 0..w) {
|
||||
m[i][j] = m[i-1][j]
|
||||
for (k in 1..items[i - 1].count) {
|
||||
if (k * items[i - 1].weight > j) break
|
||||
var v = m[i - 1][j - k * items[i - 1].weight] + k * items[i - 1].value
|
||||
if (v > m[i][j]) m[i][j] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
var s = List.filled(n, 0)
|
||||
var j = w
|
||||
for (i in n..1) {
|
||||
var v = m[i][j]
|
||||
var k = 0
|
||||
while (v != m[i - 1][j] + k * items[i - 1].value) {
|
||||
s[i - 1] = s[i - 1] + 1
|
||||
j = j - items[i - 1].weight
|
||||
k = k + 1
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
var s = knapsack.call(maxWeight)
|
||||
System.print("Item Chosen Weight Value Number")
|
||||
System.print("--------------------- ------ ----- ------")
|
||||
var itemCount = 0
|
||||
var sumWeight = 0
|
||||
var sumValue = 0
|
||||
var sumNumber = 0
|
||||
for (i in 0... n) {
|
||||
if (s[i] != 0) {
|
||||
itemCount = itemCount + 1
|
||||
var name = items[i].name
|
||||
var number = s[i]
|
||||
var weight = items[i].weight * number
|
||||
var value = items[i].value * number
|
||||
sumNumber = sumNumber + number
|
||||
sumWeight = sumWeight + weight
|
||||
sumValue = sumValue + value
|
||||
Fmt.print("$-22s $3d $4d $2d", name, weight, value, number)
|
||||
}
|
||||
}
|
||||
System.print("--------------------- ------ ----- ------")
|
||||
Fmt.print("Items chosen $d $3d $4d $2d", itemCount, sumWeight, sumValue, sumNumber)
|
||||
Loading…
Add table
Add a link
Reference in a new issue