Data update
This commit is contained in:
parent
4d5544505c
commit
4924dd0264
3073 changed files with 55820 additions and 4408 deletions
|
|
@ -0,0 +1,24 @@
|
|||
BEGIN # Knapsack problem: Continuous - based on the EasyLang sample #
|
||||
|
||||
MODE ITEM = STRUCT( STRING name, REAL weight, value );
|
||||
PRIO SWAP = 1;
|
||||
OP SWAP = ( REF ITEM a, b )VOID: BEGIN ITEM t = a; a := b; b := t END;
|
||||
OP PRICE = ( ITEM a )REAL: value OF a / weight OF a;
|
||||
[]ITEM possible items
|
||||
= ( ( "beef", 3.8, 36 ), ( "pork", 5.4, 43 ), ( "ham", 3.6, 90 ), ( "greaves", 2.4, 45 )
|
||||
, ( "flitch", 4.0, 30 ), ( "brawn", 2.5, 56 ), ( "welt", 3.7, 67 ), ( "salami", 3.0, 95 )
|
||||
, ( "sausage", 5.9, 98 )
|
||||
);
|
||||
[ LWB possible items : UPB possible items ]ITEM sack items := possible items;
|
||||
FOR p FROM LWB sack items TO UPB sack items - 1 DO
|
||||
FOR q FROM p + 1 TO UPB sack items DO
|
||||
IF PRICE sack items[ q ] > PRICE sack items[ p ] THEN sack items[ p ] SWAP sack items[ q ] FI
|
||||
OD
|
||||
OD;
|
||||
REAL max weight := 15;
|
||||
FOR p FROM LWB sack items TO UPB sack items - 1 WHILE max weight > 0 DO
|
||||
REAL w = IF weight OF sack items[ p ] > max weight THEN max weight ELSE weight OF sack items[ p ] FI;
|
||||
print( ( fixed( w, -6, 2 ), " kg ", name OF sack items[ p ], newline ) );
|
||||
max weight -:= w
|
||||
OD
|
||||
END
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
begin % Knapsack problem: Continuous - based on the Algol 68 sample, which is based on the EasyLang sample %
|
||||
|
||||
record Item ( string(12) name; real weight, cost );
|
||||
real procedure price ( reference(Item) value a ) ; cost(a) / weight(a);
|
||||
integer MAX_ITEMS;
|
||||
MAX_ITEMS := 9;
|
||||
|
||||
begin
|
||||
reference(Item) array sackItems ( 1 :: MAX_ITEMS );
|
||||
real maxWeight;
|
||||
|
||||
sackItems( 1 ) := Item( "beef", 3.8, 36 );sackItems( 2 ) := Item( "pork", 5.4, 43 );
|
||||
sackItems( 3 ) := Item( "ham", 3.6, 90 );sackItems( 4 ) := Item( "greaves", 2.4, 45 );
|
||||
sackItems( 5 ) := Item( "flitch", 4.0, 30 );sackItems( 6 ) := Item( "brawn", 2.5, 56 );
|
||||
sackItems( 7 ) := Item( "welt", 3.7, 67 );sackItems( 8 ) := Item( "salami", 3.0, 95 );
|
||||
sackItems( 9 ) := Item( "sausage", 5.9, 98 );
|
||||
|
||||
for p := 1 until MAX_ITEMS - 1 do begin
|
||||
for q := p + 1 until MAX_ITEMS do begin
|
||||
if price( sackItems( q ) ) > price( sackItems( p ) ) then begin
|
||||
reference(Item) t;
|
||||
t := sackItems( p );
|
||||
sackItems( p ) := sackItems( q );
|
||||
sackItems( q ) := t
|
||||
end if_price_of_q_gt_price_of_p
|
||||
end for_q
|
||||
end for_p;
|
||||
maxWeight := 15;
|
||||
for p := 1 until MAX_ITEMS do begin
|
||||
real w;
|
||||
w := if weight(sackItems(p)) > maxWeight then maxWeight else weight(sackItems(p));
|
||||
write( s_w := 0, r_format := "A", r_w := 6, r_d := 2, w, " kg ", name(sackItems(p)) );
|
||||
maxWeight := maxWeight - w;
|
||||
if maxWeight <= 0 then goto endSack
|
||||
end for_p ;
|
||||
endSack:
|
||||
end
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue