इस चुनौती में, आप एक बॉट लिखेंगे जो कैदी की दुविधा है। यहां पकड़ है: आपके पास पिछले खेलों के इतिहास तक पहुंच नहीं होगी। इसके बजाय, आपके पास प्रतिद्वंद्वी तक पहुंच होगी। इस संस्करण में, दोनों खिलाड़ी +2 अंक प्राप्त करते हैं यदि वे दोनों सहयोग करते हैं, तो +1 अंक यदि वे दोनों दोष करते हैं, और यदि कोई सहयोग करता है लेकिन एक दोष करता है, तो रक्षक को +3 मिलता है जबकि दूसरे को कोई अंक नहीं मिलता है। प्रत्येक सबमिशन को 10 बार, सहित हर अन्य सबमिशन के खिलाफ खेला जाएगा। विजेता, कुल अंकों के साथ सबमिशन है।
नियंत्रक : आपको फॉर्म में एक जावास्क्रिप्ट फ़ंक्शन लिखना चाहिए
function submissionName(them) {
/* Your code here */
}
नियंत्रक name
परिणाम प्रदर्शित करने के लिए फ़ंक्शन की संपत्ति का उपयोग करता है , इसलिए यदि यह इस प्रारूप में नहीं है (और इसके बजाय f = x => ...
या f = function() { ... }
) तो आपके स्कोर को देखना मुश्किल होगा और आप अपने स्वयं के फ़ंक्शन तक नहीं पहुंच पाएंगे।
फ़ंक्शन एक पैरामीटर को स्वीकार करेगा: them
जो प्रतिद्वंद्वी का फ़ंक्शन है। फिर यह उस फ़ंक्शन को यह देखने के लिए कॉल कर सकता है कि प्रतिद्वंद्वी की प्रतिक्रिया को इनपुट के रूप में कुछ फ़ंक्शन दिए जाएंगे। उस डेटा के आधार पर, आपको क्रमशः सहयोग या दोष के लिए 'C' या 'D' वापस करना होगा।
उदाहरण (प्रतिस्पर्धा होगी):
function cooperate(them) {
return 'C';
}
function defect(them) {
return 'D';
}
function nice(them) {
// Do whatever they would do when faced with a cooperator
return them(wrap(_ => 'C'));
}
नियम :
- आप प्रतिद्वंद्वी का कोड स्वयं नहीं देख पाएंगे। सभी फ़ंक्शंस लिपटे हुए हैं ताकि जब वे कहते हैं तो वे समान दिखें
toString()
। एक प्रतिद्वंद्वी की जांच करने का एकमात्र तरीका (जो स्वयं हो सकता है) उनका परीक्षण करना है। - आपके कार्य को नियतात्मक नहीं होना चाहिए। आप केवल अपने स्वयं के फ़ंक्शन पर गुण सेट करके राज्य को बचा सकते हैं, जैसे कि
submissionName.state = {};
। हालांकि, मैचों के बीच (यहां तक कि एक ही खिलाड़ियों के मैचों के बीच), कॉलिंगtoString()
औरeval
। इसलिए, पिछले मैचों की कोई स्मृति नहीं है। - प्रत्येक मैच में सबसे पहले किस फ़ंक्शन को कहा जाता है, इसका क्रम यादृच्छिक होता है।
- यदि आपका कोड एक त्रुटि फेंकता है, तो यह तब माना जाएगा जब आपने अपने प्रतिद्वंद्वी का बचाव किया था। यदि आप पहली बार दौड़ रहे हैं, तो प्रतिद्वंद्वी का कोड भी नहीं कहा जाएगा। ऐसा तब भी होता है जब आप कॉल करते समय अपने प्रतिद्वंद्वी के कोड में त्रुटि करते हैं
them
। स्टैक ओवरफ्लो त्रुटियों से सावधान रहें, खासकर यदि आपका कोड कॉल करता हैthem(wrap(submissionName))
, क्योंकि वे भी ऐसा कर सकते हैं। - आप चर
self
, या किसी भी अन्य चर का उपयोग नहीं कर सकते हैं जो तब होता है जबeval
कार्य को अपवाद कहा जाता हैwrap
। यह फ़ंक्शन प्रतिद्वंद्वी को कॉल करने के तरीके से अप्रत्यक्ष रूप से कॉल करने की अनुमति देता है कि नियंत्रक किसी फ़ंक्शन को कैसे कॉल करता है। आप में नहीं लिखा जा सकता हैMath
,window
आदि (आप इस तरह के रूप में कार्य करता, उपयोग कर सकते हैंMath.random()
, हालांकि)। - आप स्टैक ट्रेस
Error
या किसी अन्य विधि से बनाकर एक्सेस नहीं कर सकते ।
बहुत अधिक समय लेने पर ध्यान दें: कृपया एक में फंसने से बचें while
हमेशा के लिए पाश। दोनों प्रतियोगियों का संयुक्त समय किसी भी दौर में 1 सेकंड से अधिक नहीं होना चाहिए। इसे लागू करने के लिए, 1000 एमएस और 2000 एमएस के बीच एक यादृच्छिक समय-सीमा चुना जाता है (यह जानबूझकर किसी ज्ञात राशि का इंतजार करके गेमिंग से बचने के लिए है), और अगर कार्यकर्ता को निष्पादित करने में अधिक समय लगता है, तो एक त्रुटि होगी। यदि ऐसा होता है, तो त्रुटि का कारण निम्नानुसार निर्धारित किया जाएगा: 1000 एमएस के बाद निष्पादन को एक यादृच्छिक क्षण में रोक दिया जाएगा, और उस पल में कॉल स्टैक का निरीक्षण किया जाएगा। सबसे हाल ही में कहा जाने वाला प्रतियोगी जो वर्तमान में एक लूप (या लूप जैसी पुनरावृत्ति है, इस अर्थ में कि यह स्टैक ओवरफ्लो त्रुटि से बचने के लिए स्थापित की गई पुनरावृत्ति है) को दोषी ठहराया जाएगा। यदि एक ही प्रतियोगी को कई बार "बहुत अधिक" त्रुटि लेने के लिए दोषी ठहराया जाता है, तो उस प्रतियोगी को अयोग्य घोषित कर दिया जाएगा।
them
नियतात्मक होना चाहिए / नियमों का पालन करना चाहिए? उदाहरण के लिए function me(them){let log=0;them(x=>{++log;return 'C';})
; लॉग इन करें == 0? 'D': 'C';}
StackOverflow
त्रुटि के रूप में परिणाम की आवश्यकता है, न कि एक अनंत लूप जो कभी नहीं बुझता है। यदि यह एक परिणाम हो सकता है StackOverflow
, तो सुनिश्चित करें कि आप एक कोशिश पकड़ने वाला बयान जोड़ सकते हैं। प्रत्यावर्तन का एक उदाहरण है कि 1 सेकंड के भीतर एक stackoverflow त्रुटि तक नहीं पहुंचता के लिए, आप की तरह अधिक अस्पष्ट उदाहरण की जरूरत stackoverflow.com/q/12438786/3371119
them(() => 'C')
त्रुटि नहीं होगी क्योंकि जब प्रतिद्वंद्वी कॉल करता है them
, तो यह () => 'C'
फ़ंक्शन को कॉल करता है। केवल एक चीज जिसे लपेटने की आवश्यकता है, try-catch
वह होगा यदि आप them
किसी फ़ंक्शन के them
पैरामीटर के साथ कॉल करते हैं जो कुछ फ़ंक्शन के पैरामीटर के साथ कॉल करता है them
आदि (असीम रूप से)। उदाहरण के लिए, them(t => t(() => 'C'))
अगर विरोधी खेल रहे थे तो विरोधी खेलेंगे जो भी खेलेंगे nice
। stackoverflow
त्रुटि की कोई संभावना नहीं है ।