नोट : इस प्रतियोगिता का विजेता जैक !!! है। कोई और सबमिशन स्वीकार नहीं किया जाएगा।
यहां इस राजा की पहाड़ी चुनौती के लिए चैट रूम है । यह मेरा पहला एक है तो मैं सुझाव के लिए खुला हूँ!
रीपर एक गेम कॉन्सेप्ट है जिसे आर्ट ऑफ़ प्रॉब्लम सॉल्विंग द्वारा विकसित किया गया है जिसमें धैर्य और लालच शामिल है। KOTH शैली प्रतियोगिता (अपने सुझावों और सुधारों के लिए @NathanMerrill और @dzaima को धन्यवाद) फिट करने के लिए खेल को संशोधित करने के बाद, यहाँ चुनौती है।
खेल निम्नलिखित के रूप में काम करता है: हमारे पास रीप के रूप में जाना जाने वाला एक मूल्य है जो किसी दिए गए हर टिक से गुणा करता है। प्रत्येक टिक के बाद, प्रत्येक बॉट में "रीपिंग" का विकल्प होता है, जिसका अर्थ है रीप के वर्तमान मूल्य को एक अंक में जोड़ना, और रीप को 1 तक कम करना।
हालाँकि, टिक की एक निश्चित संख्या है जो एक बॉट को "रीप्स" के बीच में इंतजार करना होगा, और गेम जीतने के लिए निश्चित अंकों की एक निश्चित संख्या।
काफी सरल? यहां आपके इनपुट हैं:
आई / ओ
आपको पायथन 3 में एक फ़ंक्शन लिखना है जो 3 इनपुट लेता है। पहले का selfउपयोग, कक्षा की वस्तुओं को संदर्भित करने के लिए किया जाता है (बाद में दिखाया गया है)। दूसरा है Reap, रीप का वर्तमान मूल्य जो आप कमाते हैं यदि आप "रीप" करते हैं। तीसरा है prevReap, पिछले टिक के दौरान बॉट्स की एक सूची।
अन्य वस्तुएँ जिन्हें आप अपने फ़ंक्शन में एक्सेस कर सकते हैं:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
आप चाहिए इन वस्तुओं में से किसी भी सामग्री को संपादित नहीं, के लिए छोड़कर self.obj।
आपको 1रिप करने के लिए आउटपुट करना होगा , और कुछ और (या कुछ भी नहीं) नहीं काटना होगा। ध्यान दें कि यदि आप पर्याप्त टिकों का इंतजार नहीं करते हैं, तो आप काटते हैं, मैं इस तथ्य को अनदेखा कर दूंगा कि आपने क्या चुनना है।
नियम
मैं जिन मापदंडों का उपयोग कर रहा हूं winning_score=10000, वे हैं multiplier=1.6-(1.2/(1+sqrt(x))), waittime = floor(1.5*x)जहां xकोठ में बॉट की संख्या है।
- खेल तब समाप्त होता है जब कोई खिलाड़ी (या एकाधिक) विजेता स्कोर तक पहुंचता है।
- जब कई बॉट्स एक ही बार में रिप करने के लिए कहते हैं, तो उन बॉट्स को प्राथमिकता दी जाती है, जिन्होंने लंबे समय तक इंतजार किया है (संबंधों के मामले में, जिन बॉट्स ने अधिकतम समय का इंतजार किया है उन्हें रीप में अंक हासिल करने और हासिल करने की अनुमति है)
- आपके बॉट को 5 टिक्स के पार औसतन 100 से अधिक एमएस नहीं लेना चाहिए।
- यदि आप पुस्तकालयों को आयात करना चाहते हैं, तो पूछें! मैं किसी भी लाइब्रेरी को जोड़ने की कोशिश करूंगा, जिसे मैं पायथन के अपने डेस्कटॉप संस्करण पर चला सकता हूं (गणित पहले से ही आयातित है: इसे इस्तेमाल करने के लिए स्वतंत्र महसूस करें)
- KoTHs के सभी मानक कमियां, जैसे डुप्लिकेट बॉट्स, 1-अप बॉट्स, इत्यादि इसी तरह से प्रतिबंधित हैं।
- किसी भी प्रकार के यादृच्छिकता का उपयोग करने वाले किसी भी बॉट को
getRandomमेरे द्वारा प्रदान किए गए फ़ंक्शन का उपयोग करना चाहिए ।
आप नीचे TIO लिंक में नियंत्रक पा सकते हैं। इसका उपयोग करने के लिए, अपने फ़ंक्शन का नाम BotListस्ट्रिंग के रूप में जोड़ें, और फिर फ़ंक्शन को कोड में जोड़ें। संशोधित multiplierबदल क्या रीप प्रत्येक टिक से गुणा किया जाता, संशोधित करने के लिए winning_scoreक्या स्कोर खेल को समाप्त करने के लिए आवश्यक है बदलने के लिए, और संशोधित waittimeकाटनेवाला के बीच प्रतीक्षा करने के लिए टिक की संख्या बदलने के लिए।
आपकी सुविधा के लिए, यहाँ कुछ नमूने (और बल्कि मूर्ख) हैं। इनके समान बॉट्स जमा करने की अनुमति नहीं होगी। हालांकि, वे प्रदर्शित करते हैं कि नियंत्रक कैसे काम करता है।
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
इच्छुक लोगों के लिए, यहां 15 सबमिशन के साथ कंट्रोलर दिया गया है: इसे ऑनलाइन आज़माएं
अंतिम परिणाम
वे यहाँ अंतिम हैं! अंतिम स्टैंडिंग उत्पन्न करने के लिए मैंने किस कोड का उपयोग किया है यह देखने के लिए ऊपर दिए गए TIO लिंक को देखें। परिणाम बहुत दिलचस्प नहीं हैं। 1000 से अधिक रन मैंने अलग-अलग यादृच्छिक बीजों के साथ किए, परिणाम थे
1000 wins - Jack
0 wins - everyone else
बाउंटी विजेता जैक को बधाई !! (उर्फ @ रंजी)
len(BotList)?
25बॉट पर आधारित अपने विवरण में जो कुछ किया वह नाटक में था। पहले थोड़ा इंतजार करेंगे फिर भी दूसरे लोगों के बॉट्स देखेंगे। रुषभ मेहता , क्या कोई समय सीमा / अंतिम तिथि होगी जब सभी बॉट चलाए जाएंगे और एक विजेता निर्धारित किया जाएगा?