Dada una lista de rangos de fechas r
como entrada, salida o devolución de cualquier rango que no se encuentre r
.
Por el bien de este ejemplo, la entrada estará en YYYY-MM-DD
formato.
Digamos que tiene tres rangos de fechas:
[2019-01-01, 2019-02-01]
[2019-02-02, 2019-04-05]
[2019-06-01, 2019-07-01]
Puedes ver que hay una brecha entre 2019-04-05
y 2019-06-01
.
El resultado será esa brecha: [2019-04-06, 2019-05-31]
Reglas
- La entrada y la salida pueden estar en cualquier fecha razonable o formato de recopilación, siempre que sea coherente.
- Suponga que la entrada no está ordenada.
- Su rango de fechas no tiene que ser
[latest, earliest]
, pero sí tiene que seguir la regla 2. - Suponga que no hay fechas superpuestas en la entrada
Casos de prueba:
Entrada: [[2019-01-01, 2019-02-01],[2019-02-02, 2019-04-05],[2019-06-01, 2019-07-01]]
Salida: [[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]]
Salida: [[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]]
Salida: []
Entrada: [[2019-01-01, 2019-02-01], [2019-11-02, 2019-11-20]]
Salida: [[2019-02-02, 2019-11-01]]
Entrada: [[2019-01-01, 2019-02-01],[2019-02-03, 2019-04-05]]
Salida: [[2019-02-02, 2019-02-02]]
o[[2019-02-02]]
YYYY-MM-DD
ya que el formato actual es extraño para muchas personas y se hizo aún más difícil de analizar debido al uso de pequeños días del mes≤12.Respuestas:
APL (Dyalog Extended) ,
282524 bytesFunción de prefijo tácito anónimo. El argumento y el resultado son matrices de 2 columnas de números de días desde una época, y cada fila representa un rango.
Pruébalo en línea! La función de
In
preprocesador se convierte de una lista de pares de listas de 3 elementos (fechas en orden ISO) a una matriz de 2 columnas de IDN, números de días internacionales (días desde 1899-12-31). LaOut
función de posprocesador se convierte de una matriz de IDN a una matriz de listas de 3 elementos.∧
ordenar filas ascendentes1⌽
gire cíclicamente las fechas un paso hacia la izquierda⍢,
mientras está desarmado (aplanado); luego, vuelva a dar forma a la forma original1 ¯1+
agregue uno y uno negativo⍤1
usando esa lista para cada fila∘
del resultado de{
...}
la siguiente lambda:⍵
el argumento-⍨/
resta la fecha de la izquierda de la fecha de la derecha, la1<
máscara de fila donde las diferencias exceden un⍵⌿⍨
filtro (es decir, donde los rangos no son adyacentes) las filas por esa máscarafuente
C # (compilador interactivo de Visual C #) , 108 bytes
Salidas imprimiendo en el formato
DD/MM/YYYY 12:00:00 AMDD/MM/YYYY 12:00:00 AM
. Causará una excepción IndexOutOfRange, que está bien por meta consenso.Pruébalo en línea!
Si tomamos datos en forma de días desde la época de Unix, podemos reducir esto a ...
83 bytes
Pruébalo en línea!
Podemos jugar golf aún más con la
/u:System.Array
bandera, por ...78 bytes
Pruébalo en línea!
fuente
Perl 5, 130 bytes
TIO
fuente
Bash, 125 bytes
TIO
fuente
Perl 6 , 46 bytes
Pruébalo en línea!
Toma una lista de
Date
pares.fuente
PHP,
208 197 190177 bytesHunky Chunky se sentó en una pared ... aunque el nuevo enfoque tenía bastante potencial de golf.
La función toma una variedad de rangos [inicio, fin] en formato ISO, imprime intervalos de intervalo. Pruébalo en línea .
Descompostura
fuente
Jalea , 13 bytes
Jelly (actualmente) no tiene fechas incorporadas, por lo que utiliza días desde la época.
La lista de entrada de rangos (pares de enteros) puede estar en orden mixto y en direcciones mixtas.
El resultado es una lista de rangos ascendentes en orden ascendente.
Pruébalo en línea! (formatos de pie de página para mostrar una lista vacía como
[]
)¿Cómo?
Nota: Esto se basa en la garantía de que "no hay fechas superpuestas en la entrada" como se indica en las reglas.
fuente
C # (compilador interactivo de Visual C #) , 103 bytes
Pruébalo en línea!
La entrada es una lista de tuplas de fecha de inicio / finalización. Emite cada rango faltante a STDOUT.
fuente
R , 88 bytes
Pruébalo en línea!
Esto toma un marco de datos de rangos de fechas como entrada y genera un marco de datos con los rangos que faltan. Estoy bastante seguro de que esto se podría jugar más, pero tuve problemas con
c
,cbind
entre otros pelar la clase fecha.fuente