using System.Collections.Generic; using System; namespace csharp { public class GildedRose { const int MinQuality = 0; const int MaxQuality = 50; const string AgedBrie = "Aged Brie"; const string Sulfuras = "Sulfuras, Hand of Ragnaros"; const string BackstagePasses = "Backstage passes to a TAFKAL80ETC concert"; const string Conjured = "Conjured Mana Cake"; IList Items; public GildedRose(IList Items) { this.Items = Items; } void UpdateItem(ref Item item, int sellInValueFactor, int qualityValueFactor) { item.SellIn += sellInValueFactor; item.Quality = Math.Max(MinQuality, Math.Min(MaxQuality, item.Quality + qualityValueFactor)); } bool IsExpired(Item item) { bool output = true; if (item.SellIn > 0) output = false; return output; } Item GetNewAgedBrie(Item item) { if (IsExpired(item)) UpdateItem(ref item, -1, 2); else UpdateItem(ref item, -1, 1); return item; } Item GetNewBackstagesPasses(Item item) { if (IsExpired(item)) { UpdateItem(ref item, -1, 0); item.Quality = 0; } else { if (item.SellIn <= 10 && item.SellIn > 5) { UpdateItem(ref item, -1, 2); } else if (item.SellIn <= 5) { UpdateItem(ref item, -1, 3); } else { UpdateItem(ref item, -1, 1); } } return item; } Item GetNewConjured(Item item) { if (IsExpired(item)) { UpdateItem(ref item, -1, -4); } else { UpdateItem(ref item, -1, -2); } return item; } Item GetNewDefault(Item item) { if (IsExpired(item)) { UpdateItem(ref item, -1, -2); } else { UpdateItem(ref item, -1, -1); } return item; } public void UpdateQuality() { for (int itemIndex = 0; itemIndex < Items.Count; itemIndex++) { switch (Items[itemIndex].Name) { case AgedBrie: Items[itemIndex] = GetNewAgedBrie(Items[itemIndex]); break; case Sulfuras: break; case BackstagePasses: Items[itemIndex] = GetNewBackstagesPasses(Items[itemIndex]); break; case Conjured: Items[itemIndex] = GetNewConjured(Items[itemIndex]); break; default: Items[itemIndex] = GetNewDefault(Items[itemIndex]); break; } } } } }