diff --git a/rust/src/gildedrose.rs b/rust/src/gildedrose.rs index e65fa085..e8cc0f33 100644 --- a/rust/src/gildedrose.rs +++ b/rust/src/gildedrose.rs @@ -13,6 +13,20 @@ impl Item { quality, } } + + pub fn update_quality(&mut self){ + self.quality = if self.name.contains("Sulfuras"){ + sulfuras_quality(self.quality, self.sell_in) + }else if self.name.contains("Aged Brie"){ + brie_quality(self.quality, self.sell_in) + }else if self.name.contains("Backstage passes"){ + backstage_quality(self.quality, self.sell_in) + }else if self.name.contains("Conjured"){ + conjured_quality(self.quality, self.sell_in) + }else{ + standard_quality(self.quality, self.sell_in) + } + } } impl Display for Item { @@ -21,6 +35,56 @@ impl Display for Item { } } + + + + +pub fn brie_quality(quality: i32, sell_in: i32) -> i32 { + if quality <= 0 || quality >= 50{ + return quality + } + if sell_in < 0 && quality <= 48{ + return quality + 2; + } + quality + 1 +} + +pub fn standard_quality(quality: i32, sell_in: i32) -> i32 { + if quality <= 0 || quality >= 50{ + return quality; + } + if sell_in < 0 && quality >= 2{ + return quality - 2; + } + quality - 1 +} + +pub fn sulfuras_quality(quality: i32, sell_in: i32) -> i32 { + return quality; +} + +pub fn conjured_quality(quality: i32, sell_in: i32) -> i32 { + if quality <= 0 || quality >= 50{ + return quality; + } + quality - 2 +} + +pub fn backstage_quality(quality: i32, sell_in: i32) -> i32 { + if quality <= 0 || quality >= 50{ + return quality; + } + let updated_quality = match sell_in{ + 10...6 => quality + 2, + 0...5 => quality + 3, + _ => quality + 1, + }; + if updated_quality >= 50{ + return 50; + } + return updated_quality; +} + pub struct GildedRose { pub items: Vec, } @@ -30,60 +94,25 @@ impl GildedRose { GildedRose { items } } + + // Todos tienen SellIn y Quality + // En general, Quality esta entre 0 y 50 + // Una vez que pasa SellIn, Quality se degrada al doble de velocidad + // Aged Brie aumenta su Quality con el tiempo + // Sulfuras Nunca tiene SellIn o Quality + // Backstage passes también aumenta Quality a medida que se acerca SellIn + // -Aumenta 2 cuando faltan 10 días o menos, 3 cuando faltan 5 o menos + // -Es 0 cuando sellin==0 + // Conjured bajan su calidad el doble de rápido + // Sulfuras siempre tiene quality en 80 pub fn update_quality(&mut self) { for i in 0..self.items.len() { - if self.items[i].name != "Aged Brie" && self.items[i].name != "Backstage passes to a TAFKAL80ETC concert" - { - if self.items[i].quality > 0 { - if self.items[i].name != "Sulfuras, Hand of Ragnaros" { - self.items[i].quality = self.items[i].quality - 1; - } - } - } else { - if self.items[i].quality < 50 { - self.items[i].quality = self.items[i].quality + 1; - - if self.items[i].name == "Backstage passes to a TAFKAL80ETC concert" { - if self.items[i].sell_in < 11 { - if self.items[i].quality < 50 { - self.items[i].quality = self.items[i].quality + 1; - } - } - - if self.items[i].sell_in < 6 { - if self.items[i].quality < 50 { - self.items[i].quality = self.items[i].quality + 1; - } - } - } - } - } - - if self.items[i].name != "Sulfuras, Hand of Ragnaros" { - self.items[i].sell_in = self.items[i].sell_in - 1; - } - - if self.items[i].sell_in < 0 { - if self.items[i].name != "Aged Brie" { - if self.items[i].name != "Backstage passes to a TAFKAL80ETC concert" { - if self.items[i].quality > 0 { - if self.items[i].name != "Sulfuras, Hand of Ragnaros" { - self.items[i].quality = self.items[i].quality - 1; - } - } - } else { - self.items[i].quality = self.items[i].quality - self.items[i].quality; - } - } else { - if self.items[i].quality < 50 { - self.items[i].quality = self.items[i].quality + 1; - } - } - } + self.items[i].update_quality() } } } + #[cfg(test)] mod tests { use super::{GildedRose, Item}; @@ -96,4 +125,7 @@ mod tests { assert_eq!("fixme", rose.items[0].name); } + + + }