RosettaCodeData/Task/Knapsack-problem-Unbounded/PicoLisp/knapsack-problem-unbounded.l

25 lines
737 B
Plaintext

(de *Items
("panacea" 3 25 3000)
("ichor" 2 15 1800)
("gold" 20 2 2500) )
(de knapsack (Lst W V)
(when Lst
(let X (knapsack (cdr Lst) W V)
(if (and (ge0 (dec 'W (cadar Lst))) (ge0 (dec 'V (caddar Lst))))
(maxi
'((L) (sum cadddr L))
(list
X
(cons (car Lst) (knapsack (cdr Lst) W V))
(cons (car Lst) (knapsack Lst W V)) ) )
X ) ) ) )
(let K (knapsack *Items 250 250)
(for (L K L)
(let (N 1 X)
(while (= (setq X (pop 'L)) (car L))
(inc 'N) )
(apply tab X (4 2 8 5 5 7) N "x") ) )
(tab (14 5 5 7) NIL (sum cadr K) (sum caddr K) (sum cadddr K)) )