Date dans la plage?

9

Étant donné une MM/DDdate ( 12/24) et une plage de dates de début / fin ( 11/01 - 06/24), déterminez si la date se situe dans la plage de dates indiquée.

Les plages de dates peuvent être séquentielles ( 05/01 - 11/01) ou remonter à l'année suivante ( 11/01 - 05/01).

Exemples:

  • 12/24est dans 11/01 - 06/24= True
  • 06/24est dans 11/01 - 06/24= True
  • 06/24est dans 06/24 - 06/24= True
  • 06/24est 11/01 - 06/23dedans = Faux
  • 07/24est 11/01 - 06/24dedans = Faux
  • 07/24est dans 05/01 - 11/01= True
  • 07/24est dans 07/23 - 07/20= True

Les années ne comptent pas. La date et / ou la plage de dates est supposée s'appliquer à toute année passée ou future.

La date de fin sera toujours postérieure à la date de début. Si la date de fin est numériquement inférieure à la date de début, nous supposons que nous terminons l'année suivante.

Les trois variables d'entrée peuvent être via n'importe quelle méthode (args, HTTP, stdin, etc.) et dans n'importe quel format (chaîne, JSON, tableau, etc.)

La réponse peut être booleanou n'importe quelle forme de chaîne oui / non / correcte / etc. Le code le plus court gagne.

Vous ne pouvez pas simplement passer des arguments à une fonction intégrée.

Xeoncross
la source
Pouvons-nous plutôt prendre le résultat comme un tableau de chaînes? C'est à dire ['MM', 'DD']?
M. Xcoder
Suggestion de cas de test:11/01 - 06/24 includes 06/24?
M. Xcoder
@ Mr.Xcoder imaginez-vous quelque chose comme ['06', '24']si vous avez raison []ou que voulez-vous dire?
Xeoncross
1
Pour votre deuxième cas de test, supposons que nous parlions cette année 2017et l'année prochaine 2018. Comment sommes-nous censés déterminer ce 06/24moyen 2018et donc devrait être Trueplutôt que 2017et donc Falseparce que c'est avant 11/01?
AdmBorkBork
1
" date > start & date < end" - Alors certains de vos cas de test sont erronés. Je pense que vous voulez dire start<=date<=end.
Shaggy

Réponses:

4

JavaScript (ES6), 26 20 octets

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

La sortie est 0si ase situe dans la plage b... c, 1sinon. Edit: 6 octets enregistrés grâce à @nwellnhof.

Neil
la source
1
Et alors (a,b,c)=>b>c^b>a^a>c?
nwellnhof
@nwellnhof Je ne peux pas croire que j'ai raté ça - ma toute première tentative a été b>a^a>c, mais j'ai ensuite ignoré la solution simple ...
Neil
Vous devez mettre à jour le nombre d'octets.
nwellnhof
@nwellnhof Désolé, j'étais encore sous le choc!
Neil
4

Haskell , 28 octets

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

Essayez-le en ligne!

Merci à Leo pour l'astuce de xor'ing les booléens avec /=.


Haskell , 33 octets

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

Essayez-le en ligne!

xnor
la source
Votre showastuce est cool, mais vous pouvez XOR les trois éléments d'une manière plus directe avec foldl1: tio.run/…
Leo
1
@Leo Belle idée, elle est encore plus courte développée.
xnor
2

JavaScript (ES6), 31 octets

Prend l'entrée en 3 chaînes au MM/DDformat: date , range_from , range_to . Renvoie un booléen.

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

Cas de test

Arnauld
la source
Grâce au MM/DDformat, vous pouvez simplement utiliser le tri des chaînes. Bonne idée.
Xeoncross
2

Haskell , 38 37 octets

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

Essayez-le en ligne!

1 octet enregistré grâce à Laikoni

jferard
la source
Vous pouvez utiliser la notation infixe pour enregistrer un octet: (d#b)e=.
Laikoni
1

Perl 6 , 33 31 29 octets

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

Essayez-le en ligne!

Prend une liste contenant le début, la date et la fin.

-2 octets grâce à Ramillies.

nwellnhof
la source
Et ici, vous pouvez enregistrer 2 octets en prenant à la place 1 argument de liste. Puis @_[0]peut être écrit au fur .[0]et à [(whatever)] @_mesure [(whatever)] $_. Vous aurez juste besoin de l'appeler comme $f(($s,$d,$e)).
Ramillies
1

Perl 5 , 60 octets

59 octets de code + 1 -a

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

Essayez-le en ligne!

Contribution: start_date end_date target_date

Xcali
la source