পটভূমি
মোরার খেলাটি একটি সাধারণ খেলা। "আসল" সংস্করণে বেশ কয়েকটি প্লেয়ার প্রত্যেকের হাতের মোট যোগফল অনুমান করার সময় এক সাথে তাদের হাতে 0-5 নম্বর ফেলে দেয়। আমি এখানে যে সংস্করণটি ব্যবহার করব তা অপ্রয়োজনীয় কৌশলটির সম্ভাবনা বাড়ানোর জন্য পরিবর্তন করা হয়েছে এবং এটি নীচে বর্ণিত হয়েছে:
- দু'জন খেলোয়াড় আছেন।
- রক-পেপার-কাঁচিগুলির মতো প্লেয়াররাও একই সাথে চলাফেরা করে।
- প্রতিটি পালা, প্রতিটি প্লেয়ার 0-5 নম্বর পছন্দ করে এবং তাদের বিরোধীদের 0-5-এর পছন্দটিও অনুমান করে। এর অর্থ হ'ল প্রতিটি সংখ্যা দুটি আউটপুট। স্পষ্ট করার জন্য, উভয় সংখ্যার আউটপুট 0-5 ব্যাপ্তির মধ্যে থাকা উচিত lusive
- যদি আপনি আপনার প্রতিপক্ষের পছন্দটি সঠিকভাবে অনুমান করেন তবে আপনার প্রতিপক্ষটি সঠিকভাবে অনুমান করে না, আপনি খালি দুটি সংখ্যার যোগফলের সমান একটি নির্দিষ্ট সংখ্যক পয়েন্ট জিতবেন। উদাহরণস্বরূপ, খেলানো সংখ্যাগুলি যদি 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 টি ফেলতে চলেছে My a 2, যার অর্থ তিনি 2 + 4 = 6 পয়েন্ট অর্জন করেন।
আপনার পদ্ধতিটি যথাক্রমে আপনার পছন্দ এবং অনুমান দুটি পূর্ণসংখ্যার একটি অ্যারে প্রদান করবে। একটি উদাহরণ {4,2}
4 টি পছন্দ এবং 2 এর অনুমানের জন্য।
একটি পদ্ধতি হিসাবে লিখিত সম্পূর্ণ জাভা বটের উদাহরণ এখানে example আপনি যদি চান তবে আপনার জমা দেওয়ার 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;
}
}
একটি স্বতন্ত্র প্রোগ্রাম হিসাবে
আমি বর্তমানে অতিরিক্ত ভাষার আমার সমর্থনে সীমাবদ্ধ। জাভা ছাড়াও আমি পাইথন ৩.৪, পার্ল ৫, বা রুবি ২.১.৫ এ লিখিত প্রোগ্রামগুলি গ্রহণ করতে পারি। যদি এমন কোনও ভাষা থাকে যা বেশ কয়েকটি লোক মনে করে, আমি এটি যুক্ত করার জন্য যথাসাধ্য চেষ্টা করব।
আপনার প্রোগ্রামের ইনপুটটি কমান্ড লাইনে যুক্তি হবে be এটি দেখতে এটি দেখতে পারে:
perl awesomebot.plx 042 045 0 324 432 6
আপনার প্রোগ্রামের আউটপুটটি আপনার অনুমান অনুসারে আপনার পছন্দ হওয়া উচিত এবং প্রত্যেকটি সাদা স্থান অনুসরণ করবে।
এটি চালানোর জন্য সঠিক কমান্ডটি আপনার উত্তরে অন্তর্ভুক্ত করুন। মনে রাখবেন যে আমি উইন্ডোজ 8.1 চালাচ্ছি।
অতিরিক্ত বিধি
সংরক্ষণের অবস্থা এবং সময়সীমা
আপনার প্রোগ্রামটিকে স্থানীয় ডিরেক্টরিতে একটি পাঠ্য ফাইল তৈরি করার অনুমতি দেওয়া হবে, যেখানে আপনি তথ্য সংরক্ষণ করতে পারেন। এই তথ্য পুরো টুর্নামেন্ট জুড়ে রাখা হবে কিন্তু পরে মুছে ফেলা হবে। ফাইলটি এমন একটি নাম দিন যা আমি সনাক্ত করতে পারি।
আপনার কোডটির প্রতিক্রিয়া জানাতে সময়সীমা 500 মিলিসেকেন্ড রয়েছে। সময়সীমাতে প্রতিক্রিয়া জানাতে ব্যর্থ (বা একটি অবৈধ পদক্ষেপ দেওয়া) এর ফলে সেই নির্দিষ্ট ম্যাচটি বাজেয়াপ্ত হবে। জাভা সাবমিশনগুলির বর্তমানে একটি নিষ্ক্রিয় সময়সীমা রয়েছে (যা আমি সক্রিয়তে আপগ্রেড করতে পারি), যেখানে জাভা-বিহীন সাবমিশনগুলির একটি সক্রিয় সময়সীমা রয়েছে যেখানে 500 মিলিসেকেন্ড পরে তাদের প্রক্রিয়াটি সমাপ্ত হয়।
আরও জমা দেওয়ার নিয়ম
- যতক্ষণ না তারা নিয়ম মেনে চলেন এবং ট্যাগ-টিম না রাখেন ততক্ষণ আপনাকে একাধিক জমা দেওয়ার অনুমতি দেওয়া হবে।
- প্রতিটি প্রবেশ অবশ্যই অনন্য হতে হবে। আপনি অন্য ভাষায় অন্য বট যুক্তির সঠিক অনুলিপি তৈরি করতে পারবেন না।
- বটগুলি একে অপরের সাথে যোগাযোগ করতে পারে না (কোনও ধরণের দল তৈরি করতে)।
- আপনি আপনার বটের অভ্যন্তরে থাকা অন্য বটগুলির যুক্তি ব্যবহার করতে পারবেন না, বলুন, আপনার প্রতিযোগীকে সনাক্ত করুন এবং এর ক্রিয়াকলাপের পূর্বাভাস দিন। আপনি অবশ্যই আপনার প্রতিপক্ষের কৌশল নির্ধারণ করার চেষ্টা করতে পারেন।
- নিয়ামক, অন্যান্য প্রতিযোগী বা আমার কম্পিউটারের সাথে গোলযোগ করার চেষ্টা করবেন না। বাহ্যিক তথ্য উত্সগুলির সাথে সংযুক্ত হবেন না।
নিয়ামক
নিয়ামকের বর্তমান সংস্করণটি এখানে পাওয়া যায় । এটি জাভা ৮ তে লেখা আছে "টুর্নামেন্ট" ফাইলটি প্রধান নিয়ামক, এতে প্রতিযোগীদের তালিকাও রয়েছে (যদি আপনি নিজের প্রতিযোগিতা হোস্ট করতে চান)।
লিডারবোর্ড
আমি সত্যিই খুব প্রায়ই লিডারবোর্ড আপডেট করতে পারিনি। আমি বরং এই সপ্তাহান্তে ব্যস্ত। "বরং ব্যস্ত" দ্বারা আমি বোঝাতে চাইছি সকাল সাড়ে to টা থেকে সাড়ে ৯ টা পর্যন্ত কোনও কম্পিউটারে অ্যাক্সেস নেই। এখানে 5 রানের পর স্কোর are "ইকো" বটটি কোনও কারণে বাজে রাখা হয়েছিল (আমার ভুল হতে পারে, আমি এখনও তদন্ত করিনি)।
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
ধার
রেইনবোল্ট এবং পিটার টেলরকে কন্ট্রোলারের সাথে সহায়তার জন্য অনেক ধন্যবাদ।