Refactored GildedRose

Signed-off-by: Atul Anand <atulanand206@gmail.com>
This commit is contained in:
Atul Anand 2020-09-14 01:04:08 +05:30
parent 5f9bbe6716
commit c29949a491

View File

@ -2,57 +2,106 @@ package com.gildedrose
class GildedRose(val items: Array[Item]) {
def updateQuality() {
for (i <- 0 until items.length) {
if (!items(i).name.equals("Aged Brie")
&& !items(i).name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items(i).quality > 0) {
if (!items(i).name.equals("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.equals("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
}
}
}
}
}
if (!items(i).name.equals("Sulfuras, Hand of Ragnaros")) {
items(i).sellIn = items(i).sellIn - 1
}
if (items(i).sellIn < 0) {
if (!items(i).name.equals("Aged Brie")) {
if (!items(i).name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items(i).quality > 0) {
if (!items(i).name.equals("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
}
}
}
for (i <- items.indices) {
if (isItemNotIncremental(i)) {
if (isQualityPositive(i))
incrementQuality(i, -1)
} else
incrementQualityForIncrementalItems(i)
decrementSellInIfNotSulfuras(i)
if (isSellInLessThanThreshold(i, 0))
updateQualityIfSellInZero(i)
}
}
private def incrementQualityForIncrementalItems(i: Int): Unit = {
if (isQualityLessThan50(i)) {
incrementQuality(i, 1)
additionalIncrementForBackstagePasses(i)
}
}
private def updateQualityIfSellInZero(i: Int): Unit = {
if (isAgedBrie(i))
incrementQualityBy1IfLessThan50(i)
else if (isBackstagePass(i))
dropQualityTo0(i)
else if (!isSulfuras(i) && isQualityPositive(i))
incrementQuality(i, -1)
}
private def additionalIncrementForBackstagePasses(i: Int): Unit = {
if (isBackstagePass(i))
incrementBackstagePassQuality(i)
}
private def incrementBackstagePassQuality(i: Int): Unit = {
incrementForBackstagePassesIfSellInBetween5and10(i)
incrementForBackstagePassesIfSellInBetween0and5(i)
}
private def incrementForBackstagePassesIfSellInBetween0and5(i: Int): Unit = {
if (isSellInLessThanThreshold(i, 6))
incrementQualityBy1IfLessThan50(i)
}
private def incrementForBackstagePassesIfSellInBetween5and10(i: Int): Unit = {
if (isSellInLessThanThreshold(i, 11))
incrementQualityBy1IfLessThan50(i)
}
private def decrementSellInIfNotSulfuras(i: Int): Unit = {
if (!isSulfuras(i))
decrementSellIn(i)
}
private def incrementQualityBy1IfLessThan50(i: Int): Unit = {
if (isQualityLessThan50(i))
incrementQuality(i, 1)
}
private def isSellInLessThanThreshold(i: Int, threshold: Int) = {
items(i).sellIn < threshold
}
private def decrementSellIn(i: Int): Unit = {
items(i).sellIn = items(i).sellIn - 1
}
private def isQualityPositive(i: Int) = {
items(i).quality > 0
}
private def isQualityLessThan50(i: Int) = {
items(i).quality < 50
}
private def incrementQuality(i: Int, delta: Int): Unit = {
items(i).quality = items(i).quality + delta
}
private def dropQualityTo0(i: Int): Unit = {
items(i).quality = 0
}
private def isItemNotIncremental(i: Int) = {
!isAgedBrie(i) && !isBackstagePass(i) && !isSulfuras(i)
}
private def isBackstagePass(i: Int) = {
items(i).name.equals("Backstage passes to a TAFKAL80ETC concert")
}
private def isAgedBrie(i: Int) = {
items(i).name.equals("Aged Brie")
}
private def isSulfuras(i: Int) = {
items(i).name.equals("Sulfuras, Hand of Ragnaros")
}
private def isConjured(i: Int) = {
items(i).name.equals("Conjured Mana Cake")
}
}