निम्नलिखित कार्यक्षमता के साथ एक कार्यक्रम या फ़ंक्शन लिखें:
- प्रोग्राम / फ़ंक्शन पहले
Hello, world!
मानक आउटपुट स्ट्रीम को स्ट्रिंग लिखने का प्रयास करता है । (आउटपुट का कोई अन्य रूप इस चुनौती के लिए स्वीकार्य नहीं है, क्योंकि कार्यक्रम के तुच्छ व्यवहार के बजाय I / O पर ध्यान बहुत अधिक है।) इस पर निर्भर करता है कि क्या यह सफल हुआ:- यदि यह आउटपुट करने में सफल रहा
Hello, world!
, तो प्रोग्राम / फ़ंक्शन बिना किसी और व्यवहार के बाहर निकल जाता है। - यदि यह एक त्रुटि के कारण सही आउटपुट का उत्पादन करने में विफल रहा, तो प्रोग्राम / फ़ंक्शन
Error writing "Hello, world!"
मानक त्रुटि स्ट्रीम को स्ट्रिंग लिखने का प्रयास करता है । (इस चुनौती के प्रयोजनों के लिए, आपको त्रुटि से निपटने के लिए त्रुटि से निपटने की आवश्यकता नहीं है।)
- यदि यह आउटपुट करने में सफल रहा
स्पष्टीकरण
आपका प्रोग्राम / फ़ंक्शन बिना किसी इनपुट के चलाया जाएगा (जब तक कि यह उस भाषा में नहीं लिखा जाता है, जिसे काम करने के लिए बिल्कुल इनपुट की आवश्यकता होती है, उस स्थिति में इसे सबसे सरल संभव इनपुट के साथ चलाया जाएगा)।
आउटपुट का उत्पादन करते समय, यदि आप चाहें तो एक एकल अनुगामी न्यूलाइन का उत्पादन भी कर सकते हैं, लेकिन ऐसा करना अनिवार्य नहीं है।
"मानक आउटपुट में त्रुटि लेखन" की परिभाषा जो आपके कार्यक्रम को लागू करती है उसे कम से कम निम्नलिखित मामलों को त्रुटियों के रूप में मानना चाहिए:
- स्टैण्डर्ड आउटपुट
stdout
नॉनटेन्स्टेंट (यानी एक बंद फाइलहैंडल है, कोई फाइल डिस्क्रिप्टर 1 मौजूद नहीं है, या फिर भी उन मामलों का भाषा और ओएस में अनुवाद होता है जिनका आप उपयोग कर रहे हैं); - मानक आउटपुट एक डिस्क पर एक फ़ाइल का संदर्भ देता है जिसमें कोई खाली स्थान नहीं बचा है;
- मानक आउटपुट दूसरे प्रोग्राम से जुड़ रहा है, जिसने पहले ही कनेक्शन का अपना अंत बंद कर दिया है।
और कम से कम निम्नलिखित मामलों को सफलता के रूप में मानें (अर्थात त्रुटि नहीं):
- मानक आउटपुट एक टर्मिनल से जुड़ता है, और
Hello, world!
ऑनस्क्रीन प्रदर्शित होता है। - मानक आउटपुट एक फ़ाइल से जुड़ता है, और फ़ाइल
Hello, world!
में लिखा जाता है।
आप आउटपुट त्रुटि के रूप में क्या गिनाते हैं, इसका विवरण चुन सकते हैं, जब तक कि यह उपरोक्त नियमों के अनुरूप हो।
- स्टैण्डर्ड आउटपुट
ऊपर सूचीबद्ध किसी भी त्रुटि स्थिति का सामना करने पर आपका कार्यक्रम / फ़ंक्शन क्रैश नहीं होना चाहिए। यह आपके ऊपर है कि आप किस एग्जिट कोड का उपयोग करते हैं।
आपके प्रोग्राम / फ़ंक्शन को मानक त्रुटि स्ट्रीम पर सामना की गई त्रुटि की प्रकृति का वर्णन नहीं करना चाहिए; यह सिर्फ ऊपर निर्दिष्ट स्ट्रिंग मुद्रित करना चाहिए। मानक त्रुटि (जैसे संकलक चेतावनी) पर अत्यधिक उत्पादन केवल कानूनी है यदि यह बिना शर्त के उत्पादन किया जाता है, भले ही कोई त्रुटि सामने आई हो या नहीं।
आपके कार्यक्रम को केवल एक ऑपरेटिंग सिस्टम पर काम करने की आवश्यकता है (हालांकि यह एक होना चाहिए, जिस पर ऊपर सूचीबद्ध त्रुटियां हैं, मैंने उन्हें सबसे मल्टीटास्किंग उपभोक्ता ऑपरेटिंग सिस्टम पर काम करने के लिए सामान्य रूप से बनाए रखने की कोशिश की है, लेकिन वाइडर ऑपरेटिंग सिस्टम अच्छी तरह से हो सकते हैं इस चुनौती से बाहर रखा गया)। यदि आपका प्रोग्राम नॉनपोर्टेबल है, तो उन मान्यताओं को सूचीबद्ध करें, जिन्हें आपके सबमिशन के शीर्षक में चलाने की आवश्यकता है।
यह कार्य हर भाषा में संभव नहीं हो सकता है (प्रत्येक भाषा एक कार्यक्रम को कस्टम तरीके से आउटपुट त्रुटियों को संभालने की अनुमति नहीं देती है)। आपको एक भाषा चुननी होगी जहाँ यह संभव है।
सुनिश्चित करें कि आपका प्रोग्राम / फ़ंक्शन काम करता है! पुस्तकालय कार्यों के प्रलेखन पर भरोसा मत करो कि वे जो कहते हैं वह करते हैं। साधारण आउटपुट फ़ंक्शंस की एरर हैंडलिंग अक्सर व्यवहार में टूट जाती है, भले ही फ़ंक्शंस थ्योरी में त्रुटियों को संभालने का दावा करते हों।
परीक्षण के मामलों
bash
लिनक्स पर उपयोग करने के बाद ऊपर दी गई प्रत्येक त्रुटि की स्थिति का अनुकरण करने का एक तरीका है (आपको लिनक्स का उपयोग करने की आवश्यकता नहीं है, लेकिन यह संभवतः इस पर परीक्षण करने के लिए सबसे आसान प्रणाली है):
your_program_here >&- # nonexistent stdout
your_program_here > /dev/full # out of disk space
mkfifo test # note: change "test" to a filename that isn't in use
true < test &
your_program_here > test # connecting to a program that doesn't want input
rm test # clean up the FIFO we used earlier
पहले दो टेस्टकेस नियतात्मक हैं। अंतिम नहीं है (यह एक दौड़ की स्थिति पर निर्भर करता है); परीक्षण उद्देश्यों के लिए, मैं आपके कार्यक्रम की शुरुआत और मानक आउटपुट के वास्तविक आउटपुट के बीच देरी को जोड़ने की सलाह देता हूं, ताकि यह सुनिश्चित किया जा सके कि रेस की स्थिति उस तरीके से हल हो गई है जो त्रुटि को उजागर करती है।
विजय की स्थिति
यह है एक कोड गोल्फचुनौती, इसलिए कम बेहतर है। हमेशा (लगभग), हम बाइट्स में प्रोग्राम की लंबाई माप रहे हैं।
sleep 1 < test; (sleep 2; your_program_here) > test
?