mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
138 lines
4.0 KiB
Plaintext
138 lines
4.0 KiB
Plaintext
unit Rose;
|
|
|
|
interface
|
|
|
|
type
|
|
Item = record { 260b memory }
|
|
Name: string;
|
|
SellIn: Integer;
|
|
Quality: Integer;
|
|
end;
|
|
|
|
Items = array [0..251] of Item; { 64kb memory }
|
|
|
|
ListOfItems = record
|
|
Elements: ^Items;
|
|
Length: Word;
|
|
end;
|
|
|
|
procedure ResizeList(var List: ListOfItems; Size: Word);
|
|
|
|
procedure ClearList(var List: ListOfItems);
|
|
|
|
procedure InitItem(var Item: Item; Name: string; SellIn: Integer; Quality: Integer);
|
|
|
|
function StrItem(Item: Item): string;
|
|
|
|
procedure UpdateQuality(Items: ListOfItems);
|
|
|
|
implementation
|
|
|
|
procedure ResizeList(var List: ListOfItems; Size: Word);
|
|
begin
|
|
List.Length := Size;
|
|
GetMem(List.Elements, Size * SizeOf(Item));
|
|
end;
|
|
|
|
procedure ClearList(var List: ListOfItems);
|
|
begin
|
|
FreeMem(List.Elements, List.Length * SizeOf(Item));
|
|
List.Length := 0;
|
|
end;
|
|
|
|
procedure InitItem(var Item: Item; Name: string; SellIn: Integer; Quality: Integer);
|
|
begin
|
|
Item.Name := Name;
|
|
Item.SellIn := SellIn;
|
|
Item.Quality := Quality;
|
|
end;
|
|
|
|
function StrItem(Item: Item): string;
|
|
var SellInStr: string;
|
|
QualityStr: string;
|
|
begin
|
|
Str(Item.SellIn, SellInStr);
|
|
Str(Item.Quality, QualityStr);
|
|
StrItem := Item.Name + ', ' + SellInStr + ', ' + QualityStr;
|
|
end;
|
|
|
|
procedure UpdateQuality(Items: ListOfItems);
|
|
var I: Word;
|
|
begin
|
|
for I := 0 to Items.Length-1 do
|
|
begin
|
|
if (Items.Elements^[I].Name <> 'Aged Brie') and
|
|
(Items.Elements^[I].Name <> 'Backstage passes to a TAFKAL80ETC concert') then
|
|
begin
|
|
if Items.Elements^[I].Quality > 0 then
|
|
begin
|
|
if Items.Elements^[I].Name <> 'Sulfuras, Hand of Ragnaros' then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality - 1;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if Items.Elements^[I].Quality < 50 then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality + 1;
|
|
|
|
if Items.Elements^[I].Name = 'Backstage passes to a TAFKAL80ETC concert' then
|
|
begin
|
|
if Items.Elements^[I].SellIn < 11 then
|
|
begin
|
|
if Items.Elements^[I].Quality < 50 then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality + 1;
|
|
end;
|
|
end;
|
|
|
|
if Items.Elements^[I].SellIn < 6 then
|
|
begin
|
|
if Items.Elements^[I].Quality < 50 then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality + 1;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if Items.Elements^[I].Name <> 'Sulfuras, Hand of Ragnaros' then
|
|
begin
|
|
Items.Elements^[I].SellIn := Items.Elements^[I].SellIn - 1;
|
|
end;
|
|
|
|
if Items.Elements^[I].SellIn < 0 then
|
|
begin
|
|
if Items.Elements^[I].Name <> 'Aged Brie' then
|
|
begin
|
|
if Items.Elements^[I].Name <> 'Backstage passes to a TAFKAL80ETC concert' then
|
|
begin
|
|
if Items.Elements^[I].Quality > 0 then
|
|
begin
|
|
if Items.Elements^[I].Name <> 'Sulfuras, Hand of Ragnaros' then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality - 1;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality - Items.Elements^[I].Quality;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
if Items.Elements^[I].Quality < 50 then
|
|
begin
|
|
Items.Elements^[I].Quality := Items.Elements^[I].Quality + 1;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|