67 lines
2.0 KiB
Batchfile
67 lines
2.0 KiB
Batchfile
:: Initiate command line environment
|
|
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
:: Establish arrays we'll be using
|
|
set items=map compass water sandwich glucose tin banana apple cheese beer suntancream camera tshirt trousers umbrella waterprooftrousers waterproofoverclothes notecase sunglasses towel socks book
|
|
set weight=9 13 153 50 15 68 27 39 23 52 11 32 24 48 73 42 43 22 7 18 4 30
|
|
set importance=150 35 200 160 60 45 60 40 30 10 70 30 15 10 40 70 75 80 20 12 50 10
|
|
|
|
:: Put the above 3 arrays into their own variables with the form of "item[]", "w[]" and "i[]"
|
|
set tempnum=0
|
|
for %%i in (%items%) do (
|
|
set /a tempnum+=1
|
|
set item!tempnum!=%%i
|
|
)
|
|
set tempnum=0
|
|
for %%i in (%weight%) do (
|
|
set /a tempnum+=1
|
|
set w!tempnum!=%%i
|
|
)
|
|
set tempnum=0
|
|
for %%i in (%importance%) do (
|
|
set /a tempnum+=1
|
|
set i!tempnum!=%%i
|
|
)
|
|
:: Define the array "r[]" as the ratio between the importance ("i[]") and the weight ("w[]").
|
|
for /l %%i in (1,1,22) do set /a r%%i=!i%%i!*100/!w%%i! & rem batch doesn't support decimals, so the numerator is multiplied by 100 to get past this
|
|
|
|
set totalimportance=0
|
|
set totalweight=0
|
|
set amount=0
|
|
|
|
:: Find the largest number in "r[]" and define some temp variables based off it
|
|
:load
|
|
set tempr=0
|
|
set tempitem=0
|
|
for /l %%i in (1,1,22) do (
|
|
if !r%%i! gtr !tempr! (
|
|
set tempr=!r%%i!
|
|
set tempitem=%%i
|
|
set /a testweight=%totalweight%+!w%%i!
|
|
if !tempr!==0 goto end
|
|
if !testweight! geq 400 goto end
|
|
)
|
|
)
|
|
|
|
:: Do basic error checking using the temp variables from above and either output and end the program or send back to load
|
|
set /a totaltempweight=%totalweight%+!w%tempitem%!
|
|
|
|
if %totaltempweight% gtr 400 (
|
|
set !r%tempitem%!=0
|
|
goto load
|
|
)
|
|
|
|
set totalweight=%totaltempweight%
|
|
set /a totalimportance+=!i%tempitem%!
|
|
set taken=%taken% !item%tempitem%!
|
|
set /a amount+=1
|
|
set r%tempitem%=0 & rem set the ratio variable of the item we just added to the knapsack as 0 to stop it repeat
|
|
|
|
goto load
|
|
|
|
:end
|
|
echo List of things taken [%amount%]: %taken%
|
|
echo Total Value: %totalimportance% Total Weight: %totalweight%
|
|
pause>nul
|