এই চ্যালেঞ্জটিতে আপনি এমন একটি বট লিখবেন যা বন্দীর দ্বন্দ্ব বাজবে। এখানে ধরা আছে: আপনি আগের গেমগুলির ইতিহাসে অ্যাক্সেস পাবেন না। পরিবর্তে, আপনার কাছে প্রতিপক্ষের কাছেই অ্যাক্সেস থাকবে। এই সংস্করণে, উভয় খেলোয়াড়ই দু'জনকে সহযোগিতা করলে +2 পয়েন্ট পায়, যদি তারা উভয়ই ত্রুটিযুক্ত হয় তবে +1 পয়েন্ট এবং যদি একজন সহযোগিতা করে তবে একটি ত্রুটি করে, খেলোয়াড় +3 পায় এবং অন্যটি পয়েন্ট পায় না। প্রতিটি জমা দেওয়ার জন্য নিজেই সহ অন্যান্য জমা দেওয়ার বিরুদ্ধে খেলবে 10 বার। বিজয়ী হ'ল সর্বাধিক পয়েন্ট সহ জমা দেওয়া।
নিয়ামক : আপনি ফর্ম আকারে একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে
function submissionName(them) {
/* Your code here */
}
কন্ট্রোলার name
ফলাফলগুলি প্রদর্শন করতে ফাংশনের সম্পত্তি ব্যবহার করে , সুতরাং যদি এটি এই ফর্ম্যাটটিতে না থাকে (এবং পরিবর্তে হয় f = x => ...
বা হয় f = function() { ... }
) তবে আপনার স্কোরটি দেখতে অসুবিধা হবে এবং আপনি নিজের ফাংশনটি অ্যাক্সেস করতে সক্ষম হবেন না।
ফাংশনটি একটি প্যারামিটার গ্রহণ করবে: them
যা প্রতিপক্ষের কাজ। তারপরে প্রতিপক্ষের প্রতিক্রিয়ার কী কী ইনপুট হিসাবে নির্দিষ্ট ফাংশন দেওয়া হবে তা দেখার জন্য এটি সেই ফাংশনটিকে কল করতে পারে। সেই তথ্যের উপর ভিত্তি করে, আপনাকে অবশ্যই যথাক্রমে সহযোগিতা বা ত্রুটির জন্য 'সি' বা 'ডি' ফেরত দিতে হবে।
উদাহরণ (প্রতিযোগিতা করা হবে):
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? 'ডি': 'সি';
StackOverflow
ত্রুটির ফলস্বরূপ প্রয়োজন এবং এমন অসীম লুপ নয় যা কখনই ছাড়বে না। যদি এটির ফলাফল হতে পারে StackOverflow
তবে নিশ্চিত হয়ে নিন যে আপনি একটি চেষ্টা-ধরার বিবৃতি যুক্ত করেছেন। পুনরাবৃত্তির উদাহরণের জন্য যা 1 সেকেন্ডের মধ্যে স্ট্যাকওভারফ্লো ত্রুটিতে পৌঁছায় না, আপনার আরও স্ট্যাকওভারফ্লো.com
them(() => 'C')
কোনও ত্রুটির পরিণতি হবে না কারণ যখন বিরোধী ফোন করে them
, তখন এটি () => 'C'
ফাংশনটি কল করে । কেবলমাত্র মোড়ানোর দরকার আছে try-catch
যদি আপনি them
কোনও ফাংশনের them
একটি প্যারামিটার দিয়ে কল করেন যা কিছু ফাংশনের প্যারামিটার দিয়ে কল করে them
etc. ইত্যাদি (অসীম)। উদাহরণস্বরূপ, them(t => t(() => 'C'))
প্রতিপক্ষ যে খেলবে তা খেলবে যদি প্রতিপক্ষের মনে হয় তারা খেলছে nice
। stackoverflow
ত্রুটির সম্ভাবনা নেই ।