RosettaCodeData/Task/Knapsack-problem-Unbounded/Forth/knapsack-problem-unbounded-2.fth

35 lines
1,000 B
Forth
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
0 VALUE vials
0 VALUE ampules
0 VALUE bars
2026-04-30 12:34:36 -04:00
0 VALUE bag
2023-07-01 11:58:00 -04:00
2026-04-30 12:34:36 -04:00
#250 3 / #250 #25 / MIN 1+ CONSTANT maxvials
2023-07-01 11:58:00 -04:00
#250 2/ #250 #15 / MIN 1+ CONSTANT maxampules
2026-04-30 12:34:36 -04:00
#250 #20 / #250 2/ MIN 1+ CONSTANT maxbars
2023-07-01 11:58:00 -04:00
: RESULTS ( v a b -- k )
2026-04-30 12:34:36 -04:00
3DUP #20 * SWAP 2* + SWAP 3 * + #250 > IF 3DROP -1 EXIT ENDIF
3DUP 2* SWAP #15 * + SWAP #25 * + #250 > IF 3DROP -1 EXIT ENDIF
#2500 * SWAP #1800 * + SWAP #3000 * + ;
2023-07-01 11:58:00 -04:00
: .SOLUTION ( -- )
2026-04-30 12:34:36 -04:00
CR ." The traveller's knapsack contains "
vials DEC. ." vials of panacea, "
ampules DEC. ." ampules of ichor, "
CR bars DEC. ." bars of gold, a total value of "
vials ampules bars RESULTS 0DEC.R ." ." ;
2023-07-01 11:58:00 -04:00
: KNAPSACK ( -- )
2026-04-30 12:34:36 -04:00
-1 TO bag
maxvials 0 ?DO
maxampules 0 ?DO
maxbars 0 ?DO
2023-07-01 11:58:00 -04:00
K J I RESULTS DUP
2026-04-30 12:34:36 -04:00
bag > IF TO bag K TO vials J TO ampules I TO bars
ELSE DROP
ENDIF
LOOP
LOOP
LOOP
.SOLUTION ;