Dada uma lista de períodos r
como entrada, saída ou retorno de qualquer intervalo não encontrado r
.
Para fins deste exemplo, a entrada estará em YYYY-MM-DD
formato.
Digamos que você tenha três períodos:
[2019-01-01, 2019-02-01]
[2019-02-02, 2019-04-05]
[2019-06-01, 2019-07-01]
Você pode ver que há uma lacuna entre 2019-04-05
e 2019-06-01
.
A saída será essa lacuna: [2019-04-06, 2019-05-31]
Regras
- A entrada e a saída podem estar em qualquer formato de data ou coleção razoável, desde que consistente.
- Suponha que a entrada não esteja ordenada.
- Seu período não precisa ser
[latest, earliest]
, mas deve seguir a regra 2. - Suponha que não haja datas sobrepostas na entrada
Casos de teste:
Entrada: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-04-05],[2019-06-01, 2019-07-01]]
Resultado: [[2019-04-06, 2019-05-31]]
Entrada: [[2019-01-01, 2019-02-01],[2018-02-02, 2018-04-05],[2019-06-01, 2019-07-01]]
Resultado: [[2018-04-06, 2018-12-31], [2019-02-02, 2019-05-31]]
Entrada: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-03-02],[2019-03-03, 2019-07-01]]
Resultado: []
Entrada: [[2019-01-01, 2019-02-01], [2019-11-02, 2019-11-20]]
Resultado: [[2019-02-02, 2019-11-01]]
Entrada: [[2019-01-01, 2019-02-01],[2019-02-03, 2019-04-05]]
Saída: [[2019-02-02, 2019-02-02]]
ou[[2019-02-02]]
YYYY-MM-DD
pois o formato atual é estrangeiro para muitas pessoas e ficou ainda mais difícil de analisar devido ao uso de pequenos dias do mês12.Respostas:
APL (Dyalog Extended) ,
282524 bytesFunção de prefixo tácito anônimo. Argumento e resultado são matrizes de 2 colunas de números de dias desde uma época, cada linha representando um intervalo.
Experimente online! A
In
função de pré-processador converte de uma lista de pares de listas de 3 elementos (datas na ordem ISO) em uma matriz de 2 colunas de IDNs, números de dias internacionais (dias desde 1899-12-31). AOut
função pós-processador converte de uma matriz de IDNs para uma matriz de listas de 3 elementos.∧
classificar linhas ascendentes1⌽
gire ciclicamente as datas um passo à esquerda⍢,
enquanto arrasta (achatada) - depois, modifique novamente a forma original1 ¯1+
adicione um e um negativo⍤1
usando essa lista para cada linha∘
do resultado de{
…}
o seguinte lambda:⍵
o argumento-⍨/
subtrai a data do lado esquerdo da data do lado direito, a1<
máscara no sentido da linha onde as diferenças excedem um⍵⌿⍨
filtro (por exemplo, onde os intervalos não são adjacentes) as linhas por essa máscarafonte
C # (compilador interativo do Visual C #) , 108 bytes
Saídas imprimindo no formato
DD/MM/YYYY 12:00:00 AMDD/MM/YYYY 12:00:00 AM
. Causará uma exceção IndexOutOfRange, que é boa por meta consenso.Experimente online!
Se recebermos informações na forma de dias desde a época do unix, podemos fazer isso ...
83 bytes
Experimente online!
Podemos jogar isso ainda mais com o
/u:System.Array
bandeira, por ...78 bytes
Experimente online!
fonte
Perl 5, 130 bytes
TIO
fonte
Bash, 125 bytes
TIO
fonte
Perl 6 , 46 bytes
Experimente online!
Leva uma lista de
Date
pares.fonte
PHP,
208 197 190177 bytespedaços robustos estavam sentados em uma parede ... embora a nova abordagem tivesse algum potencial de golfe.
A função pega uma série de faixas [início, fim] no formato ISO, imprime intervalos de folga. Experimente online .
demolir
fonte
Gelatina , 13 bytes
A geléia (atualmente) não tem datas internas, portanto, ela usa dias desde a época.
A lista de entrada de intervalos (pares de números inteiros) pode estar em ordem e direções diferentes.
O resultado é uma lista de intervalos ascendentes em ordem crescente.
Experimente online! (formatos de rodapé para mostrar uma lista vazia como
[]
)Quão?
Nota: Isso depende da garantia de que "não há datas sobrepostas na entrada", conforme declarado nas regras.
fonte
C # (compilador interativo do Visual C #) , 103 bytes
Experimente online!
Entrada é uma lista de tuplas de data de início / término. Emite cada intervalo ausente para STDOUT.
fonte
R , 88 bytes
Experimente online!
Isso leva um quadro de dados de intervalos de datas como entrada e gera um quadro de dados com os intervalos ausentes. Estou bastante certo de que este poderia ser golfed mais, mas eu corri em problemas com
c
,cbind
e outros decapagem a classe data.fonte