Extracted range checks and added helper methods + constants

This commit is contained in:
Murat Bataray 2023-02-09 23:42:39 +01:00
parent 584d658dd6
commit d0cb683b03

View File

@ -1,59 +1,66 @@
import Foundation
public class GildedRose { public class GildedRose {
private static let agedBrieString = "Aged Brie"
private static let backstagePassString = "Backstage passes to a TAFKAL80ETC concert"
private static let sulfurasString = "Sulfuras, Hand of Ragnaros"
private static let itemQualityDegradationAmount = -1
private static let minimumQuality = 0
private static let maximumQuality = 50
var items: [Item] var items: [Item]
public init(items: [Item]) { public init(items: [Item]) {
self.items = items self.items = items
} }
private func adjustQuality(_ item: Item, adjustment: Int) {
let adjustedQuality = item.quality + adjustment
if adjustedQuality <= GildedRose.maximumQuality && adjustedQuality >= GildedRose.minimumQuality {
item.quality += adjustment
}
}
public func updateQuality() { private func updateItemQuality(_ item: Item) {
for i in 0 ..< items.count { if item.name != GildedRose.agedBrieString, item.name != GildedRose.backstagePassString {
if items[i].name != "Aged Brie", items[i].name != "Backstage passes to a TAFKAL80ETC concert" { if item.name != GildedRose.sulfurasString {
if items[i].quality > 0 { self.adjustQuality(item, adjustment: item.name.lowercased().range(of: "conjured") != nil ? GildedRose.itemQualityDegradationAmount * 2 : GildedRose.itemQualityDegradationAmount)
if items[i].name != "Sulfuras, Hand of Ragnaros" {
items[i].quality = items[i].quality - 1
}
}
} else {
if items[i].quality < 50 {
items[i].quality = items[i].quality + 1
if items[i].name == "Backstage passes to a TAFKAL80ETC concert" {
if items[i].sellIn < 11 {
if items[i].quality < 50 {
items[i].quality = items[i].quality + 1
}
}
if items[i].sellIn < 6 {
if items[i].quality < 50 {
items[i].quality = items[i].quality + 1
}
}
}
}
} }
} else {
if items[i].name != "Sulfuras, Hand of Ragnaros" { self.adjustQuality(item, adjustment: 1)
items[i].sellIn = items[i].sellIn - 1
} if item.name == GildedRose.backstagePassString {
if item.sellIn < 11 {
if items[i].sellIn < 0 { self.adjustQuality(item, adjustment: 1)
if items[i].name != "Aged Brie" { }
if items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
if items[i].quality > 0 { if item.sellIn < 6 {
if items[i].name != "Sulfuras, Hand of Ragnaros" { self.adjustQuality(item, adjustment: 1)
items[i].quality = items[i].quality - 1
}
}
} else {
items[i].quality = items[i].quality - items[i].quality
}
} else {
if items[i].quality < 50 {
items[i].quality = items[i].quality + 1
}
} }
} }
} }
if item.name != GildedRose.sulfurasString {
item.sellIn = item.sellIn - 1
}
if item.sellIn < 0 {
if item.name != GildedRose.agedBrieString {
if item.name != GildedRose.backstagePassString {
if item.name != GildedRose.sulfurasString {
self.adjustQuality(item, adjustment: item.name.lowercased().range(of: "conjured") != nil ? GildedRose.itemQualityDegradationAmount * 2 : GildedRose.itemQualityDegradationAmount)
}
} else {
self.adjustQuality(item, adjustment: -item.quality)
}
} else {
self.adjustQuality(item, adjustment: 1)
}
}
}
public func updateQuality() {
items.forEach({ item in
updateItemQuality(item)
})
} }
} }