अपने बॉस के लिए अंग्रेजी संकलन


16

आपके बॉस ने हाल ही में अंग्रेजी नामक इस दिलचस्प प्रोग्रामिंग भाषा को सीखा है । उसके पास यह "क्रांतिकारी" विचार है, वह आपके साथ कोड उत्पादन दरों को दोगुना करना चाहता है! चूंकि वह टेक सेवी नहीं है, इसलिए वह चाहता है कि आप इसके लिए एक कंपाइलर लिखें ताकि वह भी कोड कर सके!

अब, आप एक दुष्ट आलसी प्रोग्रामर हैं और स्पष्ट रूप से इस हास्यास्पद जटिल भाषा को संकलित करने के लिए एक कार्यक्रम नहीं लिखेंगे। इसके बजाय, आप यह सुनिश्चित करने जा रहे हैं कि आपके बॉस के कोड में हमेशा कोई त्रुटि है, जिससे वह कभी भी वास्तविक संकलन में नहीं जाता है और कोडिंग के बजाय व्याकरण की त्रुटियों को ठीक करता है।

चुनौती एक प्रोग्राम लिखना है जिसे टर्मिनल से चलाया जा सकता है, और एक तर्क के रूप में एक फ़ाइल पथ स्वीकार करता है। कार्यक्रम के लिए है:

  1. एक टाइपो शुरू करके फ़ाइल इनपुट को संशोधित करें।
  2. आपके द्वारा शुरू किए गए टाइपो का सामना करने के कारण संकलन विफल करने का नाटक करें।
  3. एक ही फ़ाइल की प्रतियों पर प्रोग्राम चलाने से एक पंक्ति में दो बार एक ही टाइपो का परिचय नहीं होना चाहिए।

चुनौती का वर्णन करने के लिए, इस फाइल पर अपना प्रोग्राम चलाएं:

Take an array as input.
Sort the array.
Output the array.

की तर्ज पर कुछ आउटपुट करना चाहिए

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

और जिस फाइल को आपने प्रोग्राम को संकलित करने के लिए कहा था, उसे अब देखना चाहिए:

Take an arqay as input.
Sort the array.
Output the array.

कार्यक्रम की ऐनक पर कुछ और विवरण इस प्रकार हैं:

आपके कार्यक्रम को यह मानने की अनुमति है कि कार्यक्रम में किसी भी चरित्र को अलग यादृच्छिक चरित्र के लिए स्वैप करने से एक व्याकरण त्रुटि हो जाएगी। आपके प्रोग्राम को आपके बॉस कोड में त्रुटियाँ पैदा करने के लिए गैर वर्णमाला वर्णों का उपयोग नहीं करना चाहिए। आपका बॉस कभी भी नंबर या प्रतीक का उपयोग नहीं करेगा, और उसे पता चलेगा कि कुछ गड़बड़ है। आपके कार्यक्रम को केवल आपके बॉस के कार्यक्रम में शब्दों के लिए त्रुटियों का परिचय देना चाहिए। वाक्यों, या विराम चिह्नों में रिक्त स्थान न बदलें। आपके प्रोग्राम को आपके बॉस द्वारा संकलित किए गए प्रोग्राम के मामले में परिवर्तन नहीं करना चाहिए, जिसका अर्थ है कि त्रुटियां arQayअमान्य हैं। यह होने के takeबजाय Take, या के Arrayबजाय त्रुटियों को रोकता है array। आपके प्रोग्राम को पहले यह बताते हुए त्रुटि का उत्पादन करना चाहिए कि त्रुटि किस रेखा पर है:

Error on line <insert line number here>:

इसके बाद 'प्रतीकों के अंदर त्रुटि के साथ लाइन का प्रिंट आउट लेना चाहिए । अगली पंक्ति में इसे त्रुटि के साथ शब्द के^ नीचे एक प्रतीक रखना चाहिए , और अंत में इसमें त्रुटि का वर्णन करने वाला कुछ पाठ होना चाहिए (यह हिस्सा आपके ऊपर है, आप कह सकते हैं कि जब तक आप चाहते हैं कि यह एक त्रुटि है)।

आप मान सकते हैं कि इनपुट फ़ाइल मौजूद है और यह खाली नहीं है। आप यह भी मान सकते हैं कि इनपुट फ़ाइल में एक जोड़ने से पहले कोई व्याकरण संबंधी त्रुटियाँ नहीं हैं।

बोनस:

-60 बाइट्स यदि आपके कोड की त्रुटियों का परिचय पूरी तरह से यादृच्छिक नहीं है, लेकिन इस प्रश्न में टाइपो आधारित है ।

कम से कम 5 विभिन्न त्रुटि संदेशों के लिए -60 बाइट्स, यादृच्छिक रूप से बारी-बारी से।

-60 बाइट्स यदि आपके प्रोग्राम में 100 में से 1 मौका है या आपके बॉस को कुछ डिमोटिवेशनल मैसेज आउटपुट करने के लिए कम है।

EDIT: संदेशों की बाइट गिनती आपके स्कोर की ओर नहीं होती है। (इस अच्छे विचार के लिए मार्टिन ब्यूटनर का धन्यवाद)

यह कोड-गोल्फ, सबसे छोटी बाइट गिनती जीत है। कृपया त्रुटि संदेश सामग्री को गोल्फ न करें, यदि आप त्रुटि संदेशों को नहीं समझ सकते हैं, तो आपका बॉस खुश नहीं होगा, और आपसे उनके लिए उन्हें ठीक करने के लिए कहेगा।


क्या मुझे उन पंक्तियों से निपटना होगा जिनमें अक्षर नहीं हैं?
Οurous

आप केवल वर्णमाला वर्ण में एक टाइपो बना सकते हैं, और आप मान सकते हैं कि इनपुट फ़ाइल एक वैध गैर-रिक्त फ़ाइल है जो मौजूद है।
रॉडोलफिटो

7
मैं हमारे लिए त्रुटि संदेशों को छोड़ने का प्रशंसक नहीं हूं। यहां तक ​​कि अगर हम "त्रुटि संदेश को गोल्फ नहीं करते हैं" तो वे अभी भी दो बाइट्स का अंतर बना सकते हैं, शायद दो दर्जन से अधिक अगर हम दूसरे बोनस के लिए जा रहे हैं। वह काफी हो सकता है। मुझे लगता है कि एक निष्पक्ष गोल्फ प्रतियोगिता के लिए आपको 5 त्रुटि संदेश और एक डिमोटिवेशनल संदेश निर्दिष्ट करना चाहिए, या हमें बाइट की गिनती से उनकी स्ट्रिंग लंबाई घटाना चाहिए।
मार्टिन एंडर

टिप के लिए धन्यवाद, मैंने पूर्वनिर्धारित संदेशों के बारे में सोचा था, लेकिन मैं इसके साथ थोड़ी और स्वतंत्रता देना चाहता था। संदेश बाइट को स्कोर से अलग करना एक बेहतरीन विचार है।
रॉडोल्फिटो

जवाबों:


3

TI-BASIC, 77 - 34 (त्रुटि पाठ) = 43

यदि वह अपने TI-83/84 कैलकुलेटर पर करना चाहता है;)

फ़ंक्शंस के मानक के रूप में, फ़ाइल स्ट्रिंग होनी चाहिए Ansताकि यह आउटपुट पर वापस आ सके और प्रदर्शित हो सके।

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

ध्यान दें कि कई टोकन एक बाइट हैं।


मैं यह कोड कहां चला सकता हूं?
रॉडोफाइटो 22

एक के लिए TI-83/84 कैलकुलेटर या एक एमुलेटर।
टिमटेक

inString, Ans, sub, Else, Then, End, Disp , Str1... नहीं उन कैलकुलेटर के लिए सभी 1 बाइट हैं?
इस्माइल मिगुएल

4
क्या????????????????? यह कहते हुए कि 8 बिट्स 1 बाइट नहीं है !!!!!!!!! अगर मैं बाइनरी फॉर्म का उपयोग करके असेंबली में एक कोड प्रस्तुत करता हूं, तो क्या वे बाइट्स को 5 + बाइट्स के 1 मैक्रो के रूप में भी गिनेंगे? यह स्पष्ट रूप से बेवकूफ है! (मजबूत शब्दों के लिए खेद है, लेकिन यह वास्तव में है!) यह आपके कोड का प्रतिनिधित्व नहीं करता है। मेरा मतलब Ansयह नहीं है कि बाइट द्वारा प्रतिनिधित्व किया गया हैAns । एक वह है A*n*sजो किसी भी परिणाम का उत्पादन करता है जो कैलकुलेटर चाहता है, दूसरा अंतिम अंकगणितीय अभिव्यक्ति का मूल्य देता है। इसे ध्यान में रखते हुए, मुझे लगता है कि वास्तविक गणना को स्वीकार नहीं करना इस कोड का गलत प्रतिनिधित्व करता है।
इस्माइल मिगुएल

5
यह फ़ाइल को बेतरतीब ढंग से संशोधित करने के लिए प्रतीत नहीं होता है, ऐसा लगता है जैसे कि यह हमेशा लाइन 1 में एक परिवर्तन प्रदर्शित करता है, और यदि कोई A या नहीं तो B के लिए पहला अक्षर बदलता है।
कृमिनाशक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.