20 lines
621 B
Groovy
20 lines
621 B
Groovy
import static java.math.RoundingMode.*
|
|
|
|
def knapsackCont = { list, maxWeight = 15.0 ->
|
|
list.sort{ it.weight / it.value }
|
|
def remainder = maxWeight
|
|
List sack = []
|
|
for (item in list) {
|
|
if (item.weight < remainder) {
|
|
sack << [name: item.name, weight: item.weight,
|
|
value: (item.value as BigDecimal).setScale(2, HALF_UP)]
|
|
} else {
|
|
sack << [name: item.name, weight: remainder,
|
|
value: (item.value * remainder / item.weight).setScale(2, HALF_UP)]
|
|
break
|
|
}
|
|
remainder -= item.weight
|
|
}
|
|
sack
|
|
}
|