/superuser/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)
매일 카운트 만 출력하면됩니다 (순서대로 정렬). 어떤 레코드에 표시되지 않습니다.
각 시간 범위에는 시간이 아닌 날짜 만 포함되어 있다고 가정 할 수 있습니다. 그래서 하루 종일 항상 표현됩니다.
I / O
입력 은 일련의 시간 범위를 나타내는 모든 형식이 될 수 있습니다. 따라서 일련의 시간 쌍 또는 시작 날짜와 종료 날짜를 포함하는 (기본 제공) 개체 모음입니다. PPCG 챌린지에서와 같이 날짜-시간은 1901에서 2099 사이로 제한됩니다.
입력이 미리 정렬되어 있다고 가정 할 수 있습니다 (답변에 지정하십시오). 입력 날짜가 포함되므로 범위에 시작 날짜와 종료 날짜가 모두 포함됩니다.
또한 특정 범위의 두 날짜 중 첫 번째 날짜가 두 번째 날짜보다 오래되거나 같다고 가정 할 수 있습니다 (예 : 음수 날짜 범위가 없음).
출력 은 시작 날짜순으로 정렬 할 때 입력에서 가장 오래된 것부터 가장 새로운 것까지 매일의 수를 포함하는 배열입니다.
따라서 위 예제의 출력은 {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)
도전 (계산 시간 범위)의 핵심에 아무것도 추가하지 않는 것, 이는.