Data dentro do intervalo?


9

Dada uma MM/DDdata ( 12/24) e um período de início / fim ( 11/01 - 06/24), descubra se a data está dentro do período listado.

Os períodos podem ser seqüenciais ( 05/01 - 11/01) ou agrupados até o próximo ano ( 11/01 - 05/01).

Exemplos:

  • 12/24está em 11/01 - 06/24= True
  • 06/24está em 11/01 - 06/24= True
  • 06/24está em 06/24 - 06/24= True
  • 06/24está em 11/01 - 06/23= Falso
  • 07/24está em 11/01 - 06/24= Falso
  • 07/24está em 05/01 - 11/01= True
  • 07/24está em 07/23 - 07/20= True

Os anos não são importantes. Presume-se que a data e / ou o período se apliquem a qualquer ano passado ou futuro.

A data final será sempre posterior à data de início. Se a data de término for numericamente menor que a data de início, presumimos que estamos concluindo o próximo ano.

As três variáveis ​​de entrada podem ser via qualquer método (args, HTTP, stdin, etc.) e em qualquer formato (string, JSON, array, etc.)

A resposta pode ser booleanou qualquer forma de uma sequência sim / não / correta / etc. O menor código vence.

Você não pode simplesmente passar argumentos para uma função interna.


Podemos considerar o resultado como uma matriz de seqüências de caracteres? Ou seja ['MM', 'DD']?
Mr. Xcoder

Sugestão de caso de teste:11/01 - 06/24 includes 06/24?
Mr. Xcoder

@ Mr.Xcoder, você está imaginando algo como ['06', '24']se estivesse certo []ou o que você quer dizer?
Xeoncross

11
Para o seu segundo caso de teste, suponha que estejamos falando este ano 2017e no próximo ano 2018. Como é que vamos determinar que 06/24meios 2018e, portanto, deve ser Truemais do que 2017e, assim, Falseporque é antes 11/01?
AdmBorkBork

11
" date > start & date < end" - Alguns dos seus casos de teste estão errados. Eu acho que o que você quer dizer é start<=date<=end.
Shaggy

Respostas:



4

JavaScript (ES6), 26 20 bytes

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

A saída é 0se aestiver dentro do intervalo b... c, 1se não. Editar: salvou 6 bytes graças a @nwellnhof.


11
Que tal (a,b,c)=>b>c^b>a^a>c?
Nwellnhof 11/09

@nwellnhof Eu não posso acreditar que eu perdi isso - a minha primeira tentativa foi b>a^a>c, mas eu então negligenciado a correção simples ...
Neil

Você deve atualizar a contagem de bytes.
Nwellnhof 11/09/17

@nwellnhof Desculpe, eu ainda estava sofrendo com o choque!
Neil


2

JavaScript (ES6), 31 bytes

Aceita entrada como três strings no MM/DDformato: data , intervalo_de , intervalo_para . Retorna um booleano.

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

Casos de teste


Graças ao MM/DDformato, você pode apenas usar a classificação de cadeias. Boa ideia.
Xeoncross


1

Perl 6 , 33 31 29 bytes

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

Experimente online!

Leva uma lista que contém início, data e fim.

-2 bytes graças a Ramillies.


E aqui, você pode salvar 2 bytes usando 1 argumento de lista. Então @_[0]pode ser escrito como .[0]e [(whatever)] @_como [(whatever)] $_. Você só precisa chamar assim $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])

Experimente online!

Entrada: start_date end_date target_date

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.