给定具有打开或关闭的单个状态的任何一系列输入日期,这样至少有一个输入日期(打开状态)导致添加单个日期(关闭,最大日期)以完成输出序列您将使用什么算法来生成符合以下条件的输出?
1. 没有连续的开放日期和连续的关闭日期。
2. 对于每个开放日期,只有一个关闭日期。
3. 第一个日期应该是 Open,最后一个日期应该是 Closed。
4. 除了第一个开盘日期和最后一个开盘日期外,每个开盘日期应该紧跟上一个开盘日期,或者换句话说,每个关盘日期应该是下一个开盘日期的前一天。
5. 最终日期为 Closed 和 Max date(本例中为 9999-12-31)
这不是一个家庭作业,我已经在 C# 中实现了它,它的生产代码将执行数百万次。性能很重要,是的,但在可读性方面非常次要。我使用的算法效果很好,但看起来很糟糕。欢迎任何语言。我会根据需要翻译。谢谢。
示例 1
input:
[2000-01-01,open]
output:
[2000-01-01,open]
[9999-12-31,closed]
示例 2
input:
[2000-01-01,open]
[2001-01-01,open]
output:
[2000-01-01,open]
[2000-12-31,closed]
[2001-01-01,open]
[9999-12-31,closed]
示例 3
input:
[2000-01-01,open]
[2004-04-30,closed]
output:
[2000-01-01,open]
[2004-04-30,closed]
[2004-05-01,open]
[9999-12-31,closed]
示例 4
input:
[2000-01-01,open]
[2000-03-17,open]
[2002-09-11,closed]
[2003-04-07,closed]
output:
[2000-01-01,open]
[2000-03-16,closed]
[2000-03-17,open]
[2002-09-11,closed]
[2002-09-12,open]
[2003-04-07,closed]
[2003-04-08,open]
[9999-12-31,closed]
我敢问哪一类语言最能解决这类问题?