1
5
OP的编辑提到真正的潜在问题是:
一个直接的公式当然会更快,但是如果没有错误的话,这个“通过检查纠正”的例子可以自动校准更快的公式,通过检查他们在大量的日期对样本中是否一致(确保在后者中包括所有角落的情况,例如季度的第一天和最后一天)。 |
2
1
我会按时间顺序对某个特定员工的所有事件进行排序,并按该顺序模拟事件,检查可用的带薪休假天数从不低于零。带薪休假请求是一个值为-(小时数)的事件。1月1日有一个值为+8小时的活动。 每次对数据进行修改时,请从头开始重新运行模拟。
这可以通过将中间结果存储在缓存中来优化,但是由于每个员工可能只有几百个事件,所以这种优化可能没有必要。 |
3
1
这可以通过简单的旧整数数学来实现:
|
4
0
|
5
0
住处 ). 在元组中存储季度(作为基数索引或开始日期)、一个季度的最大累计小时数和一个季度的已用小时数。您需要一组元组来进行排序,这样才能正常工作,所以简单的列表可能不是您的最佳选择。字典可能是一个更好的方法来处理这个问题,以季度作为键,在元组中返回max/used条目,因为它可以“排序”。 (注:我看了原来的解释,改写了我的答案) 获取给定员工的所有季度的副本,按季度日期排序。迭代每个季度,将每个季度分配的最大休假时间与该季度“花费”的时间之差相加,直到到达请求日期所在的季度。这给了累积的时间。
如果有足够的累积时间,继续迭代复制的集合,每季度计算一次新的可用时间,从初始计算的剩余时间开始。 如果任何季度的计算时间低于零,则立即失败并拒绝请求。否则,继续,直到你用完四分之一。 如果计算了所有季度,则使用副本更新原始数据集并批准请求。 |