Microsoft FAT फ़ाइल सिस्टम में डिस्क पर "फ़ोल्डर" कौन से हैं, यह दर्शाने के लिए एक निर्देशिका तालिका है। समय के लिए, इन प्रविष्टियों ने बहुत सी जानकारी बिट्स में डाली। जिज्ञासु के लिए विकी पर तकनीकी विशिष्टताओं का एक गुच्छा है , लेकिन यहां चुनौती एक प्रविष्टि के "सरल" डिकोडिंग पर ध्यान केंद्रित करने वाली है।
प्रत्येक प्रविष्टि में एक 32-बाइट बाइनरी शब्द है, जो कई खंडों में विभाजित है। इस चुनौती में निरंतरता के लिए, हम MS-DOS 5.0 संस्करण का उपयोग करेंगे, बाइट्स को बड़े एंडियन के रूप में ऑर्डर किया गया है , और हम बाइट 0x00
को सबसे बाईं ओर और बाइट 0x1F
को दाईं ओर के रूप में कॉल कर रहे हैं ।
नीचे संबंधित अनुभागों का एक संक्षिप्त योजनाबद्ध है, और प्रत्येक अनुभाग के लिए आउटपुट ( बोल्ड में ) क्या होना चाहिए ।
- पहले 11 बाइट्स ASCII प्रारूप में फ़ाइल नाम हैं (यह वह जगह है जहाँ प्रसिद्ध 8.3 फ़ाइल नाम से आता है - फ़ाइल नाम के लिए 8 बाइट्स, एक्सटेंशन के लिए 3 बाइट्स)। ये सीधे ASCII एन्कोडिंग हैं, और बीच की अवधि (।) के साथ ASCII के रूप में आउटपुट होना चाहिए ।
- नोट: दोनों 8 और 3 भागों को पूर्ण-लंबाई प्रविष्टि बनाने के लिए रिक्त स्थान के साथ गद्देदार किया जाता है। आउटपुट को स्थानों को अनदेखा करना चाहिए (अर्थात, उन्हें आउटपुट न करें)।
- फ़ाइल एक्सटेंशन रिक्त हो सकता है (यानी, सभी स्थान), जिस स्थिति में आउटपुट को डॉट का उत्पादन नहीं करना चाहिए ।
- चूंकि ASCII केवल निचले 7 बिट्स का उपयोग करता है, बाइट्स में सभी एक अग्रणी होंगे
0
।
- अगला बाइट (0x0b) निम्नलिखित का एक बिटमैप है:
- 0x01 केवल पढ़ने के लिए - उत्पादन आरओ
- 0x02 हिडन - आउटपुट एच
- 0x04 सिस्टम - आउटपुट एस
- 0x08 वॉल्यूम लेबल - उत्पादन वीएल । फ़ाइल का आकार (नीचे) 0 के रूप में आउटपुट होना चाहिए , इसकी वास्तविक प्रविष्टि की परवाह किए बिना।
- 0x10 उपनिर्देशिका - आउटपुट एसडी । फ़ाइल का आकार (नीचे) 0 के रूप में आउटपुट होना चाहिए , इसकी वास्तविक प्रविष्टि की परवाह किए बिना।
- 0x20 आर्काइव - आउटपुट ए
- 0x40 डिवाइस - इस चुनौती के लिए नजरअंदाज कर दिया।
- 0x80 आरक्षित - इस चुनौती के लिए नजरअंदाज कर दिया।
- चूंकि यह एक बिटमास्क है, इसलिए कई झंडे संभव हैं - सभी लागू आउटपुटों को किसी भी क्रम में एक साथ समाहित किया जाना चाहिए। उदाहरण के लिए, (या कोई अन्य संयोजन)
0xff
हो सकता हैROHSVLSDA
।
- अगले दो बाइट्स (0x0c और 0x0d) MS-DOS 5.0 के तहत उपयोग नहीं किए जाते हैं।
- अगले दो बाइट्स (0x0e और 0x0f) निर्माण समय इस प्रकार हैं:
- बिट्स 15 से 11 24-घंटे के प्रारूप में घंटे हैं - आउटपुट 00 से 23
- बिट्स 10 से 5 मिनट - आउटपुट 00 से 59 हैं
- बिट्स 4 से 0 सेकंड / 2 - आउटपुट 00 से 58 हैं (ध्यान दें कि सेकंड केवल दो सेकंड के रिज़ॉल्यूशन में हैं)
- स्पष्टीकरण के लिए:
hhhhhmmmmmmsssss
जब बड़े-एंडियन लिखे।
- अगले दो बाइट्स (0x10 और 0x11) निर्माण की तारीख इस प्रकार हैं:
- बिट्स 15 से 9 वर्ष - आउटपुट 1980 के
0
लिए 2107 तक है127
- बिट्स 8 से 5 महीने हैं - आउटपुट 1 से 12 (शून्य के साथ या बिना)
- बिट्स 4 से 0 दिन हैं - आउटपुट 0 से 31 (शून्य के साथ या बिना)
- स्पष्टीकरण के लिए:
yyyyyyymmmmddddd
जब बड़े-एंडियन लिखे।
- बिट्स 15 से 9 वर्ष - आउटपुट 1980 के
- अगले दो बाइट्स (0x12 और 0x13) अंतिम एक्सेस तिथि हैं। MS-DOS 5.0 में उपयोग किए जाने के दौरान, हम इस चुनौती के लिए इस भाग को अनदेखा कर रहे हैं।
- अगले दो बाइट्स (0x14 और 0x15) MS-DOS 5.0 द्वारा उपयोग नहीं किए जाते हैं।
- अगले दो बाइट्स (0x16 और 0x17) अंतिम संशोधित समय हैं, जो निर्माण समय के समान प्रारूप के बाद हैं।
- अगले दो बाइट्स (0x18 और 0x19) अंतिम संशोधित तिथि है, जो कि निर्माण तिथि के समान प्रारूप के बाद है।
- अगले दो बाइट्स (0x1a और 0x1b) डिस्क पर फ़ाइल का क्लस्टर स्थान है। हम इस चुनौती के लिए इस हिस्से की अनदेखी कर रहे हैं।
- अंतिम चार बाइट्स (0x1c, 0x1d, 0x1e, और 0x1f) फ़ाइल आकार - एक अहस्ताक्षरित पूर्णांक के रूप में आउटपुट हैं , जब तक कि वीएल या एसडी झंडे सेट नहीं किए जाते हैं (ऊपर), जिस स्थिति में आउटपुट
0
।
दृश्य प्रतिनिधित्व
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\______________________________FILENAME________________________________________________/\_ATTR_/\___NOTUSED____/\_CREATIONTIME_/\_CREATIONDATE_/\__LASTACCESS__/\___NOTUSED____/\_MODIFIEDTIME_/\_MODIFIEDDATE_/\___NOTUSED____/\___________FILESIZE___________/
इनपुट
- एक 32-बाइट शब्द (यानी, 256 बिट्स), जो भी प्रारूप में सुविधाजनक है।
- इस के एक स्ट्रिंग के रूप में हो सकता है
1
और0
कई अहस्ताक्षरित के रूप में,int
एस, बूलियन मान की एक सरणी, आदि - कृपया अपने उत्तर में निर्दिष्ट करें कि आप इनपुट के लिए किस प्रारूप का उपयोग कर रहे हैं।
- जब तक कि इनपुट लेने के लिए आपकी भाषा का एकमात्र तरीका न हो, तब तक आप एकाधिक इनपुट नहीं ले सकते (यानी, प्रासंगिक बाइट आकारों में पूर्व-टूटा हुआ) । इनपुट को पार्स करना चुनौती का हिस्सा है।
- इस के एक स्ट्रिंग के रूप में हो सकता है
- आप इनपुट को वैध मान सकते हैं (उदाहरण के लिए, आपको यह सत्यापित करने की आवश्यकता नहीं है कि तारीख मान्य है)।
- बाइट जो अप्रयुक्त हैं वे सभी
0
, सभी1
, आदि हो सकते हैं , बस जब तक वे मौजूद हैं। नीचे दिए गए उदाहरणों में, मैंने सभी0
का उपयोग अप्रयुक्त बाइट्स के लिए किया।
उत्पादन
या तो स्क्रीन पर मुद्रित किया गया या लौटाया गया, निम्नलिखित:
- ASCII स्ट्रिंग के रूप में फ़ाइल नाम
- फ़ाइल ASCII स्ट्रिंग के रूप में विशेषता है
- उचित विभाजक (कॉलोन, स्लैश, घटकों को अलग करने के लिए कुछ) के साथ निर्माण का समय और निर्माण तिथि
- संशोधित समय और संशोधित तिथि, फिर से उपयुक्त विभाजक के साथ
- फ़ाइल का आकार
आउटपुट स्पेस-सेपरेटेड या न्यूलाइन-सेपरेटेड सिंगल स्ट्रिंग, एरे में अलग एलिमेंट आदि हो सकते हैं। कृपया अपने उत्तर में निर्दिष्ट करें कि आपका आउटपुट कैसे स्वरूपित है।
नियम
- मानक I / O प्रारूप स्वीकार्य हैं।
- या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
- मानक खामियों को मना किया जाता है।
- यह कोड-गोल्फ है , इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड जीतता है।
- बिल्ट-इन जो वास्तव में इस फ़ंक्शन का प्रदर्शन करते हैं, निषिद्ध हैं।
उदाहरण
0111000001110010011011110110011101110010011000010110110101101101011010010110111001100111000001100000000000000000101000100100010001001000110101000000000000000000000000000000000010100010010001000100100011010100000000000000000000000000000000001101000000000000
programm.ing HS 20:18:08 2016/06/20 20:18:08 2016/06/20 53248
0010000000100000001000000010000001110000011100000110001101100111001000000010000000100000000101000000000000000000010111010110110000111101100111110000000000000000000000000000000010100010010001000100100011010100000000000000000011110000000100111111001011100001
ppcg SDS 11:43:24 2010/12/31 20:18:08 2016/06/20 0
SD S
एक वैध ध्वज सेट होगा?