पृष्ठभूमि
का खेल मोर्रा एक सरल खेल है। "मूल" संस्करण में, कई खिलाड़ी एक साथ सभी के हाथों की कुल राशि का अनुमान लगाते हुए अपने हाथों से 0-5 नंबर निकालते हैं। जो संस्करण मैं यहां उपयोग करूंगा उसे गैर-तुच्छ रणनीति की क्षमता बढ़ाने के लिए संशोधित किया गया है, और यह नीचे वर्णित है:
- दो खिलाड़ी हैं।
- रॉक-पेपर-कैंची की तरह, खिलाड़ी एक साथ चलते हैं।
- प्रत्येक बारी, प्रत्येक खिलाड़ी 0-5 नंबर चुनता है और अपने विरोधियों की 0-5 की पसंद का भी अनुमान लगाता है । इसका मतलब है कि दो नंबर आउटपुट हैं प्रत्येक बारी। स्पष्ट करने के लिए, दोनों संख्याओं का आउटपुट 0-5 की सीमा में होना चाहिए।
- यदि आप अपने प्रतिद्वंद्वी की पसंद का सही अनुमान लगाते हैं, लेकिन आपके प्रतिद्वंद्वी ने सही अनुमान नहीं लगाया है, तो आप खेले गए दो नंबरों के योग के बराबर अंकों की एक निश्चित संख्या जीतते हैं। उदाहरण के लिए, यदि खेले गए अंक 3 और 5 थे, तो एक सही अनुमान 8 अंकों का होगा।
- यदि दोनों या दोनों खिलाड़ी सही ढंग से अनुमान लगाते हैं, तो कोई भी अंक प्रदान नहीं किया जाता है।
- 1000 राउंड के बाद सबसे अधिक अंक वाला व्यक्ति उस गेम को जीतता है।
प्रतियोगिता
टूर्नामेंट एक राउंड-रॉबिन शैली में किया जाएगा और प्रतियोगी की प्रत्येक संभावित जोड़ी बनाकर चलाया जाएगा। प्रत्येक जीत के लिए, प्रतियोगी को 2 जीत अंक मिलते हैं। प्रत्येक टाई में 1 जीत बिंदु होता है। हार के लिए कोई जीत के अंक प्राप्त नहीं होते हैं।
सहज रूप से, टूर्नामेंट का विजेता दूसरों के खिलाफ सबसे अधिक जीत अंक के साथ प्रतियोगी होगा।
अंदर कैसे आएं
प्रतिस्पर्धा करने के लिए बॉट प्रस्तुत करने के दो तरीके होंगे। पहला, और बहुत पसंदीदा तरीका, नियंत्रक द्वारा आपूर्ति की गई जावा इंटरफ़ेस को लागू करना है। दूसरी विधि एक स्वतंत्र कार्यक्रम लिखना है।
पहले जावा विधि को कवर करते हैं। इंटरफेस आप को लागू करने की आवश्यकता होगी Player
और यह दो तरीकों को परिभाषित करता है: public String getName()
अपने बॉट पहचान लेती है और public int[] getMove(String[] args)
लेता है args
छह तार की एक सरणी के रूप में, mychoices myguesses myscore opponentchoices opponentguesses opponentscore
। एक उदाहरण निम्नलिखित है:
042 045 0 324 432 6
इसका मतलब यह है कि मैंने पहले दौर में 0 को चुना था और अनुमान लगाया था कि मेरा प्रतिद्वंद्वी 0. फेंकने वाला है। मेरे प्रतिद्वंद्वी ने 3 फेंका और मैंने अनुमान लगाया कि मैं एक 4 फेंक दूंगा। तीसरे दौर में, मेरे प्रतिद्वंद्वी ने सही अनुमान लगाया कि मैं फेंक दूंगा 2, जिसका अर्थ है कि वह 2 + 4 = 6 अंक प्राप्त करता है।
आपका तरीका दो पूर्णांकों की एक सरणी लौटाएगा, जो क्रमशः आपकी पसंद और अनुमान हैं। एक उदाहरण {4,2}
4 की पसंद और 2 के अनुमान के लिए है।
यहाँ एक पूर्ण जावा बॉट का एक उदाहरण एक विधि के रूप में लिखा गया है। यदि आप चाहते हैं, तो आपके सबमिशन में केवल वही शामिल होना है जो getMove
विधि में हो रहा है ।
import java.util.Random;
/**
* A simple example Morra bot to get you started.
*/
public class ExampleBot implements Player
{
public String getName()
{
return "ExampleBot";
}
public int[] getMove(String [] args)
{
//easiest way I know to break down to create a move history
//(just contains their throw history)
char[] theirThrowsC = args[3].toCharArray();
int[] theirThrows = new int[theirThrowsC.length];
for(int i = 0; i < theirThrowsC.length; i++)
{
theirThrows[i] = Integer.parseInt(Character.toString(theirThrowsC[i]));
}
//get my score
int myScore = Integer.parseInt(args[2]);
Random r = new Random();
int guess = r.nextInt(6);
if(theirThrows.length > 0)
{
guess = theirThrows[theirThrows.length-1];
}
//throws a random number, guesses what they threw last
return new int[] {r.nextInt(6),guess};
}
public static int otherMethod(int example) //you can write additional static methods
{
return 0;
}
}
एक स्वतंत्र कार्यक्रम के रूप में
मैं वर्तमान में अतिरिक्त भाषाओं के अपने समर्थन में सीमित हूं। जावा के अलावा, मैं पायथन 3.4, पर्ल 5, या रूबी 2.1.5 में लिखे कार्यक्रमों को स्वीकार कर सकता हूं। अगर कोई ऐसी भाषा है जिसे कई लोग चाहते हैं, तो मैं इसे जोड़ने की पूरी कोशिश करूंगा।
आपके प्रोग्राम का इनपुट कमांड लाइन पर तर्क होगा। यह इस तरह दिख सकता है:
perl awesomebot.plx 042 045 0 324 432 6
आपके प्रोग्राम का आउटपुट आपकी पसंद के अनुसार होना चाहिए, प्रत्येक व्हाट्सएप द्वारा।
कृपया अपने उत्तर में इसे चलाने के लिए आवश्यक सटीक उत्तर शामिल करें। ध्यान रखें कि मैं विंडोज 8.1 चला रहा हूं।
अतिरिक्त नियम
सेविंग स्टेट और टाइमआउट
आपके कार्यक्रम को स्थानीय निर्देशिका में एक पाठ फ़ाइल बनाने की अनुमति होगी, जहां आप जानकारी संग्रहीत कर सकते हैं। यह जानकारी पूरे टूर्नामेंट में रखी जाएगी लेकिन बाद में हटा दी जाएगी। फ़ाइल को एक नाम दें जिसे मैं पहचान सकता हूं।
आपके कोड का जवाब देने के लिए 500 मिलीसेकंड की समय सीमा है। समय सीमा में जवाब देने में विफलता (या एक अमान्य कदम) के परिणामस्वरूप उस विशेष मैच का लाभ होगा। जावा सबमिशन में वर्तमान में एक निष्क्रिय टाइमआउट है (जिसे मैं सक्रिय में अपग्रेड कर सकता हूं), जबकि गैर-जावा सबमिशन में एक सक्रिय टाइमआउट होता है जहां 500 मिली सेकेंड के बाद उनकी प्रक्रिया समाप्त हो जाती है।
अधिक सबमिशन नियम
- आपको कई सबमिशन की अनुमति है, जब तक वे नियमों का पालन करते हैं और टैग-टीम नहीं करते हैं।
- प्रत्येक प्रविष्टि अद्वितीय होनी चाहिए। आप किसी अन्य भाषा में किसी अन्य बॉट के तर्क की सटीक प्रतिलिपि नहीं बना सकते हैं।
- बॉट एक दूसरे के साथ बातचीत नहीं कर सकते (किसी भी प्रकार की टीम बनाने के लिए)।
- आप अपने बॉट के अंदर अन्य बॉट्स के तर्क का उपयोग नहीं कर सकते हैं, कहते हैं, अपने प्रतिद्वंद्वी की पहचान करें और उसके कार्यों की भविष्यवाणी करें। आप निश्चित रूप से अपने प्रतिद्वंद्वी की रणनीति को निर्धारित करने का प्रयास कर सकते हैं।
- नियंत्रक, अन्य प्रतियोगियों या मेरे कंप्यूटर के साथ गड़बड़ करने का प्रयास न करें। बाहरी सूचना स्रोतों से कनेक्ट न करें।
नियंत्रक
नियंत्रक का वर्तमान संस्करण यहां पाया गया है । यह जावा 8. में लिखा गया है। "टूर्नामेंट" फ़ाइल मुख्य नियंत्रक है, जिसमें प्रतियोगियों की सूची भी शामिल है (यदि आप अपनी खुद की प्रतियोगिताओं की मेजबानी करना चाहते हैं)।
लीडरबोर्ड
मैं वास्तव में लीडरबोर्ड को बहुत बार अपडेट नहीं कर पाया हूं। मैं इस सप्ताह के अंत में व्यस्त हूं। "बल्कि व्यस्त" से मेरा मतलब है कि 6:30 पूर्वाह्न से 9:30 बजे तक कंप्यूटर तक पहुंच नहीं है। यहाँ 5 रन के बाद स्कोर हैं। "इको" बॉट किसी कारण से जब्त किया गया (मेरी गलती हो सकती है, मैंने अभी तक जांच नहीं की है)।
170 - Quinn and Valor
158 - Historian
142 - DeltaMax
140 - MorraCowbell
132 - Extrapolator
115 - Rainbolt
102 - Popularity
100 - Interpolator
83 - CounterBot
80 - Basilisk
76 - Erratica
65 - Trendy
63 - Scholar
62 - RandomGuesser
60 - KingFisher
59 - NullifierBot
55 - EvolvedBot
48 - Confused
श्रेय
नियंत्रक के साथ मदद के लिए रेनबोल्ट और पीटर टेलर को बहुत धन्यवाद।