कुछ लोग सारणीकरण और इंडेंटेशन के लिए रिक्त स्थान का उपयोग करने पर जोर देते हैं।
सारणीकरण के लिए, यह निर्विवाद रूप से गलत है। परिभाषा के अनुसार, सारणी के लिए सारणी का उपयोग किया जाना चाहिए।
यहां तक कि इंडेंटेशन के लिए, सारणी के उद्देश्य बेहतर हैं:
नहीं है स्पष्ट आम सहमति स्टैक एक्सचेंज समुदाय में।
इंडेंटेशन के लिए एकल स्थान का उपयोग करना नेत्रहीन रूप से अप्रिय है; एक से अधिक का उपयोग करना व्यर्थ है।
जैसा कि सभी कॉड
ई गोल्फआइर्स जानते हैं, कार्यक्रम यथासंभव कम होने चाहिए। न केवल यह हार्ड डिस्क स्थान को बचाता है, कम बाइट्स को संसाधित करने के लिए संकलन समय भी कम हो जाता है।टैब चौड़ाई 1 को समायोजित करके , एक ही फाइल प्रत्येक कंप्यूटर पर अलग-अलग दिखती है, इसलिए हर कोई वास्तविक फ़ाइल को संशोधित किए बिना अपनी पसंदीदा इंडेंट चौड़ाई का उपयोग कर सकता है।
सभी अच्छे टेक्स्ट एडिटर डिफ़ॉल्ट रूप से (और परिभाषा) टैबलेटर का उपयोग करते हैं।
मैं ऐसा कहता हूं और मैं हमेशा सही हूं!
अफसोस की बात है, हर कोई कारण नहीं सुनता है। किसी ने आपको एक फ़ाइल भेजी है जो इसे गलत टीएम कर रही है और आपको इसे ठीक करना होगा। आप इसे केवल मैन्युअल रूप से कर सकते हैं, लेकिन अन्य भी होंगे।
यह काफी बुरा है कि स्पेसर आपका कीमती समय बर्बाद कर रहे हैं, इसलिए आप समस्या का ध्यान रखने के लिए सबसे कम संभव प्रोग्राम लिखने का फैसला करते हैं।
कार्य
एक प्रोग्राम या एक फ़ंक्शन लिखें जो निम्न कार्य करता है:
एकल स्ट्रिंग को STDIN से या कमांड-लाइन या फ़ंक्शन तर्क के रूप में पढ़ें।
उन सभी स्थानों की पहचान करें जहाँ सारणीकरण या इंडेंटेशन के लिए रिक्त स्थान का उपयोग किया गया है।
रिक्त स्थान की एक रन इंडेंटेशन है यदि यह एक पंक्ति की शुरुआत में होती है।
का एक रन दो या अधिक रिक्त स्थान है सारणीयन अगर यह खरोज नहीं है।
एक एकल अंतरिक्ष कि खरोज नहीं है या सारणीयन के लिए इस्तेमाल नहीं हो सकता है किया गया है। जब आप विभिन्न उद्देश्यों के लिए एक ही चरित्र का उपयोग करते हैं, तो यह बताने का कोई आसान तरीका नहीं है। इसलिए, हम कहेंगे कि अंतरिक्ष का उपयोग भ्रम के लिए किया गया है ।
सबसे लंबे समय तक संभव टैब की चौड़ाई 1 निर्धारित करें जिसके लिए सारणीयन या इंडेंटेशन के लिए उपयोग किए जाने वाले सभी रिक्त स्थान को फ़ाइल के स्वरूप में बदलाव किए बिना, सारणीकारों के साथ प्रतिस्थापित किया जा सकता है।
यदि इनपुट में न तो सारणीकरण है, न ही इंडेंटेशन है, तो टैब की चौड़ाई निर्धारित करना असंभव है। इस स्थिति में, अगला चरण छोड़ें।
पहले से निर्धारित टैब की चौड़ाई का उपयोग करते हुए, सारणी के साथ सारणीकरण या इंडेंटेशन के लिए उपयोग किए जाने वाले सभी रिक्त स्थान को बदलें।
इसके अलावा, जब भी संभव हो तो फ़ाइल की उपस्थिति में बदलाव किए बिना, सभी स्थानों को टैबुलेटर के साथ भ्रम के लिए उपयोग किया जाता है। (यदि संदेह है, तो रिक्त स्थान से छुटकारा पाएं।)
अपने फ़ंक्शन से संशोधित स्ट्रिंग लौटाएं या इसे STDOUT में प्रिंट करें।
उदाहरण
के सभी रिक्त स्थान
a bc def ghij
सारणीकरण है।
रिक्त स्थानों की प्रत्येक रन 5 की चौड़ाई के लिए गैर-अंतरिक्ष वर्णों की पूर्ववर्ती स्ट्रिंग को पैड करती है, इसलिए सही टैब की चौड़ाई 5 है और सही आउटपुट 2 है
a--->bc-->def->ghij
के पहले दो स्थान
ab cde f ghi jk lm
सारणीकरण, अन्य भ्रम हैं।
सही टैब की चौड़ाई 4 है, इसलिए सही आउटपुट 2 है
ab->cde>f ghi>jk lm
अंतिम स्थान अछूता रहता है, क्योंकि यह दो स्थानों के रूप में प्रस्तुत किया जाएगा यदि एक सारणी द्वारा प्रतिस्थापित किया जाए:
ab->cde>f ghi>jk->lm
के सभी लेकिन एक रिक्त स्थान
int main( ) { puts("TABS!"); }
दूसरी ओर भ्रम है।
इंडेंटेशन स्तर 0, 4 और 8 रिक्त स्थान हैं, इसलिए सही टैब की चौड़ाई 4 है और सही आउटपुट 2 है
int --->main( ) --->{ --->--->puts("TABS!"); --->}
( )
यदि एक सारणी द्वारा प्रतिस्थापित किया जाता है, तो अंतरिक्ष को तीन स्थानों के रूप में प्रस्तुत किया जाएगा, इसलिए यह अछूता रहता है।के पहले दो स्थान
x yz w
दूसरों के भ्रम की स्थिति है।
उचित टैब चौड़ाई 2 है और सही आउटपुट 2 है
->x>yz w
अंतिम स्थान को दो स्थानों के रूप में प्रस्तुत किया जाएगा यदि एक सारणी द्वारा प्रतिस्थापित किया जाता है, तो यह अछूता रहता है।
के पहले दो स्थान
xy zw
इंडेंटेशन हैं, अन्य तीन सारणीकरण हैं।
केवल 1 टैब की चौड़ाई सभी स्थानों को खत्म करने की अनुमति देती है, इसलिए सही आउटपुट 2 है
>>xy>>>zw
के सभी रिक्त स्थान
a b c d
भ्रम हैं।
सबसे लंबी संभव टैब चौड़ाई नहीं है, इसलिए सही आउटपुट 2 है
a b c d
अतिरिक्त नियम
इनपुट में पूरी तरह से मुद्रण योग्य ASCII वर्ण और लाइनफ़ीड शामिल होंगे।
आप मान सकते हैं कि पाठ की अधिकतम १०० पंक्तियाँ और प्रति पंक्ति में अधिकतम १०० वर्ण हैं।
यदि आप आउटपुट के लिए STDOUT चुनते हैं, तो आप एक एकल अनुगामी लाइनफ़ीड मुद्रित कर सकते हैं।
मानक कोड-गोल्फ नियम लागू होते हैं।
1 टैब की चौड़ाई को दो लगातार टैब स्टॉप के बीच वर्णों के बीच की दूरी के रूप में परिभाषित किया गया है , एक मोनोसैप्ड फ़ॉन्ट का उपयोग करके।
2 ASCII कला तीर सही तरीके से प्रस्तुत करने के लिए टैबैक्टर्स स्टैक एक्सचेंज को मना कर देता है, जिसके लिए मैंने एक बग रिपोर्ट प्रस्तुत की है। वास्तविक आउटपुट में वास्तविक टेबुलेटर होते हैं।
programs should be as short as possible
मुझे विश्वास है कि मुझे आर्थर व्हिटनी का लंबा-खोया भाई मिल गया है !!