Datum in Reichweite?

9

Stellen Sie anhand eines MM/DDDatums ( 12/24) und eines Start- / Enddatumsbereichs ( 11/01 - 06/24) fest, ob das Datum innerhalb des angegebenen Datumsbereichs liegt.

Datumsbereiche können sequentiell sein ( 05/01 - 11/01) oder auf das nächste Jahr umlaufen ( 11/01 - 05/01).

Beispiele:

  • 12/24ist in 11/01 - 06/24= True
  • 06/24ist in 11/01 - 06/24= True
  • 06/24ist in 06/24 - 06/24= True
  • 06/24ist in 11/01 - 06/23= False
  • 07/24ist in 11/01 - 06/24= False
  • 07/24ist in 05/01 - 11/01= True
  • 07/24ist in 07/23 - 07/20= True

Jahre spielen keine Rolle. Es wird davon ausgegangen, dass das Datum und / oder der Datumsbereich für jedes vergangene oder zukünftige Jahr gilt.

Das Enddatum liegt immer nach dem Startdatum. Wenn das Enddatum numerisch unter dem Startdatum liegt, gehen wir davon aus, dass wir uns auf das nächste Jahr konzentrieren.

Die drei Eingabevariablen können über eine beliebige Methode (args, HTTP, stdin usw.) und in einem beliebigen Format (Zeichenfolge, JSON, Array usw.) erfolgen.

Die Antwort kann eine booleanbeliebige Form einer Ja / Nein / Richtig / etc .. Zeichenfolge sein. Der kürzeste Code gewinnt.

Sie können Argumente nicht einfach an eine integrierte Funktion übergeben.

Xeoncross
quelle
Können wir das Ergebnis stattdessen als Array von Zeichenfolgen betrachten? Dh ['MM', 'DD']?
Mr. Xcoder
Testfall Vorschlag:11/01 - 06/24 includes 06/24?
Mr. Xcoder
@ Mr.Xcoder stellst du dir so etwas vor, ['06', '24']wenn es richtig ist []oder was meinst du?
Xeoncross
1
Angenommen, wir sprechen für Ihren zweiten Testfall dieses 2017und nächstes Jahr 2018. Wie sollen wir das 06/24Mittel bestimmen 2018und sollten es Trueeher sein als 2017und so, Falseweil es vorher ist 11/01?
AdmBorkBork
1
" date > start & date < end" - Dann sind einige Ihrer Testfälle falsch. Ich denke was du meinst ist start<=date<=end.
Shaggy

Antworten:

4

JavaScript (ES6), 26 bis 20 Byte

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

Die Ausgabe erfolgt, 0wenn ainnerhalb des Bereichs liegt b... c, 1wenn nicht. Edit: 6 Bytes dank @nwellnhof gespeichert.

Neil
quelle
1
Was ist mit (a,b,c)=>b>c^b>a^a>c?
Nwellnhof
@wellnhof Ich kann nicht glauben, dass ich das verpasst habe - mein allererster Versuch war b>a^a>c, aber ich habe dann die einfache Lösung übersehen ...
Neil
Sie sollten die Byteanzahl aktualisieren.
Nwellnhof
@nwellnhof Entschuldigung, ich war immer noch vom Schock betroffen!
Neil
2

JavaScript (ES6), 31 Byte

Übernimmt die Eingabe als 3 Zeichenfolgen im MM/DDFormat: Datum , Bereich_von , Bereich_zu . Gibt einen Booleschen Wert zurück.

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

Testfälle

Arnauld
quelle
Dank des MM/DDFormats können Sie einfach die Zeichenfolgensortierung verwenden. Gute Idee.
Xeoncross
2

Haskell , 38 37 Bytes

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

Probieren Sie es online aus!

1 Byte dank Laikoni gespeichert

jferard
quelle
Sie können die Infix-Notation verwenden, um ein Byte zu speichern : (d#b)e=.
Laikoni
1

Perl 6 , 33 31 29 Bytes

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

Probieren Sie es online aus!

Nimmt eine Liste mit Start, Datum und Ende.

-2 Bytes dank Ramillies.

nwellnhof
quelle
Und hier können Sie 2 Bytes speichern, indem Sie stattdessen 1 Listenargument verwenden. Dann @_[0]kann als .[0]und [(whatever)] @_als geschrieben werden [(whatever)] $_. Sie müssen es nur so nennen $f(($s,$d,$e)).
Ramillies