检测每月半月双周日期的算法



Using PostgreSQL (11+(, Ruby (2.6+( 和 Rails (5.2+(

我有一系列代表工资单日期的日期,例如

2000-06-30
2000-06-15
2000-05-30
2000-05-15
2000-04-28
2000-04-14
2000-02-15
2000-01-28
2000-01-14

警告:

  • 一个系列可能不完整,空白覆盖一个或多个工资单日期。

  • 雇用组织设定自己的时间表,因此,例如,半月可能是 15 日和 30 日或 1 日和 16 日或其他组合。

  • 如果员工的最终工资单在错误的工资单
  • 中被削减,则最后一个日期(或可能是两个(可能是"错误的",因为它与以前的工资单不同步。

  • 在该系列期间,员工可能从多个不同计划的工资单中收到了付款,可能是重叠的。

我可以应用哪种算法或方法来检测截至系列结束时适用的工资单频率?

编辑:

预期的输出是以下四个符号之一:

  • :每月
  • :半月刊
  • :双周刊
  • :周刊

(在此特定情况下,可以忽略这四个以外的工资单频率,但可能有助于制定通用解决方案。

遍历数组并计算列表中当前项目和下一项之间的差异(例如 2000-06-30 - 2000-06-15 = 15(,直到您有一个"工资单之间的天数"列表(例如 [15, 15, 15, 17 ...](

然后,使用该列表的模式查找工资单之间最常见的距离(给定上述示例,模式为 15(。你会很想找到平均值/平均值,但模式更适合忽略那些"错误"的日期。

如果您需要帮助在 ruby 中实现这些步骤中的任何一个,请大声喊叫,但您应该找到一些已经存在的 SO 答案来帮助您入门。

最后,创建一个"测试"日期列表 - 您可以在其中手动知道所需的答案。玩这个,直到你的算法给你答案。

最新更新