RosettaCodeData/Task/Knapsack-problem-0-1/Bracmat/knapsack-problem-0-1-1.bracmat
2023-07-01 13:44:08 -04:00

66 lines
1.4 KiB
Text

(knapsack=
( things
= (map.9.150)
(compass.13.35)
(water.153.200)
(sandwich.50.160)
(glucose.15.60)
(tin.68.45)
(banana.27.60)
(apple.39.40)
(cheese.23.30)
(beer.52.10)
("suntan cream".11.70)
(camera.32.30)
(T-shirt.24.15)
(trousers.48.10)
(umbrella.73.40)
("waterproof trousers".42.70)
("waterproof overclothes".43.75)
(note-case.22.80)
(sunglasses.7.20)
(towel.18.12)
(socks.4.50)
(book.30.10)
)
& 0:?maxvalue
& :?sack
& ( add
= cumwght
cumvalue
cumsack
name
wght
val
tings
n
ncumwght
ncumvalue
. !arg
: (?cumwght.?cumvalue.?cumsack.(?name.?wght.?val) ?tings)
& -1:?n
& whl
' ( 1+!n:~>1:?n
& !cumwght+!n*!wght:~>400:?ncumwght
& !cumvalue+!n*!val:?ncumvalue
& ( !tings:
& ( !ncumvalue:>!maxvalue:?maxvalue
& !cumsack
(!n:0&|!name)
: ?sack
|
)
| add
$ ( !ncumwght
. !ncumvalue
. !cumsack
(!n:0&|!name)
. !tings
)
)
)
)
& add$(0.0..!things)
& out$(!maxvalue.!sack));
!knapsack;