Inspirado em um cenário da vida real, ao qual solicitei uma resposta aqui: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- aparece em um conjunto de datas
Dada uma matriz de intervalos de tempo (ou pares de datas de início e término), produza uma contagem de quantos intervalos de tempo abrangem todos os dias, para todos os dias no intervalo total.
Por exemplo:
# 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
Dados os dados acima, os resultados devem ser os seguintes:
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)
Você só precisa exibir as contagens para cada dia (em ordem, classificadas da mais antiga para a mais nova); não em quais registros eles aparecem.
Você pode assumir que cada período de tempo contém apenas datas, não horários; e assim dias inteiros são sempre representados.
I / O
A entrada pode ser qualquer formato que represente um conjunto de intervalos de tempo - portanto, um conjunto de pares de horários ou uma coleção de objetos (integrados) que contêm datas de início e término. A data e hora são limitadas entre 1901 e 2099, como é normal para os desafios do PPCG.
Você pode assumir que a entrada é pré-classificada da maneira que desejar (especifique na sua resposta). As datas de entrada são inclusivas (portanto, o intervalo inclui todas as datas de início e término).
Você também pode assumir que, das duas datas em um determinado intervalo, a primeira será mais antiga ou igual à segunda (ou seja, você não terá um período negativo).
A saída é uma matriz que contém a contagem para cada dia, da mais antiga à mais recente na entrada quando classificada por Data de Início.
Portanto, a saída para o exemplo acima seria {3,2,2,0,1}
É possível que alguns dias não sejam incluídos em nenhum intervalo de tempo; nesse caso, a 0
saída será para essa data.
Critérios Vencedores
Isso é código-golfe, então os bytes mais baixos vencem. Aplicam-se exclusões usuais
Exemplo de pseudo-algoritmo
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
Outros algoritmos para obter o mesmo resultado são bons.
0
deveria estar em um dicionário? Parece apenas forçar o usuário a iterar de min(input)
para max(input)
, o que não parece acrescentar nada ao cerne do desafio (intervalos de tempo de computação).