diff --git a/python/gilded_rose.py b/python/gilded_rose.py index b2d414b3..89075681 100755 --- a/python/gilded_rose.py +++ b/python/gilded_rose.py @@ -18,16 +18,24 @@ class Item: return super().__new__(items_mappings[name]) return super().__new__(cls) + def _update_quality(self, multiplier: int = 1): + degradation = self.degradation_per_day * multiplier + self.quality = max(self.quality_min_value, self.quality - degradation) + self.quality = min(self.quality_max_value, self.quality) + + def _update_sell_in(self): + self.sell_in -= 1 + def daily_step(self): if self.quality < 0: return - - degradation = self.degradation_per_day + + # Decrement sell_in first, then apply quality changes based on new sell_in + self._update_sell_in() if self.sell_in < 0: - degradation *= 2 - - self.quality = max(0, self.quality - degradation) - self.sell_in -= 1 + self._update_quality(2) + else: + self._update_quality() def __repr__(self): return "%s, %s, %s" % (self.name, self.sell_in, self.quality) @@ -40,10 +48,9 @@ class AgedBrie(Item): class BackstagePasses(Item): name: str = "Backstage passes to a TAFKAL80ETC concert" - def daily_step(self): - if self.sell_in < 0: + def _update_quality(self, multiplier: int = 1): + if self.sell_in <= 0: self.quality = 0 - return elif 0 < self.sell_in < 6: self.quality += 3 elif 6 < self.sell_in < 11: @@ -53,7 +60,6 @@ class BackstagePasses(Item): self.quality = min(50, self.quality) - super().daily_step() class Sulfuras(Item): @@ -63,6 +69,10 @@ class Sulfuras(Item): def __init__(self, name, sell_in, quality): super().__init__(name, 0, 80) + def daily_step(self): + # Legendary item: does not change in quality or sell_in + pass + class Conjured(Item): name: str = "Conjured" @@ -72,7 +82,7 @@ items_mappings: dict[str, type[Item]] = { "Aged Brie": AgedBrie, "Backstage passes to a TAFKAL80ETC concert": BackstagePasses, "Sulfuras, Hand of Ragnaros": Sulfuras, - "Conjured": Conjured, + "Conjured Mana Cake": Conjured, } class GildedRose(object):