私はここへの答えを求めた現実のシナリオに触発されました:https : //superuser.com/questions/1312212/writing-a-formula-to-count-how-many-times-each-date-日付のセットに表示されます
タイムスパンの配列(または開始日と終了日のペア)を指定すると、合計範囲内のすべての日について、1日をカバーするタイムスパンの数を出力します。
例えば:
# 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)
各日のカウントのみを出力する必要があります(順番に古いものから新しいものへソートされます)。どのレコードに表示されるかではありません。
各タイムスパンには、時刻ではなく日付のみが含まれると想定できます。したがって、丸1日は常に表されます。
I / O
入力は、タイムスパンのセットを表す任意の形式です。つまり、時間のペアのセット、または開始日と終了日を含む(ビルトイン)オブジェクトのコレクションのいずれかです。PPCGチャレンジでは通常のように、日時は1901〜2099に制限されています。
入力は好きなように事前にソートされていると仮定できます(答えを指定してください)。入力日付は包括的です(したがって、範囲には開始日と終了日全体が含まれます)。
また、特定の範囲内の2つの日付のうち、最初の日付が2番目の日付よりも古いか等しいと見なすこともできます(つまり、負の日付範囲はありません)。
出力は、開始日でソートされたときの入力の最も古いものから最も新しいものまでの各日のカウントを含む配列です。
したがって、上記の例の出力は次のようになります {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)
の挑戦(コンピューティングのタイムスパン)のコアに何も追加していないようだこれは、。