オープンまたはクローズのいずれかの単一の状態を持つ一連の入力日付が与えられ、少なくとも単一の入力日 (オープン状態) があり、結果として単一の日付 (クローズド、最大日付) が追加されて出力シーケンスが完成します。次に従う出力を生成するためにどのアルゴリズムを使用しますか?
1. 連続するオープン日および連続するクローズ日はありません。
2. オープン日ごとに、クローズ日が 1 つだけあります。
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]
この種の問題を最もよく解決するのは、どのクラスの言語でしょうか?