मैं एक समय यात्री हूं, और मैं समय बीतने के साथ जुनूनी हूं। मुझे विशेष रूप से उन क्षणों से प्यार है जब घड़ी के हाथ 12 पास होते हैं, या जब मैं अपने कैलेंडर के अगले पृष्ठ पर फ़्लिप करने के लिए मिलता हूं, या जब हर कोई चिल्लाता है "नया साल मुबारक हो!"
कृपया मुझे यह दिखाने के लिए एक कार्यक्रम लिखें कि मैं इस तरह के अंतिम क्षण से अगले तक कितनी दूर हूं, एक प्रगति पट्टी के रूप में। उदाहरण के लिए, अगर मैं यह कहूं कि यह समय 09:12 है, तो इसे प्रिंट करना चाहिए:
09:00 ####---------------- 10:00
अगर मैं यह कहूं कि यह महीना मई, 1982 का है, तो इसे छापना चाहिए:
1982-01 #######------------- 1983-01
क्या मैंने उल्लेख किया है कि मैं एक समय यात्री हूं? मैं 0 AD के पहले मिलिसेकंड से लेकर 9999 ईस्वी के अंतिम मिलिसेकंड तक कहीं भी यात्रा करता हूं, इसलिए कार्यक्रम को उस सीमा में किसी भी तारीख और समय को संभालने की आवश्यकता है।
इनपुट
इनपुट निम्न स्वरूपों में से एक में होगा:
YYYY-MM-DDThh:mm:ss.sss
YYYY-MM-DDThh:mm:ss
YYYY-MM-DDThh:mm
YYYY-MM-DDThh
YYYY-MM-DD
YYYY-MM
ये एकमात्र प्रारूप हैं जिन्हें संभालने की आवश्यकता है। प्रत्येक भाग में वास्तव में दिखाए गए अंकों की संख्या होगी, जिसका अर्थ है कि भिन्नात्मक सेकंड में अनुगामी शून्य (जैसे
.120
, कभी नहीं.12
) हो सकते हैं।T
एक शाब्दिक पत्र "टी" समय से तारीख परिसीमन है। घंटे 24 घंटे की घड़ी पर हैं।महीने और दिन 1-आधारित (नीचे इस पर अधिक) हैं।
अमान्य और आउट-ऑफ-रेंज इनपुट को नियंत्रित करने की आवश्यकता नहीं है।
प्रोग्रामर के विवेक पर, इनपुट में एक एकल अनुगामी न्यूलाइन हो सकती है।
प्रगति बार गणित
कार्यक्रम दिए गए इनपुट में कम से कम- और दूसरी-सबसे महत्वपूर्ण इकाइयों से संबंधित है। उदाहरण के लिए, यदि इनपुट में दिन-स्तर की सटीकता (जैसे 2016-12-14
) है, तो प्रगति बार इंगित करेगा कि इनपुट महीने में दिनों के किस अनुपात में क्या शेष है।
प्रगति बार में 20 इकाइयाँ (वर्ण) होंगी और प्रतिनिधित्व अनुपात 1 ⁄ 20 के निकटतम वेतन वृद्धि के लिए होगा । उदाहरण के लिए, दिया 2016-12-14T12:28
, प्रगति बार प्रदर्शित करेगा दौर ( 28 / 60 × 20) = 9 20 की इकाइयों "से भर दिया।"
1-आधारित महीने और दिन
हालांकि 1 दिसंबर तक दिन (उदाहरण के लिए) है 01
में 2016-12-01
, गणना के प्रयोजन के लिए यह माह के 0 दिन है, क्योंकि छोटा कर दिया इकाइयों दिन के 0 घंटे के 0 मिनट की 0 मिलीसेकंड मतलब। दूसरे शब्दों में, 2016-12-01
है 0 / 31 दिसंबर के माध्यम से रास्ते से और 2016-12-02
है 1 / 31 , और इतने पर।
इसी तरह, 2016-01
जनवरी के 0 दिन के 0 मिलीसेकंड, इसलिए गणना में यह है 0 / 12 , जो साधन 2016-12
है 11 / 12 ।
हां, इसका मतलब है कि महीने और दिन पूरी तरह से प्रगति पट्टी को कभी नहीं भरेंगे।
भिन्न महीने की अवधि और लीप वर्ष
अलग-अलग महीनों में दिनों की अलग-अलग संख्या होती है और आउटपुट को इसे प्रतिबिंबित करना चाहिए-जिसमें लीप वर्ष भी शामिल है। 6 फरवरी, 2017 के लिए प्रगति पट्टी 6 फरवरी, 2016 (या दोनों वर्षों के 6 जनवरी) के लिए प्रगति पट्टी से अलग होगी।
कई तरह का
- समय यात्री प्रोलेप्टिक ग्रेगोरियन कैलेंडर का उपयोग करते हैं । टीएल; डीआर: 1752 में लापता दिनों की तरह कोई विशेष मामले नहीं । इनपुट में वर्ष 0 ईस्वी की तारीखें शामिल होंगी
- समय यात्री दिन की बचत को अनदेखा करते हैं।
- कार्यक्रम को लीप सेकंड के लिए आवश्यक नहीं है, लेकिन यह हो सकता है।
उत्पादन
कार्यक्रम (या फ़ंक्शन) को एक क्षैतिज रूप से उन्मुख 20-वर्ण प्रगति पट्टी को प्रिंट (या एक स्ट्रिंग के रूप में लौटना) करना चाहिए जो "उस समय के लिए" भर गया है जो समय बीत चुका है और "खुला" है। इसे "बाएं से दाएं" भरना चाहिए।
प्रगति बार के पास बाईं ओर एक लेबल होना चाहिए, जिसे अवधि की शुरुआत के रूप में गिना जा रहा है और इसके दाईं ओर एक और अगली अवधि की शुरुआत दिखा रहा है, उसी प्रारूप में इनपुट के रूप में (लेकिन केवल दो इकाइयों को सटीक दिखा रहा है)। हमारे उदाहरण के लिए 2016-12-14
वैध आउटपुट होगा:
12-01 #########----------- 01-01
यहां प्रत्येक संभावित अवधि के लिए मान्य लेबल प्रारूप दिए गए हैं:
- महीने:
YYYY-MM
- दिन:
MM-DD
- घंटे:
DDThh
- मिनट:
hh:mm
- सेकंड:
mm:ss
- मिलीसेकंड:
ss.sss
कोई अतिरिक्त इकाइयाँ लेबल में शामिल नहीं की जा सकती हैं, और किसी को भी छोड़ा नहीं जा सकता है।
आउटपुट नोट
- प्रगति बार की "भरी हुई" इकाइयों को एक
#
चरित्र द्वारा दर्शाया जाएगा । "ओपन" इकाइयों द्वारा प्रतिनिधित्व किया जाएगा-
। - प्रगति पट्टी और प्रत्येक लेबल के बीच बिल्कुल एक स्थान होना चाहिए।
- अग्रणी या अनुगामी रिक्त स्थान और / या एकल अनुगामी न्यूलाइन की अनुमति है।
जीतना
यह कोड-गोल्फ है । बाइट्स में सबसे छोटा कोड जीतता है। मानक नियम लागू होते हैं। मानक खामियों को मना किया।
उदाहरण
Input Output
----------------------- -------------------------------------
2016-12-12T12:17 12:00 ######-------------- 13:00
2016-12-12 12-01 #######------------- 01-01
0000-01-01T00:00:00.000 00.000 -------------------- 01.000
0000-01-01T00:00 00:00 -------------------- 01:00
1899-12-31T23 31T00 ###################- 01T00
1899-12-31 12-01 ###################- 01-01
1899-12 1899-01 ##################-- 1900-01
1982-05-15T17:15 17:00 #####--------------- 18:00
1982-05-15T17 15T00 ##############------ 16T00
1982-05 1982-01 #######------------- 1983-01
9999-12-31T23:59:59.999 59.000 #################### 00.000
9999-12 9999-01 ##################-- 10000-01
2000-01-06 01-01 ###----------------- 02-01
2000-02-06 02-01 ###----------------- 03-01
2001-02-06 02-01 ####---------------- 03-01
1742-09-10 09-01 ######-------------- 10-01