Tanggal dalam rentang?

9

Diberi MM/DDtanggal ( 12/24) dan rentang tanggal mulai / berakhir ( 11/01 - 06/24), cari tahu apakah tanggal tersebut dalam rentang tanggal yang tercantum.

Rentang tanggal dapat berurutan ( 05/01 - 11/01) atau beralih ke tahun berikutnya ( 11/01 - 05/01).

Contoh:

  • 12/24ada di 11/01 - 06/24= True
  • 06/24ada di 11/01 - 06/24= True
  • 06/24ada di 06/24 - 06/24= True
  • 06/24dalam 11/01 - 06/23= Salah
  • 07/24dalam 11/01 - 06/24= Salah
  • 07/24ada di 05/01 - 11/01= True
  • 07/24ada di 07/23 - 07/20= True

Tahun tidak mater. Tanggal dan / atau rentang tanggal diasumsikan berlaku untuk tahun lalu atau masa depan.

Tanggal akhir akan selalu setelah tanggal mulai. Jika tanggal akhir secara numerik lebih kecil dari tanggal mulai, kami anggap kami akan kembali ke tahun berikutnya.

Tiga variabel input dapat melalui metode apa saja (args, HTTP, stdin, dll.) Dan dalam format apa pun (string, JSON, array, dll.)

Respons dapat berupa booleanatau bentuk apa pun dari string ya / tidak / benar / dll. Kode terpendek menang.

Anda tidak bisa hanya meneruskan args ke fungsi bawaan.

Xeoncross
sumber
Bisakah kita mengambil hasilnya sebagai array dari string? Yaitu ['MM', 'DD']?
Tn. Xcoder
Saran uji kasus:11/01 - 06/24 includes 06/24?
Tn. Xcoder
@ Mr.Xcoder apakah Anda membayangkan sesuatu seperti ['06', '24']apakah benar []atau apa maksud Anda?
Xeoncross
1
Untuk uji kasus kedua Anda, misalkan kita berbicara tahun ini 2017dan tahun depan 2018. Bagaimana kita seharusnya menentukan 06/24cara itu 2018dan dengan demikian seharusnya Truelebih daripada 2017dan Falsekarena itu sebelumnya 11/01?
AdmBorkBork
1
" date > start & date < end" - Lalu beberapa test case Anda salah. Saya pikir apa yang Anda maksud adalah start<=date<=end.
Shaggy

Jawaban:

8

Python , 31 byte

lambda a,d,e:(e<d)>=(a<d)+(e<a)

Cobalah online!

Mengambil input sesuai MM/DDurutan target, start, end.

Tidak
sumber
4

JavaScript (ES6), 26 20 byte

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

Output adalah 0jika aterletak dalam jangkauan b... c, 1jika tidak. Sunting: Disimpan 6 byte berkat @nwellnhof.

Neil
sumber
1
Bagaimana dengan (a,b,c)=>b>c^b>a^a>c?
nwellnhof
@nwellnhof Aku tidak percaya aku melewatkan itu - usaha pertamaku adalah b>a^a>c, tapi aku kemudian mengabaikan perbaikan sederhana ...
Neil
Anda harus memperbarui jumlah byte.
nwellnhof
@nwellnhof Maaf, saya masih belum pulih dari keterkejutan!
Neil
4

Haskell , 28 byte

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

Cobalah online!

Terima kasih kepada Leo untuk trik xor'ing the Booleans dengan /=.


Haskell , 33 byte

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

Cobalah online!

Tidak
sumber
showTrik Anda keren, tetapi Anda dapat XOR ketiga elemen dengan cara yang lebih langsung dengan foldl1: tio.run/…
Leo
1
@ Leo Ide bagus, bahkan lebih pendek.
xnor
2

JavaScript (ES6), 31 byte

Mengambil input sebagai 3 string dalam MM/DDformat: date , range_from , range_to . Mengembalikan boolean.

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

Uji kasus

Arnauld
sumber
Berkat MM/DDformat Anda bisa menggunakan penyortiran string. Ide bagus.
Xeoncross
2

Haskell , 38 37 byte

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

Cobalah online!

Disimpan 1 byte berkat Laikoni

jferard
sumber
Anda dapat menggunakan notasi infix untuk menyimpan byte: (d#b)e=.
Laikoni
1

Perl 6 , 33 31 29 byte

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

Cobalah online!

Mengambil daftar yang berisi awal, tanggal, dan akhir.

-2 byte terima kasih kepada Ramillies.

nwellnhof
sumber
Dan di sini, Anda dapat menyimpan 2 byte dengan mengambil argumen daftar 1 sebagai gantinya. Maka @_[0]dapat ditulis sebagai .[0]dan [(whatever)] @_sebagai [(whatever)] $_. Anda hanya perlu menyebutnya seperti $f(($s,$d,$e)).
Ramillies
1

Perl 5 , 60 byte

59 byte kode +1 -a

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

Cobalah online!

Memasukkan: start_date end_date target_date

Xcali
sumber