diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index faf17748..a9a7f4a3 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -24,11 +24,15 @@ export class GildedRose { } } -function updateItems(items: readonly Readonly[]): readonly Readonly[] { +function updateItems(items: readonly Readonly[]): readonly Readonly[] { return items .map(item => ({ ...item, quality: updateItemQuality(item) })) .map(item => ({ ...item, sellIn: updateItemSellIn(item) })) .map(item => ({ ...item, quality: updateExpiredItemQuality(item) })) + .map((item, i) => { + const previousItem = items[i] + return ({ ...item, quality: updateConjuredItemQuality(previousItem, item) }) + }) } function updateItemQuality({ name, quality, sellIn, ...rest }: Readonly): number { @@ -73,4 +77,13 @@ function decrementQuality({ quality }: Readonly>): number function incrementQuality({ quality }: Readonly>): number { if (quality >= 50) return quality return quality + 1 +} + +function updateConjuredItemQuality(previousItem: Item, currentItem: Item | ConjuredItem): number { + const isConjured = 'conjured' in currentItem && currentItem.conjured + if (!isConjured) return currentItem.quality + const diff = previousItem.quality - currentItem.quality + if (diff >= 0) return currentItem.quality + + return previousItem.quality - (diff * 2) } \ No newline at end of file