diff --git a/.gitignore b/.gitignore index 7055d8eb..1329f681 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ vendor venv **/DS_Store/* **/.DS_Store/* +SlackAPP.md +SlackAPP.pdf diff --git a/python/gilded_rose.py b/python/gilded_rose.py index c2f4582c..5bb7ce3a 100755 --- a/python/gilded_rose.py +++ b/python/gilded_rose.py @@ -5,48 +5,60 @@ class GildedRose(object): def __init__(self, items): self.items = items + def increase_quality(self, item, amount=1): + """Increase item quality, capped at 50""" + item.quality = min(50, item.quality + amount) + + def decrease_quality(self, item, amount=1): + """Decrease item quality, never below 0""" + item.quality = max(0, item.quality - amount) + + def update_normal(self, item): + """Update quality for normal items""" + self.decrease_quality(item) + item.sell_in -= 1 + if item.sell_in < 0: + self.decrease_quality(item) + + def update_aged_brie(self, item): + """Update quality for Aged Brie""" + self.increase_quality(item) + item.sell_in -= 1 + if item.sell_in < 0: + self.increase_quality(item) + + def update_backstage_pass(self, item): + """Update quality for Backstage passes""" + self.increase_quality(item) + if item.sell_in <= 10: + self.increase_quality(item) + if item.sell_in <= 5: + self.increase_quality(item) + item.sell_in -= 1 + if item.sell_in < 0: + item.quality = 0 + + def update_conjured(self, item): + """Update quality for Conjured items""" + self.decrease_quality(item, 2) + item.sell_in -= 1 + if item.sell_in < 0: + self.decrease_quality(item, 2) + def update_quality(self): for item in self.items: - # Check if item is Conjured - is_conjured = item.name.startswith("Conjured") - if item.name == "Sulfuras, Hand of Ragnaros": - # Sulfuras never changes - skip quality updates - pass - elif item.name != "Aged Brie" and item.name != "Backstage passes to a TAFKAL80ETC concert": - if item.quality > 0: - # Conjured items degrade twice as fast - if is_conjured: - item.quality = item.quality - 2 - else: - item.quality = item.quality - 1 + # Sulfuras never changes + continue + + if item.name == "Aged Brie": + self.update_aged_brie(item) + elif item.name == "Backstage passes to a TAFKAL80ETC concert": + self.update_backstage_pass(item) + elif item.name.startswith("Conjured"): + self.update_conjured(item) else: - if item.quality < 50: - item.quality = item.quality + 1 - if item.name == "Backstage passes to a TAFKAL80ETC concert": - if item.sell_in < 11: - if item.quality < 50: - item.quality = item.quality + 1 - if item.sell_in < 6: - if item.quality < 50: - item.quality = item.quality + 1 - if item.name != "Sulfuras, Hand of Ragnaros": - item.sell_in = item.sell_in - 1 - if item.sell_in < 0: - if item.name != "Aged Brie": - if item.name != "Backstage passes to a TAFKAL80ETC concert": - if item.quality > 0: - if item.name != "Sulfuras, Hand of Ragnaros": - # Conjured items degrade twice as fast even after sell by date - if is_conjured: - item.quality = item.quality - 2 - else: - item.quality = item.quality - 1 - else: - item.quality = item.quality - item.quality - else: - if item.quality < 50: - item.quality = item.quality + 1 + self.update_normal(item) class Item: