สำนักงาน (เรียกว่า "สำนักงาน") กำลังจะลดเวลาที่เสียไปในปี 2562 โดยรวมงานวันเกิดของสำนักงาน บุคคลสองคนใดที่มีวันเกิดระหว่างวันจันทร์ถึงวันศุกร์ (รวม) ในสัปดาห์เดียวกันจะได้รับการเฉลิมฉลองด้วยปาร์ตี้วันเกิดที่ใช้ร่วมกันในบางครั้งในสัปดาห์นั้น ผู้ที่มีวันเกิดตกในวันเสาร์หรือวันอาทิตย์จะไม่มีปาร์ตี้เลย
บางคนไม่ชอบแบ่งปันปาร์ตี้วันเกิดกับคนที่ไม่ได้แบ่งปันวันเกิดจริง พวกเขาจะโกรธมากที่จะมีปาร์ตี้วันเกิดร่วมกัน
พวกเราจะไปจำลองสำนักงานและพบว่าในสัปดาห์แรกที่มีคนได้รับโกรธมากเกี่ยวกับพวกเขาที่ใช้ร่วมกันงานเลี้ยงวันเกิด
ความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกหมายเลขสัปดาห์ ISO แรกสำหรับปี 2019 ซึ่งบางคนในสำนักงานจำลองได้โกรธมากเกี่ยวกับงานวันเกิดร่วมของพวกเขาภายใต้กฎพื้นฐานต่อไปนี้:
- ป้อนจำนวนเต็มN > 1 ซึ่งเป็นจำนวนพนักงานในสำนักงาน
- ไม่มีวันเกิดตัวเองจะกระจายอย่างสม่ำเสมอที่สุ่ม ม.ค. 01-31 ธันวาคม (ละเว้น 29 กุมภาพันธ์)
- แต่สัปดาห์การทำงานเพื่อจุดประสงค์ในการกำหนดวันเกิดที่ใช้ร่วมกันคือ 2019 ISO สัปดาห์วันซึ่งอยู่ระหว่าง 2019-W01-1 (2018-12-31) และ 2019-W52-7 (2019-12-29) สัปดาห์ ISO ใหม่จะเริ่มทุกวันจันทร์ (ฉันคิดว่านี่คือทั้งหมดที่คุณต้องรู้เกี่ยวกับ ISO สัปดาห์สำหรับความท้าทายนี้)
- สำหรับคนNในสำนักงานแต่ละคนมีโอกาส 1/3 ในการมีบุคลิกภาพแบบวันเกิดแชร์โกรธมาก ดังนั้นคุณจะต้องจำลองสิ่งนั้นด้วย
- แต่พวกเขาจะไม่โกรธถ้ามีการแบ่งปันปาร์ตี้กับคนที่มีวันคล้ายวันเกิด
- เอาท์พุทหมายเลขสัปดาห์ ISO (รูปแบบที่แน่นอนสำหรับสิ่งนี้จะยืดหยุ่นตราบเท่าที่หมายเลขสัปดาห์ชัดเจน) สำหรับการเกิดขึ้นครั้งแรกของบุคคลที่โกรธมาก หากไม่มีคนโกรธคุณสามารถส่งออกสิ่งที่ไม่สับสนกับสัปดาห์ ISO หรือโปรแกรมอาจผิดพลาดเป็นต้น
สมมติฐานที่ทำให้เข้าใจง่ายบางอย่าง:
- ดังที่ฉันได้กล่าวไปแล้วให้เพิกเฉยต่อปัญหา 29 กุมภาพันธ์อย่างสมบูรณ์ (ภาวะแทรกซ้อนที่ไม่จำเป็น)
- ละเว้นวันหยุดนักขัตฤกษ์ (นี่เป็นประชาคมระหว่างประเทศดังนั้นวันหยุดของเราจะแตกต่างกันไป) และเพียงแค่สมมติว่าสำนักงานเปิดทำการในแต่ละวันธรรมดา
กฎระเบียบ
นี่คือรหัสกอล์ฟ คำตอบสั้น ๆ เป็นไบต์สำหรับแต่ละภาษาที่ชนะ ช่องโหว่เริ่มต้นที่ต้องห้าม
ยินดีต้อนรับคำอธิบายเกี่ยวกับรหัส
ตัวอย่างการทำงาน
ตัวอย่างที่มีการประดิษฐ์ 1 พร้อมอินพุตN = 7 คอลัมน์แรกและคอลัมน์ที่สองสุ่มตามที่อธิบายไว้ในกฎ (แต่ไม่ได้สุ่มที่นี่แน่นอน)
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
ดังนั้นจึงไม่มีความโกรธเกิดขึ้น โปรแกรมหรือฟังก์ชั่นสามารถผิดพลาดหรือส่งออกสิ่งที่ไม่สับสนกับหมายเลขสัปดาห์ ISO
ตัวอย่างที่ 2 ที่ไม่มีการระบุN
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
... ... ... ...
การส่งออกจะเป็นW11หรือสิ่งที่เทียบเท่า