Data w zakresie?

9

Biorąc pod uwagę MM/DDdatę ( 12/24) i zakres dat rozpoczęcia / zakończenia ( 11/01 - 06/24), dowiedz się, czy data mieści się w podanym zakresie dat.

Zakresy dat mogą być sekwencyjne ( 05/01 - 11/01) lub obejmować kolejny rok ( 11/01 - 05/01).

Przykłady:

  • 12/24jest w 11/01 - 06/24= Prawda
  • 06/24jest w 11/01 - 06/24= Prawda
  • 06/24jest w 06/24 - 06/24= Prawda
  • 06/24jest w 11/01 - 06/23= False
  • 07/24jest w 11/01 - 06/24= False
  • 07/24jest w 05/01 - 11/01= Prawda
  • 07/24jest w 07/23 - 07/20= Prawda

Lata nie mają znaczenia. Zakłada się, że data i / lub zakres dat będzie obowiązywał dla dowolnego roku przeszłego lub przyszłego.

Data końcowa zawsze będzie późniejsza niż data początkowa. Jeśli data końcowa jest liczbowo krótsza niż data początkowa, zakładamy, że zbliżamy się do następnego roku.

Trzy zmienne wejściowe mogą być za pomocą dowolnej metody (args, HTTP, stdin itp.) I w dowolnym formacie (ciąg, JSON, tablica itp.)

Odpowiedź może być booleandowolną postacią ciągu tak / nie / poprawny / itp. Najkrótszy kod wygrywa.

Nie można po prostu przekazywać argumentów do wbudowanej funkcji.

Xeoncross
źródło
Czy zamiast tego możemy wziąć wynik jako tablicę ciągów? To znaczy ['MM', 'DD']?
Pan Xcoder,
Sugestia przypadku testowego:11/01 - 06/24 includes 06/24?
Pan Xcoder,
@ Mr.Xcoder, czy wyobrażasz sobie coś takiego ['06', '24'], jak w innym przypadku []lub co masz na myśli?
Xeoncross,
1
W drugim przypadku testowym załóżmy, że rozmawiamy w tym roku 2017i w przyszłym roku 2018. Jak mamy określić te 06/24środki, 2018a zatem powinniśmy być, Truea nie 2017dlatego, Falseże tak było wcześniej 11/01?
AdmBorkBork
1
date > start & date < end” - W takim razie niektóre z twoich przypadków testowych są nieprawidłowe. Myślę, że masz na myśli start<=date<=end.
Shaggy

Odpowiedzi:

4

JavaScript (ES6), 26 20 bajtów

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

Wyjście jest 0jeśli amieści się w zakresie b... c, 1czy nie. Edycja: Zapisano 6 bajtów dzięki @nwellnhof.

Neil
źródło
1
Co (a,b,c)=>b>c^b>a^a>c?
nwellnhof,
@nwellnhof Nie mogę uwierzyć, że mi tego brakowało - moja pierwsza próba była b>a^a>c, ale potem przeoczyłem prostą poprawkę ...
Neil
Powinieneś zaktualizować liczbę bajtów.
nwellnhof,
@nwellnhof Przepraszam, wciąż szarpałem się po szoku!
Neil
4

Haskell , 28 bajtów

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

Wypróbuj online!

Dzięki Leo za sztuczkę z Xor'ingiem z Booleanami /=.


Haskell , 33 bajty

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

Wypróbuj online!

xnor
źródło
Twoja showsztuczka jest fajna, ale możesz XOR trzy elementy w bardziej bezpośredni sposób dzięki foldl1: tio.run/…
Leo
1
@Leo Fajny pomysł, jest jeszcze krótszy.
xnor
2

JavaScript (ES6), 31 bajtów

Pobiera dane wejściowe jako 3 ciągi znaków w MM/DDformacie: data , zakres_od , zakres_do . Zwraca wartość logiczną.

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

Przypadki testowe

Arnauld
źródło
Dzięki MM/DDformatowi możesz po prostu użyć sortowania ciągów. Dobry pomysł.
Xeoncross,
2

Haskell , 38 37 bajtów

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

Wypróbuj online!

Zaoszczędzono 1 bajt dzięki Laikoni

Jferard
źródło
Można używać notacji Infix zapisać bajt: (d#b)e=.
Laikoni,
1

Perl 6 , 33 31 29 bajtów

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

Wypróbuj online!

Pobiera listę zawierającą datę rozpoczęcia, datę i zakończenie.

-2 bajty dzięki Ramillies.

nwellnhof
źródło
Tutaj możesz zapisać 2 bajty, biorąc zamiast tego 1 argument listy. Następnie @_[0]można zapisać jako .[0]i [(whatever)] @_jako [(whatever)] $_. Musisz to tak nazwać $f(($s,$d,$e)).
Ramillies,
1

Perl 5 , 60 bajtów

59 bajtów kodu + 1 -a

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

Wypróbuj online!

Wejście: start_date end_date target_date

Xcali
źródło