Tôi có một đồng nghiệp tại nơi làm việc tại nhà vào mỗi thứ ba và thứ năm. Vào khoảng 8:00 sáng, anh ấy gửi cho chúng tôi một tin nhắn với nội dung như sau:
Xin chào hôm nay tôi đang làm việc tại nhà
Để giảm bớt gánh nặng cho anh ấy khỏi công việc này mỗi ngày anh ấy ở nhà, chúng tôi muốn tự động hóa nhiệm vụ này cho anh ấy.
Các thách thức
Viết càng ít byte càng tốt một đoạn mã:
- Nhận thời gian hiện tại: mã của bạn có thể nhận các giá trị cho năm hiện tại, tháng (1-12), ngày trong tháng (1-31), giờ (0-23) và phút (0-59) và ngày trong tuần (bạn có thể chọn số này bắt đầu từ 0 hoặc 1 và nếu 0/1 có nghĩa là Chủ nhật, Thứ Hai hoặc bất kỳ ngày nào khác); Hoặc bạn có thể nhận được một cấu trúc như
Date
,DateTime
,Calendar
hoặc bất kỳ cấu trúc thời gian có liên quan khác, nếu ngôn ngữ của bạn cho phép nó. Bạn cũng có thể nhận được một chuỗi có ngày trongyyyyMMddHHmm
nếu bạn muốn hoặc hai chuỗi riêng biệt cho ngày và thời gian, sau đó là một số nguyên với ngày trong tuần. Đừng ngại. - Trả về hai giá trị trung thực và falsey nhất quán , cho biết liệu tin nhắn có phải được gửi đến cuộc trò chuyện công việc hay không.
Quy tắc
- Đoạn mã này được coi là được gọi định kỳ. Tuy nhiên, tính chính xác là không liên quan.
- Giá trị trung thực phải được trả lại nếu ngày trong tuần là Thứ Ba hoặc Thứ Năm và thời gian là 8:00 sáng với biên độ lỗi là 10 phút (bao gồm từ 7:50 đến 8:10).
- Giá trị trung thực phải được gửi chỉ khi đó là lần đầu tiên mã được gọi giữa các giờ đó trong ngày được chỉ định. Chúng tôi không muốn bot gửi cùng một tin nhắn nhiều lần liên tiếp. Cách bạn quản lý hạn chế này sẽ hoàn toàn phụ thuộc vào bạn.
- Mã của bạn có thể là một chương trình độc lập được thực thi nhiều lần hoặc nó có thể là một phần của mã lớn hơn luôn chạy. Lựa chọn của bạn.
- Bạn có thể cho rằng sẽ không có khởi động lại giữa các lần thực thi mã.
- Bạn có thể cho rằng ngày sẽ luôn chính xác.
- Giải thích về mã của bạn và cụ thể về phương pháp được sử dụng để đạt được sự kiên trì được khuyến khích.
Ví dụ
(Week starts on Monday: 1, the following invokations will be made in succession)
2018,08,27,08,00,1 = falsey (not Tuesday or Thursday)
2018,08,28,07,45,2 = falsey (out of hours)
2018,08,28,07,55,2 = truthy (first time invoked this day at the proper hours)
2018,08,28,08,05,2 = falsey (second time invoked this day at the proper hours)
2018,08,28,08,15,2 = falsey (out of hours)
2018,08,29,08,00,3 = falsey (not Tuesday or Thursday)
2018,08,29,18,00,3 = falsey (not Tuesday or Thursday)
2018,08,30,07,49,4 = falsey (out of hours)
2018,08,30,07,50,4 = truthy (first time invoked this day at the proper hours)
2018,08,30,07,50,4 = falsey (second time invoked this day at the proper hours)
2018,08,30,08,10,4 = falsey (third time invoked this day at the proper hours)
2018,08,30,08,11,4 = falsey (out of hours)
2018,09,04,08,10,2 = truthy (first time invoked this day at the proper hours)
Đây là môn đánh gôn , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!
YYYYmmdd
thời gian HHss
không?