struct TimeAndMoneyFrame {
var timeHourStart:Int = 0
var timeHourEnd:Int = 0
var percentage: Double = 0
}
extension TimeAndMoneyFrame {
func timeLength() -> Int {
return timeHourEnd - timeHourStart
}
}
let 2000to2200 = TimeAndMoneyFrame(timeHourStart = 20, timeHourEnd = 22, percentage = 0.2)
let 2200to2300 = TimeAndMoneyFrame(timeHourStart = 22, timeHourEnd = 23, percentage = 0.35)
let timeArray:[TimeAndMoneyFrame] = [2000to2200]
//Assuming 'startUur' means startingHour
//Assuming 'eindUur' means endingHour
let startUur:Int = someHour // You define some hour
let eindUure:Int = someHour // You define some hour
let hourlyRateOfPay: Double = somePay // You define some pay
var totalPay: Double = 0
for time in timeArray {
let start = time.timeHourStart
let end = time.timeHourEnd
let percent = time.percentage
//Encompasses entirely
if(start > startUur && end < eindUur) {
totalPay += (hourlyRateOfPay * (1 + percent) * time.timeLength())
}
//Only encompassed the left side - i.e., their time worked ends within this time frame
else if(start > startUur) {
let timeWithinThisFrame = eindUur - start
totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
}
//Only encompassed right side - i.e., the beginning of the starts within this time frame
else if(eindUur < end) {
let timeWithinThisFrame = end - startUur
totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
}
}
Итак, мы можем разбить эту проблему на пару проблем.
1) Определение структуры / класса, которая охватывает период времени с соответствующим процентом
2) Алгоритм, необходимый для расчета общей заработной платы
У меня есть базовое предположение.
1) Вы говорите, что пособия - человек получает 35%, если он работает с 2200-2300 - я принял это как бонус, так сказать 1,35% от нормальной почасовой ставки. Если это не так, идея потребления временных интервалов по одному была бы одинаковой. Единственная разница может заключаться в расчете totalPay.
Мой алгоритм просматривает каждый таймфрейм и определяет, пересекает ли текущее время какой-либо из таймфреймов. Если это произойдет, я подсчитываю, сколько он перехватывает, и рассчитываю ставку оплаты.
Примечание: я все это кодировал на SO - могут быть некоторые синтаксические проблемы.