แรงบันดาลใจจากสถานการณ์ในชีวิตจริงซึ่งฉันได้ขอคำตอบจากที่นี่: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- ปรากฏใน-a-ชุดจากวันที่วิ่ง
กำหนดอาร์เรย์ของ timespans (หรือคู่ startdate-enddate) ให้นับจำนวนครั้งที่ครอบคลุมกี่ครั้งต่อวันสำหรับทุกวันในช่วงทั้งหมด
ตัวอย่างเช่น:
# Start End
1 2001-01-01 2001-01-01
2 2001-01-01 2001-01-03
3 2001-01-01 2001-01-02
4 2001-01-03 2001-01-03
5 2001-01-05 2001-01-05
รับข้อมูลข้างต้นผลลัพธ์ควรเป็นดังนี้:
2001-01-01: 3 (Records 1,2,3)
2001-01-02: 2 (Records 2,3)
2001-01-03: 2 (Records 2,4)
2001-01-04: 0
2001-01-05: 1 (Record 5)
คุณจะต้องส่งออกการนับสำหรับแต่ละวัน (ตามลำดับเรียงลำดับที่เก่าแก่ที่สุด); ไม่ใช่ระเบียนที่จะปรากฏ
คุณสามารถสมมติได้ว่าแต่ละช่วงเวลามีเฉพาะวันที่เท่านั้นไม่ใช่เวลา ดังนั้นทั้งวันจะถูกนำเสนอเสมอ
I / O
อินพุตสามารถเป็นรูปแบบใด ๆ ที่แสดงถึงชุดของช่วงเวลา - ดังนั้นชุดของเวลาหรือชุดของวัตถุ (บิวด์อิน) ที่มีวันที่เริ่มต้นและวันที่สิ้นสุด เวลาวันที่จะถูก จำกัด อยู่ระหว่างปีพ. ศ. 2444-2542 ตามปกติสำหรับความท้าทาย PPCG
คุณสามารถสมมติว่าอินพุตถูกเรียงลำดับล่วงหน้าตามที่คุณต้องการ (ระบุในคำตอบของคุณ) รวมวันที่ที่ป้อนเข้า (ดังนั้นช่วงจึงรวมวันที่เริ่มต้นและวันที่สิ้นสุดทั้งหมด)
นอกจากนี้คุณยังสามารถสันนิษฐานได้ว่าในสองวันที่ในช่วงที่กำหนดช่วงแรกจะเก่ากว่าหรือเท่ากับวินาที (เช่นคุณจะไม่มีช่วงวันที่ติดลบ)
เอาท์พุทเป็นอาร์เรย์ที่มีการนับในแต่ละวันจากที่เก่าที่สุดไปจนถึงใหม่ล่าสุดในการป้อนข้อมูลเมื่อเรียงตามวันที่เริ่มต้น
ดังนั้นผลลัพธ์สำหรับตัวอย่างข้างต้นจะเป็น {3,2,2,0,1}
เป็นไปได้ว่าบางวันจะไม่รวมอยู่ในช่วงเวลาใด ๆ ซึ่งในกรณี0
นั้นจะถูกส่งออกสำหรับวันที่นั้น
เกณฑ์การชนะ
นี่คือโค้ดกอล์ฟดังนั้นไบต์ที่ต่ำที่สุดจึงชนะ ใช้การยกเว้นตามปกติ
ตัวอย่างอัลกอริธึมหลอก
For each time range in input
If start is older than current oldest, update current oldest
If end is newer than current newest, update current newest
End For
For each day in range oldest..newest
For each time range
If timerange contains day
add 1 to count for day
End For
Output count array
อัลกอริทึมอื่น ๆ เพื่อให้ได้ผลลัพธ์เดียวกันนั้นใช้ได้
0
ได้ไหมว่าทำไมจึงควรอยู่ในพจนานุกรม ดูเหมือนว่าจะบังคับให้ผู้ใช้ทำซ้ำตั้งแต่min(input)
ถึงถึงmax(input)
ซึ่งดูเหมือนจะไม่เพิ่มอะไรเลยลงไปในแก่นของความท้าทาย