Một văn phòng (hãy gọi nó là "Văn phòng") sẽ cắt giảm thời gian lãng phí vào năm 2019 bằng cách hợp nhất các bữa tiệc sinh nhật của văn phòng. Bất kỳ hai người nào có sinh nhật từ thứ Hai đến thứ Sáu (bao gồm) trong cùng một tuần sẽ được tổ chức với Bữa tiệc sinh nhật chung vào một thời gian trong tuần đó. Những người có ngày sinh nhật rơi vào thứ bảy hoặc chủ nhật không có bữa tiệc nào cả.
Một số người không thích chia sẻ bữa tiệc sinh nhật với những người không chia sẻ ngày sinh nhật thực sự của họ. Họ sẽ rất tức giận khi có một bữa tiệc sinh nhật chung .
Chúng tôi sẽ mô phỏng một văn phòng và tìm thấy tuần đầu tiên mà ai đó rất tức giận về Bữa tiệc sinh nhật chung của họ .
Các thách thức
Viết chương trình hoặc chức năng đưa ra số tuần ISO đầu tiên cho năm 2019, trong đó ai đó trong văn phòng mô phỏng sẽ rất tức giận về Bữa tiệc sinh nhật chung của họ , tuân theo các quy tắc cơ bản sau:
- nhập một số nguyên N > 1, là số công nhân trong văn phòng.
- các N sinh nhật mình được phân bố đều một cách ngẫu nhiên từ 1 Tháng một - 31 Tháng 12 (bỏ qua ngày 29 tháng 2).
- nhưng các tuần làm việc cho mục đích xác định các bữa tiệc sinh nhật được chia sẻ là các Ngày trong tuần ISO 2019, trong khoảng từ 2019-W01-1 (2018-12-31) và 2019-W52-7 (2019-12-29). Một tuần ISO mới bắt đầu vào mỗi thứ Hai. (Tôi nghĩ rằng đây là tất cả những gì bạn thực sự cần biết về tuần ISO cho thử thách này).
- Đối với N người trong văn phòng, mỗi người có 1/3 cơ hội có loại tính cách Bữa tiệc sinh nhật được chia sẻ rất tức giận , vì vậy bạn cũng sẽ phải mô phỏng điều đó.
- nhưng họ sẽ không tức giận nếu bữa tiệc được chia sẻ với những người có cùng ngày sinh.
- xuất số tuần ISO (định dạng chính xác cho điều này là linh hoạt miễn là số tuần rõ ràng) cho lần xuất hiện đầu tiên của một người Rất tức giận . Nếu không có người tức giận, bạn có thể xuất ra bất cứ điều gì không bị nhầm lẫn với một tuần ISO hoặc chương trình có thể bị lỗi, v.v.
Một số giả định đơn giản hóa:
- như tôi đã đề cập, bỏ qua vấn đề ngày 29 tháng 2 hoàn toàn (một biến chứng không cần thiết)
- bỏ qua các ngày lễ (đây là một cộng đồng quốc tế vì vậy ngày lễ của chúng tôi sẽ khác nhau) và chỉ giả sử văn phòng mở cửa vào mỗi ngày trong tuần.
Quy tắc
Đây là môn đánh gôn. Câu trả lời ngắn nhất tính theo byte cho mỗi ngôn ngữ sẽ thắng. Lỗ hổng mặc định bị cấm.
Mã giải thích chào mừng.
Ví dụ làm việc
Ví dụ 1 có đầu vào N = 7. Cột thứ nhất và thứ hai là ngẫu nhiên như được mô tả trong các quy tắc (tất nhiên không thực sự ngẫu nhiên ở đây).
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2018-12-31 W01 In the 2019 ISO week date year
Y 2018-12-31 W01 Same birthday, so no anger happens
N 2019-02-05 W06
Y 2019-03-15 W11 No anger happens because other W11 b-day is a Saturday
N 2019-03-16 W11
N 2019-09-08 W36 My birthday!
Y 2019-12-30 - Not in the 2019 ISO week date year
Vì vậy, không có sự tức giận xảy ra. Chương trình hoặc chức năng có thể lỗi hoặc xuất ra thứ gì đó không bị nhầm lẫn với số tuần ISO.
Ví dụ 2 với N không xác định.
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2019-01-19 W03
Y 2019-02-04 W06
N 2019-02-05 W06 No anger because not an angry person
... ... ... (No angry people until...)
Y 2019-03-12 W11 Very Angry Person!
N 2019-03-14 W11
... ... ... ...
Đầu ra sẽ là W11
hoặc một cái gì đó tương đương.