受到现实生活场景的启发,我要求在这里给出答案:https : //superuser.com/questions/1312212/writing-a-formula-to-count-how-many-times-each-date-出现在一组日期中
给定一组时间跨度(或开始日期-结束日期对),输出总范围内所有天每天覆盖多少时间跨度的计数。
例如:
# Start End
1 2001-01-01 2001-01-01
2 2001-01-01 2001-01-03
3 2001-01-01 2001-01-02
4 2001-01-03 2001-01-03
5 2001-01-05 2001-01-05
根据上述数据,结果应如下所示:
2001-01-01: 3 (Records 1,2,3)
2001-01-02: 2 (Records 2,3)
2001-01-03: 2 (Records 2,4)
2001-01-04: 0
2001-01-05: 1 (Record 5)
您只需要输出每天的计数(按最旧-最新的顺序排序);而不是它们出现在哪些记录中。
您可以假设每个时间跨度仅包含日期,而不是时间;因此,总是代表着整天。
输入输出
输入可以是表示一组时间跨度的任何格式,因此可以是一组时间对,也可以是一组包含开始日期和结束日期的(内置)对象。日期时间限制在1901年到2099年之间,这是PPCG挑战的正常情况。
您可以假设输入是预排序的,但是可以根据自己的喜好进行输入(在答案中指定)。输入日期包括在内(因此范围包括整个开始日期和结束日期)。
您还可以假定在任何给定范围内的两个日期中,第一个日期将早于或等于第二个日期(即,您将没有负数的日期范围)。
输出是一个数组,其中包含按开始日期排序时输入中从最旧到最新的每一天的计数。
因此,以上示例的输出为 {3,2,2,0,1}
可能在某些时间范围内未包含某些天,在这种情况下,0
将输出该日期。
获奖标准
这是代码高尔夫球,因此最低字节为准。通常排除
伪算法示例
For each time range in input
If start is older than current oldest, update current oldest
If end is newer than current newest, update current newest
End For
For each day in range oldest..newest
For each time range
If timerange contains day
add 1 to count for day
End For
Output count array
其他获得相同结果的算法也很好。
0
要在字典中?它似乎仅迫使用户从迭代min(input)
到max(input)
,这似乎并没有增加挑战的核心(计算时间)。