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 {
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]
public init(items: [Item]) {
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() {
for i in 0 ..< items.count {
if items[i].name != "Aged Brie", items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
if items[i].quality > 0 {
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
}
}
}
}
private func updateItemQuality(_ item: Item) {
if item.name != GildedRose.agedBrieString, 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)
}
if items[i].name != "Sulfuras, Hand of Ragnaros" {
items[i].sellIn = items[i].sellIn - 1
}
if items[i].sellIn < 0 {
if items[i].name != "Aged Brie" {
if items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
if items[i].quality > 0 {
if items[i].name != "Sulfuras, Hand of Ragnaros" {
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
}
} else {
self.adjustQuality(item, adjustment: 1)
if item.name == GildedRose.backstagePassString {
if item.sellIn < 11 {
self.adjustQuality(item, adjustment: 1)
}
if item.sellIn < 6 {
self.adjustQuality(item, adjustment: 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)
})
}
}