Fecha dentro del rango?

9

Dada una MM/DDfecha ( 12/24) y un intervalo de fechas de inicio / finalización ( 11/01 - 06/24), determine si la fecha está dentro del intervalo de fechas indicado.

Los rangos de fechas pueden ser secuenciales ( 05/01 - 11/01) o ajustarse al año siguiente ( 11/01 - 05/01).

Ejemplos:

  • 12/24está en 11/01 - 06/24= verdadero
  • 06/24está en 11/01 - 06/24= verdadero
  • 06/24está en 06/24 - 06/24= verdadero
  • 06/24está en 11/01 - 06/23= falso
  • 07/24está en 11/01 - 06/24= falso
  • 07/24está en 05/01 - 11/01= verdadero
  • 07/24está en 07/23 - 07/20= verdadero

Los años no mater. Se supone que la fecha y / o el rango de fechas se aplican a cualquier año pasado o futuro.

La fecha de finalización siempre será posterior a la fecha de inicio. Si la fecha de finalización es numéricamente menor que la fecha de inicio, asumimos que estamos terminando el próximo año.

Las tres variables de entrada pueden ser a través de cualquier método (args, HTTP, stdin, etc.) y en cualquier formato (cadena, JSON, matriz, etc.)

La respuesta puede ser booleano cualquier forma de una cadena sí / no / correcta / etc. El código más corto gana.

No puede simplemente pasar argumentos a una función incorporada.

Xeoncross
fuente
¿Podemos tomar el resultado como una matriz de cadenas en su lugar? Es decir ['MM', 'DD']?
Sr. Xcoder
Sugerencia de caso de prueba:11/01 - 06/24 includes 06/24?
Sr. Xcoder
@ Mr.Xcoder, ¿te imaginas algo como ['06', '24']si fuera correcto []o qué quieres decir?
Xeoncross
1
Para su segundo caso de prueba, supongamos que estamos hablando este año 2017y el próximo 2018. ¿Cómo se supone que debemos determinar esos 06/24medios 2018y, por lo tanto, debería ser Truemás que 2017y Falseporque es antes 11/01?
AdmBorkBork
1
" date > start & date < end" - Entonces algunos de sus casos de prueba están equivocados. Creo que lo que quieres decir es start<=date<=end.
Shaggy

Respuestas:

4

JavaScript (ES6), 26 20 bytes

(a,b,c)=>b>c^b>a^a>c

La salida es 0si se aencuentra dentro del rango b... c, 1si no. Editar: Guardado 6 bytes gracias a @nwellnhof.

Neil
fuente
1
¿Qué hay de (a,b,c)=>b>c^b>a^a>c?
nwellnhof
@nwellnhof No puedo creer que me haya perdido eso, mi primer intento fue b>a^a>c, pero luego pasé por alto la solución simple ...
Neil
Debe actualizar el recuento de bytes.
nwellnhof
@nwellnhof Lo siento, todavía me estaba recuperando del susto.
Neil
4

Haskell , 28 bytes

(a%d)e=((e<a)/=(a<d))==(e<d)

Pruébalo en línea!

Gracias a Leo por el truco de xor'ing con los booleanos /=.


Haskell , 33 bytes

(a%d)e=show[e>=d,d>a,a>e]!!16>'a'

Pruébalo en línea!

xnor
fuente
Tu showtruco es genial, pero puedes XOR los tres elementos de una manera más directa con foldl1: tio.run/…
Leo
1
@Leo Buena idea, es aún más corto expandido.
xnor
2

JavaScript (ES6), 31 bytes

Toma la entrada como 3 cadenas en MM/DDformato: fecha , rango_de , rango_to . Devuelve un booleano.

(a,b,c)=>!(b<c?a<b|a>c:a<b&a>c)

Casos de prueba

Arnauld
fuente
Gracias al MM/DDformato, puede usar la clasificación de cadenas. Buena idea.
Xeoncross
2

Haskell , 38 37 bytes

(b#e)d=(last$and:[or|b>e])[d>=b,d<=e]

Pruébalo en línea!

Guardado 1 byte gracias a Laikoni

jferard
fuente
Se puede utilizar la notación infija para guardar un byte: (d#b)e=.
Laikoni
1

Perl 6 , 33 31 29 bytes

{.[0]>.[2]??![>] $_!![<=] $_}

Pruébalo en línea!

Toma una lista que contiene inicio, fecha y fin.

-2 bytes gracias a Ramillies.

nwellnhof
fuente
Y aquí, puede guardar 2 bytes tomando 1 argumento de lista en su lugar. Entonces @_[0]se puede escribir como .[0]y [(whatever)] @_como [(whatever)] $_. Solo tendrá que llamarlo así $f(($s,$d,$e)).
Ramillies
1

Perl 5 , 60 bytes

59 bytes de código + 1 -a

$F[1]=~s/./2/if$F[1]le$F[0];say($F[2]le$F[1]&&$F[2]ge$F[0])

Pruébalo en línea!

Entrada: start_date end_date target_date

Xcali
fuente