टेस्ट ड्राइवर • चैलेंज चर्चा • एडवेंचरर को जमा करें
( छवि स्रोत )
कई प्रतिद्वंद्वी साहसी खजाने के लिए खंडहरों पर छापे मार रहे हैं, लेकिन वे केवल एक समय में इतना ले जा सकते हैं और धीरज की अपनी सीमाएं हैं। वे सबसे मूल्यवान खजाना प्राप्त करना चाहते हैं और जारी रखने के लिए बहुत थक जाने से पहले बाहर निकल जाते हैं। वे अपने लुटे हुए शिनागिों से यथा संभव अमीर बनने की कोशिश कर रहे हैं।
गेमप्ले
प्रत्येक एडवेंचर की शुरुआत 1000 स्टैमिना पॉइंट्स के साथ कालकोठरी के पहले कमरे में होती है और उनके बैकपैक में 50 किग्रा स्थान होता है।
खेल एक बारी-आधारित फैशन पर संचालित होता है, जिसमें सभी खिलाड़ी एक साथ अपने घुमावों को हल करते हैं। प्रत्येक मोड़, आप निम्न कार्यों में से एक कर सकते हैं:
- अगले कमरे में चले जाओ।
- पिछले कमरे में ले जाएँ।
- एक खजाना लेने के लिए बोली सहनशक्ति।
- एक खजाना गिरा।
कमरों के बीच चलने के लिए 10 स्टैमिना की आवश्यकता होती है, साथ ही आपके बैकपैक में मौजूद हर 5 किग्रा के लिए 1 राउंड ऊपर होता है। उदाहरण के लिए, 3 किलो के खजाने को ले जाने वाले एक साहसी को चलने के लिए 11 सहनशक्ति की आवश्यकता होती है और 47 किलो वजन वाले व्यक्ति को स्थानांतरित होने के लिए 20 सहनशक्ति की आवश्यकता होती है।
खजाना गिराने के बावजूद 1 सहनशक्ति की आवश्यकता होती है।
खंडहर से बाहर निकलने पर, खिलाड़ी द्वारा कोई और मोड़ नहीं लिया जाएगा।
यदि कोई खिलाड़ी इनमें से कोई भी कार्रवाई नहीं कर सकता (सहनशक्ति की कमी या खजाने की अनुपस्थिति के कारण), तो उनके साहसी व्यक्ति थकावट से मर जाते हैं, अपने कब्जे वाले खजाने को वर्तमान में कब्जे वाले कमरे में स्थानांतरित कर देते हैं। इसी तरह, यदि कोई खिलाड़ी अमान्य कार्रवाई करने का प्रयास करता है, तो उनके साहसी को इसके बजाय एक जाल द्वारा मार दिया जाएगा, जिसके परिणामस्वरूप एक ही खजाना मिल जाएगा।
बिडिंग
खजाने के लिए न्यूनतम बोली 1 स्टैमिना प्रति 1 किग्रा होती है जो कि खजाने का वजन होता है। आप खजाना प्राप्त करने की अधिक संभावना होने के लिए अतिरिक्त सहनशक्ति अंक भी बोल सकते हैं। जिस सहनशक्ति की बोली लगाई गई, उसका कोई नतीजा नहीं निकला।
इस घटना में कि कई खिलाड़ियों ने एक ही खजाने को लेने के लिए बोली लगाई है, जो खिलाड़ी सबसे अधिक बोली लगाता है उसे खजाना मिलता है। यदि एक से अधिक खिलाड़ी ने उच्चतम बोली लगाई, तो उनमें से कोई भी खजाना प्राप्त नहीं करेगा।
विन कंडीशन
खजाने का सबसे बड़ा कुल मूल्य वाला खिलाड़ी विजेता है। एक टाई की अप्रत्याशित घटना में, संबंध सबसे छोटे कुल वजन पर जाते हैं, फिर सबसे छोटी संख्या में खजाने, फिर सबसे मूल्यवान खजाने का मूल्य, दूसरा सबसे मूल्यवान, तीसरा ... जब तक कि टाई टूट नहीं जाती। लगभग असंभव घटना में, इस बिंदु पर अभी भी एक टाई है, परीक्षण चालक का कहना है कि "इसे पेंच करें" और विजेता को मनमाने ढंग से निर्धारित किया जाता है।
टूर्नामेंट के संदर्भ में, खिलाड़ियों को 10 अंकों के साथ पहला स्थान, 9 अंकों के साथ दूसरा स्थान, 8 अंकों के साथ तीसरा स्थान, आदि ..., मृत खिलाड़ियों और साहसी खिलाड़ियों के साथ 0 अंक प्राप्त करने के साथ स्थान दिया जाएगा।
खंडहर के बारे में
- प्रत्येक कमरे में शुरू में और खजाने होते हैं। (जहाँ कमरा संख्या है)
- मनमाने ढंग से कई कमरे हैं, केवल साहसी लोगों की सहनशक्ति और तलाशने की इच्छा से सीमित हैं।
- प्रत्येक खजाने में एक मौद्रिक मूल्य (पूरे $ में) और एक वजन (पूरे किलो में) होगा।
- खंडहर में गहराई में जाने के साथ ही खजाने अधिक मूल्यवान और भरपूर होते हैं।
- कोष बनाने के लिए विशिष्ट सूत्र इस प्रकार हैं: ( पासा रोल के लिए संकेतन का उपयोग करते हुए )
- सूत्र (न्यूनतम 1) का उपयोग करके पहले वजन उत्पन्न किया जाता है
- खजाना मूल्य तब माध्यम से उत्पन्न होता है (जहाँ कमरा संख्या है और वजन है)
खिलाड़ियों के लिए दृश्यमान जानकारी
प्रत्येक मोड़ पर, खिलाड़ियों को निम्नलिखित जानकारी मिलती है:
- कमरे की संख्या वे वर्तमान में हैं। यह 1-अनुक्रमित है, इसलिए वैचारिक रूप से निकास "कमरे 0" पर है।
- कमरे में वर्तमान में खजाने की एक सूची
- अन्य खिलाड़ियों की एक सूची जो वर्तमान में कमरे में हैं।
- खजाने की आपकी वर्तमान सूची
- आपकी वर्तमान सहनशक्ति का स्तर
कोडिंग
परीक्षण चालक यहां पाया जा सकता है ।
आपको इस Adventurer
वर्ग का उपवर्ग लागू करना चाहिए :
class Adventurer:
def __init__(self, name, random):
self.name = name
self.random = random
def get_action(self, state):
raise NotImplementedError()
def enter_ruins(self):
pass
आपको केवल get_action
विधि को ओवरराइड करने की आवश्यकता है । enter_ruins
एक खेल शुरू होने से पहले चलाया जाता है और खेल के लिए आप जो भी तैयार करना चाहते हैं उसे तैयार करने का आपका मौका है। आपको ओवरराइड करने की आवश्यकता नहीं है __init__
, और आपको वास्तव में नहीं करना चाहिए । यदि आपकी __init__
दुर्घटनाएँ होती हैं, तो आप अयोग्य हो जाएंगे।
get_action
एक तर्क देता है जो namedtuple
निम्नलिखित क्षेत्रों के साथ है (इस क्रम में, यदि आप विनाश करना पसंद करते हैं):
room
: वर्तमान में आप जिस कमरे में हैं, उसकी संख्याtreasures
: कमरे में खजाने की सूचीplayers
: कमरे में अन्य खिलाड़ियों की सूची। आप केवल खिलाड़ी का नाम इस तरह से प्राप्त करते हैं, इसलिए आपको नहीं पता कि बॉट उन्हें नियंत्रित कर रहा है या उनकी सूची / सहनशक्ति।inventory
: अपने बैग में खजाने की सूचीstamina
: आपकी वर्तमान सहनशक्ति का स्तर
यह वस्तु अतिरिक्त रूप से दो उपयोगिता गुण प्रदान करती है:
carry_weight
: आपके द्वारा लिए जा रहे सभी खजाने का कुल वजनtotal_value
: आपके द्वारा लिए जा रहे सभी खजाने का कुल मूल्य
treasures
और inventory
सूचियाँ शामिल हैं namedtuple
इन विशेषताओं के साथ:
name
: खजाने का नाम (कॉस्मेटिक उद्देश्यों के लिए)value
: $ में खजाने का मौद्रिक मूल्य।weight
: किलो में खजाने का वजन
get_action
निम्नलिखित मानों / प्रतिमानों में से एक को वापस करना चाहिए:
'next'
या'previous'
अगले / पिछले कमरे में जाने के लिए'take', <treasure index>, <bid>
(हां, टुपल के रूप में, हालांकि कोई भी क्रम तकनीकी रूप से अच्छी तरह से काम करेगा) कमरे के खजाने की सूची में दिए गए सूचकांक में खजाने पर बोली लगाने के लिए। दोनों तर्क पूर्णांक होने चाहिए। झांकियों को फेरी लगाई जाएगी।'drop', <inventory index>
दिए गए सूचकांक में पाए गए खजाने को गिराने के लिए। सूचकांक (स्वाभाविक रूप से) पूर्णांक होना चाहिए।
अन्य प्रतिबंध
- आप केवल छद्म आयामीता के लिए आरंभीकरण के दौरान आपको दिए गए यादृच्छिक उदाहरण का उपयोग कर सकते हैं।
- ऐसा कुछ भी जो व्यवहार संबंधी नॉनडेटर्मिनिज़्म का परिचय दे सकता है, की अनुमति नहीं है। यहाँ आशय यह है कि नए बॉट (और परीक्षण में संभावित रूप से कीड़े) का परीक्षण करने में सहायता के लिए एक ही बीज दिए जाने पर बॉट्स को समान रूप से व्यवहार करना चाहिए। केवल ब्रह्मांडीय विकिरण से किसी भी विचलन / नॉनडेटर्मिनिज़्म का कारण होना चाहिए।
- ध्यान रखें कि पायथन 3 में हैश कोड यादृच्छिक हैं, इसलिए
hash
किसी भी निर्णय लेने के लिए उपयोग करने की अनुमति नहीं है।dict
निर्णय के लिए पुनरावृत्ति क्रम का उपयोग करते समय भी ठीक हैं क्योंकि पायथन 3.6 के बाद से आदेश की गारंटी दी गई है।
- आप
ctypes
हैक याinspect
स्टैक वूडू (या किसी अन्य विधि) का उपयोग करके परीक्षण चालक को दरकिनार नहीं कर सकते । कुछ प्रभावशाली डरावनी चीजें हैं जो आप उन मॉड्यूल के साथ कर सकते हैं। कृपया नहीं।- प्रत्येक बॉट को रक्षात्मक प्रतियों और एस की प्राकृतिक अपरिवर्तनीयता के माध्यम से यथोचित रूप से सैंडबॉक्स किया जाता है
namedtuple
, लेकिन कुछ असंगत खामियां / कारनामे हैं। - अन्य कार्यक्षमता से
inspect
औरctypes
तब तक उपयोग किया जा सकता है जब तक कि नियंत्रक कार्यक्षमता को दरकिनार करने के लिए उपयोग नहीं किया जाता है। - अपने वर्तमान खेल में अन्य बॉट्स के उदाहरणों को हथियाने की किसी भी विधि की अनुमति नहीं है।
- प्रत्येक बॉट को रक्षात्मक प्रतियों और एस की प्राकृतिक अपरिवर्तनीयता के माध्यम से यथोचित रूप से सैंडबॉक्स किया जाता है
- बॉट्स को एकल काम करना चाहिए और किसी भी उद्देश्य के लिए किसी भी अन्य बॉट्स के साथ किसी भी तरह से समन्वय नहीं करना चाहिए। इसमें अलग-अलग लक्ष्यों के साथ दो बॉट्स बनाना शामिल है, ताकि एक दूसरे की सफलता के लिए खुद को बलिदान कर सके। एक बार 10 से अधिक प्रतियोगी होने के बाद, आपको वास्तव में एक ही गेम में दो बॉट होने की गारंटी नहीं होगी और एडवेंचरर नाम बॉट क्लास का कोई संकेत नहीं देते हैं, इसलिए इस प्रकार की रणनीतियाँ वैसे भी सीमित हैं।
- वर्तमान में निष्पादन समय पर कोई कठोर प्रतिबंध नहीं है, लेकिन मैं भविष्य में इसे कठिन-प्रतिबंधित करने का अधिकार सुरक्षित रखता हूं अगर टूर्नामेंट बहुत लंबा लगने लगे। उचित बनें और 100 मीटर से कम की प्रक्रिया को चालू रखने का प्रयास करें , क्योंकि मुझे उस सीमा से नीचे इसे प्रतिबंधित करने की आवश्यकता नहीं है। (टूर्नामेंट लगभग 2 घंटे तक चलेगा यदि सभी बॉट्स लगभग 100ms प्रति टर्न लेते हैं।)
- आपके बॉट क्लास को सभी सबमिशन में विशिष्ट रूप से नामित किया जाना चाहिए।
- आप खेल के बीच कुछ भी याद नहीं कर सकते हैं। (हालांकि, आप मोड़ों के बीच चीजों को याद कर सकते हैं )
- Sys.modules संपादित न करें। उदाहरण चर के बाहर कुछ भी एक स्थिर के रूप में माना जाना चाहिए।
- आप किसी भी बॉट के कोड को प्रोग्रामेटिक रूप से संशोधित नहीं कर सकते हैं, जिसमें आपका अपना भी शामिल है।
- इसमें आपका कोड हटाना और पुनर्स्थापित करना शामिल है। यह डिबगिंग और टूर्नामेंट को अधिक सुव्यवस्थित बनाने के लिए है।
- कोई भी कोड जिसके कारण नियंत्रक क्रैश होता है, तुरंत अयोग्य हो जाएगा। जबकि अधिकांश अपवादों को पकड़ा जाएगा, कुछ के माध्यम से फिसल सकता है और सीगफॉल्ट अप्राप्य हैं। (हाँ, आप पायथन में सेगफॉल्ट कर सकते हैं धन्यवाद
ctypes
)
प्रस्तुतियाँ
उत्तर स्क्रैपिंग में सहायता करने के लिए, उत्तर के शीर्ष पर अपने बॉट का नाम इंगित करें #Header1
और सुनिश्चित करें कि आपके उत्तर में कम से कम एक कोड ब्लॉक शामिल है (आपके उत्तर में पहले वाले का उपयोग किया जाएगा)। आपको किसी भी आयात या डॉकस्ट्रिंग को शामिल करने की आवश्यकता नहीं है, क्योंकि वे स्क्रैपर द्वारा स्वचालित रूप से जोड़ दिए जाएंगे।
मैं विस्तृत और समझने योग्य स्पष्टीकरण के साथ उत्तर को उत्कीर्ण करने के लिए अधिक इच्छुक हूं। दूसरों के साथ भी ऐसा ही व्यवहार होने की संभावना है।
मोटे तौर पर, आपके उत्तर को कुछ इस तरह से प्रारूपित किया जाना चाहिए:
# Name of Bot
Optional blurb
#imports go here
class BotName(Adventurer):
#implementation
Explanation of bot algorithm, credits, etc...
(के रूप में प्रस्तुत)
बॉट का नाम
वैकल्पिक धुंधला
#imports go here class BotName(Adventurer): #implementation
बॉट एल्गोरिथ्म, क्रेडिट आदि की व्याख्या ...
स्थानीय रूप से टेस्ट ड्राइवर चलाना
आपको पायथन 3.7+ की आवश्यकता होगी और मैं आपको tabulate
पाइप के माध्यम से भी स्थापित करने की सलाह देता हूं । अतिरिक्त रूप से प्रस्तुतियाँ के लिए इस पृष्ठ को स्क्रैप करना आवश्यक है lxml
और requests
। आपको सर्वश्रेष्ठ परिणामों के लिए एएनएसआई रंग से बचने के लिए समर्थन के साथ एक टर्मिनल का भी उपयोग करना चाहिए। विंडोज 10 में इसे कैसे सेट किया जाए, इसकी जानकारी यहां मिल सकती है ।
अपने बॉट को उपनिर्देशिका में एक फ़ाइल में उसी निर्देशिका के भीतर जोड़ें ruins.py
( ruins_bots
डिफ़ॉल्ट रूप से) और from __main__ import Adventurer
मॉड्यूल के शीर्ष पर जोड़ना सुनिश्चित करें । यह मॉड्यूल में तब जोड़ा जाता है जब स्क्रैपर आपके सबमिशन को डाउनलोड करता है, और जब यह निश्चित रूप से हैक होता है, तो यह सुनिश्चित करने का सबसे सीधा तरीका है कि आपके बॉट की सही तरीके से पहुंच है Adventurer
।
उस निर्देशिका के सभी बॉट्स को गतिशील रूप से रनटाइम पर लोड किया जाएगा, इसलिए आगे कोई बदलाव आवश्यक नहीं है।
टूर्नामेंट
अंतिम विजेता को प्रत्येक गेम में 10 बॉट के साथ गेम्स की एक श्रृंखला में निर्धारित किया जाएगा। यदि कुल 10 से अधिक सबमिशन हैं, तो शीर्ष 10 बॉट्स को व्यवस्थित रूप से 10 के समूहों में विभाजित करके निर्धारित किया जाएगा, जब तक कि प्रत्येक बॉट (20) गेम नहीं खेला जाता है। शीर्ष 10 बॉट्स को इस समूह से रीसेट स्कोर के साथ चुना जाएगा और तब तक गेम खेलेंगे जब तक कि पहली जगह बॉट ने दूसरे स्थान की बॉट पर 50 अंक की बढ़त हासिल नहीं कर ली हो या जब तक कि 500 गेम नहीं खेले जाते।
कम से कम 10 प्रस्तुतियाँ होने तक, खाली स्लॉट्स "ड्रंकर्ड्स" से भरे होंगे जो खंडहरों के माध्यम से बेतरतीब ढंग से भटकते हैं और (और कभी-कभी) यादृच्छिक खजाने को छोड़ देते हैं जब तक कि वे सहनशक्ति से बाहर नहीं निकलते हैं और बाहर निकलने के लिए निकलते हैं।
नए सबमिशन होने पर टूर्नामेंट फिर से चलाए जाएंगे। यह एक खुली KOTH चुनौती है जिसमें कोई सेट समाप्ति तिथि नहीं है।
लीडरबोर्ड
4 मई, 2019 को शाम 4:25 बजे एमडीटी से रन: (2019-05-04 4:25 -6: 00)
Seed: K48XMESC
Bot Class | Score | Mean Score
--------------+---------+--------------
BountyHunter | 898 | 7.301
Scoundrel | 847 | 6.886
Accountant | 773 | 6.285
Ponderer | 730 | 5.935
Artyventurer | 707 | 5.748
PlanAhead | 698 | 5.675
Sprinter | 683 | 5.553
Accomodator | 661 | 5.374
Memorizer | 459 | 3.732
Backwards | 296 | 2.407
अपडेट - अप्रैल 15: एक युगल नियम अपडेट / स्पष्टीकरण
अपडेट - अप्रैल १ ban: अन्य बॉट्स कोड को संशोधित करने जैसे नापाक कार्यों के एक-दो उल्लेखनीय किनारे के मामलों पर प्रतिबंध लगाना।
अपडेट - 4 मई: बाउंटी को बैकवर्ड को पूरी तरह से नष्ट करने के लिए स्लिफ़र से सम्मानित किया गया। बधाई हो!
pip
इंस्टॉल किया है और PATH
(जो नए इंस्टॉलेशन AFAIK के लिए डिफ़ॉल्ट है) तो विंडोज़ से आप pip install modulename
कमांड प्रॉम्प्ट में चला सकते हैं । अन्य परिस्थितियों के लिए (जो मुझे पता नहीं है), पाइप पर जाएं , आवश्यक मॉड्यूल की खोज करें और एक विकल्प चुनें।