# System Design Practice – 1

## 題目:

(1)每個Routine有相同的屬性，但也有各別不同的屬性
(2)每個Routine可設定重複的次數
(3)一個Routine內可包含多個SubRoutine
(4) 給定某個Routine，求該Routine的depth

``````class AbstractRoutine {
var repeatTime: Int
var routineArr: [AbstractRoutine]
init(_ repeatTime: Int, _ routineArr: [AbstractRoutine]) {
self.repeatTime = repeatTime
self.routineArr = routineArr
}

convenience init() {
self.init(0, [])
}

func getDepth() -> Int {
return getDepthHelper(self)
}

private func getDepthHelper(_ routine: AbstractRoutine) -> Int {
let arr = routine.routineArr
if arr.count == 0 {
return 1
} else {
var max = 0
for item in arr{
let depth = getDepthHelper(item)
if depth > max { max = depth }
}
return max + 1
}
}
}

class Routine1: AbstractRoutine {}

class Routine2: AbstractRoutine {}

class Routine3: AbstractRoutine {}

var routineArray: [AbstractRoutine] = []
let routineA = Routine1()
let routineB = Routine1()
let routineC = Routine2()
let routineD = Routine3()
let routineE = Routine3()
routineB.routineArr = [routineC, routineD]
routineC.routineArr = [routineE]
routineArray = [routineA, routineB]

// Check getDepth correctness
// Test case:
// routine
// routine -> [routine1]
// routine -> [routine1 -> [routine3], routine2]
assert(routineA.getDepth() == 1, "Error 1")
assert(routineC.getDepth() == 2, "Error 2")
assert(routineB.getDepth() == 3, "Error 3")
``````