एक वास्तविक जीवन के परिदृश्य से प्रेरित है, जो मैंने यहाँ एक उत्तर के लिए कहा है: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date प्रतीत होता है-में-एक-सेट की तारीख दौड़ा
टाइमपास की एक सरणी (या स्टार्ट-एंडडेट जोड़े) को देखते हुए, कुल रेंज में सभी दिनों के लिए प्रत्येक दिन कितने टाइमपैन को कवर किया जाता है, इसकी एक संख्या का उत्पादन करें।
उदाहरण के लिए:
# 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)
आपको केवल प्रत्येक दिन के लिए गणना करने की आवश्यकता है (क्रम में, सबसे पुराना-नवीनतम क्रमबद्ध); न कि वे किस रिकॉर्ड में दिखाई देते हैं।
आप यह मान सकते हैं कि प्रत्येक बार के समय में केवल तिथियां होती हैं, समय नहीं; और इसलिए पूरे दिन हमेशा प्रतिनिधित्व करते हैं।
आई / ओ
इनपुट कोई भी प्रारूप हो सकता है जो टाइमपास के एक सेट का प्रतिनिधित्व करता है - इसलिए या तो कई बार जोड़े का एक सेट, या प्रारंभ (और अंत-दिनांक) वाली (बिल्टिन) वस्तुओं का संग्रह। पीपीसीजी चुनौतियों के लिए सामान्य समय 1901 से 2099 के बीच सीमित है।
आप मान सकते हैं कि इनपुट पहले की तरह छांटा गया है लेकिन आपको (आपके उत्तर में निर्दिष्ट) पसंद है। इनपुट तिथियां समावेशी होती हैं (इसलिए रेंज में संपूर्ण आरंभ और समाप्ति तिथियां शामिल हैं)।
आप यह भी मान सकते हैं कि, किसी भी सीमा में दो तिथियों में, पहला पुराना या दूसरे के बराबर होगा (यानी आपके पास नकारात्मक तिथि सीमा नहीं होगी)।
आउटपुट एक सरणी है जिसमें प्रत्येक दिन के लिए गिनती होती है, जो प्रारंभ तिथि द्वारा छांटे जाने पर सबसे पुराने से इनपुट में सबसे नए तक होती है।
तो, उपरोक्त उदाहरण के लिए आउटपुट होगा {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)
है, जो चुनौती (कंप्यूटिंग timespans) के कोर करने के लिए कुछ भी जोड़ने की नहीं लगती।