এটি জুলাই মাসে ক্রিসমাস, সুতরাং ভার্চুয়াল সাদা হাতির উপহার বিনিময়ের চেয়ে ভাল আর কীভাবে উদযাপন করা যায়!
পাহাড়ের এই কিংয়ের জন্য, আপনাকে অবশ্যই একটি বট তৈরি করতে হবে যা একটি সাদা এলিফ্যান্ট এক্সচেঞ্জ সিমুলেশনে খেলতে পারে, এটি সর্বোচ্চ মূল্যবান বর্তমানটি পাওয়ার চেষ্টা করে।
খেলার নিয়ম
- গেমটি বিভিন্ন রাউন্ডে খেলা হবে, প্রতিটিটি একটি পরিবর্তনশীল সংখ্যক টার্ন দিয়ে তৈরি।
- রাউন্ড সেটআপ : গেমের খেলোয়াড় হিসাবে যতগুলি উপহার থাকবে, প্রত্যেকটির মূল্য নির্ধারিতভাবে এলোমেলোভাবে সমান [0 ... 1) হয়, বর্তমানটি "খোলার" অবধি এই মানটি অজানা থাকে। খেলোয়াড়দের একটি কাতারে এলোমেলো ক্রমে রাখা হবে। প্রথম প্লেয়ারটি কাতারের সামনে থেকে পপ করা হবে।
- যখন এটি কোনও প্লেয়ারের পালা, তখন তারা কোনও উপহার খুলতে পারে বা অন্য খেলোয়াড়ের বর্তমানকে চুরি করতে পারে, যার প্লেয়ারটির বর্তমান চুরি হয়েছিল তার কাছে ফিরে আসে।
- প্রতিটি উপস্থিতি 3 বার পর্যন্ত চুরি হতে পারে।
- সবেমাত্র আপনার কাছ থেকে চুরি হওয়া প্লেয়ার থেকে আপনি চুরি করতে পারবেন না।
- প্রতিটি খেলোয়াড়ের একসাথে কেবল একজন উপস্থিত থাকতে পারে।
- কোনও উপস্থিতি খোলার পরে কাতারের সামনের অংশ থেকে পপড পরবর্তী খেলোয়াড়ের অগ্রিম খেলুন। এই পরবর্তী খেলোয়াড় হবেন যিনি এখনও ঘুরেনি।
- রাউন্ড শেষ : সমস্ত উপহার খোলার পরে, রাউন্ডটি শেষ হয় এবং প্রতিটি খেলোয়াড়ের কাছে থাকা বর্তমানের মানটি সেই খেলোয়াড়ের স্কোরের সাথে যুক্ত হয়। একটি নতুন রাউন্ড শুরু হয়, প্রতিটি প্লেয়ারের এখন কোনও উপস্থিতি নেই এবং প্লেয়ারের অর্ডারটি বদলে গেছে।
- খেলা শেষ : যখন অন্তত একটি প্লেয়ার স্কোর এ গেমের শেষ হয়ে যাবে
100, 500 পয়েন্ট বিজয় উপহার সর্বোচ্চ মোট মূল্য সঙ্গে প্লেয়ার থেকে পুরস্কার প্রদান করা হচ্ছে।
আইনসংগ্রহ
সমস্ত জমাটি পাইথন 3.7 এর সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। আপনাকে অবশ্যই এমন একটি ক্লাস লিখতে হবে যা থেকে সরাসরি উত্তরাধিকার সূত্রে প্রাপ্ত WhiteElephantBot
। এই ক্ষেত্রে:
class FooBot(WhiteElephantBot):
# Your implementation here
আপনি আপনার বট ক্লাসে একটি __init__
পদ্ধতি সরবরাহ করতে পারেন (যা একটি যুক্তি গ্রহণ করে name
), যা অবশ্যই কল করবে super().__init__(name)
। আপনার শ্রেণীর অবশ্যই take_turn
এই ক্রমে নিম্নলিখিত যুক্তিগুলির প্রত্যাশা করার একটি পদ্ধতি থাকতে হবে :
players
: সমস্ত খেলোয়াড়ের কাছে এখনও উপহার নেই এমন প্লেয়ারের নামের তালিকা turnpresents
: এমন একটি অভিধান যা খেলোয়াড়ের নামটিকে 2-টিপলগুলিতে ম্যাপ করে যে সেই খেলোয়াড়ের বর্তমান মূল্য রয়েছে এবং বর্তমান যে পরিমাণটি চুরি হয়েছে তার সংখ্যা রয়েছে। এটিতে কেবল এমন খেলোয়াড়দের অন্তর্ভুক্ত করা হবে যারা বর্তমানে উপহার রাখছেন।just_stole
: শেষ করা পদক্ষেপটি যদি চুরি হয়ে থাকে তবে এই খেলোয়াড়ের নাম হবে যিনি কেবল চুরি করেছিলেন। তা না হলে তা হবেNone
।
প্রতিটি যুক্তি অপরিবর্তনীয় বা একটি নতুন অবজেক্ট হবে যাতে তাদের কোনওরূপে পরিবর্তন আনলে গেমটির প্রভাব পড়বে না। আপনি যদি চান তবে আপনি যে কোনও যুক্তির অনুলিপি রাখতে পারেন।
এর উদাহরণ উদাহরণ presents
:
{
'Alice': (0.35, 0),
'Bob': (0.81, 2),
'Charlie': (0.57, 1)
}
আপনার take_turn
পদ্ধতিটি আপনি যে খেলোয়াড়ের কাছ থেকে চুরি করতে চান বা None
বর্তমান খুলতে চান তার নাম ফিরিয়ে দেওয়া উচিত । যদি একটি ব্যতিক্রম উত্থাপন, অন্য কিছু ফেরৎ চেয়ে str
বা None
, অথবা একটি প্লেয়ার আপনার কাছ থেকে চুরি করতে পারবে না নামে, আপনি ডিফল্ট দ্বারা একটি উপহার খুলবে।
আপনার কনস্ট্রাক্টরকে প্রতিটি রাউন্ডের শুরুতে ডাকা হবে, যাতে আপনি রাউন্ড থেকে রাউন্ডে রাষ্ট্রের কথা মনে রাখবেন না।
উত্তরাধিকার সূত্রে WhiteElephantBot
, আপনার কাছে এমন একটি steal_targets
পদ্ধতিতে অ্যাক্সেস থাকবে যা উপহারসামগ্রী গ্রহণ করবে just_stole
এবং আপনি যে খেলোয়াড়দের কাছ থেকে চুরি করতে পারবেন তাদের নামের একটি তালিকা ফিরিয়ে দেবে।
আপনার স্ক্রিপ্টের যে কোনও মডিউলগুলির প্রয়োজন আপনার প্রবেশের শীর্ষে আমদানি করতে হবে।
পরীক্ষামূলক চালক
পরীক্ষার ড্রাইভারটি এখানে পাওয়া যাবে । from white_elephant import WhiteElephantBot
আপনার পোস্ট করা উত্তরে আপনাকে অন্তর্ভুক্ত করার দরকার নেই , তবে স্থানীয় মডিউলটি এটি করতে হবে।
বেসলাইন প্রতিযোগী
- র্যান্ডম : এলোমেলোভাবে পছন্দ করে যে নতুন উপস্থিত খুলতে হবে বা চুরি করতে হবে, চুরির লক্ষ্যটি এলোমেলোভাবে বেছে নেওয়া হয়েছে।
- লোভী : সবচেয়ে মূল্যবান বর্তমানকে চুরি করুন যা চুরি যায়। যদি কোনও উপহার চুরি করা যায় না, একটি উপস্থাপনা খুলুন।
- সুন্দর : সর্বদা একটি নতুন উপস্থিত খোলে। কখনও চুরি করে না।
অতিরিক্ত বিধি
- সমস্ত ব্যতিক্রম ধরা আপনার দায়িত্ব। যদি আপনার শ্রেণি ব্যতিক্রম ধরতে ব্যর্থ হয় তবে তা অযোগ্য ঘোষণা করা হবে। তদতিরিক্ত, দয়া করে কীবোর্ড ইন্টারটার্পগুলি ধরবেন না।
- গেমগুলির মধ্যে রাষ্ট্র সাশ্রয় করতে অক্ষমতার বাইপাস করতে ফাইল বা অন্যান্য পদ্ধতি ব্যবহার করবেন না। আপনি উদাহরণস্বরূপ, কোনও মিডল-রানে একটি নিউরাল নেটওয়ার্ক অবস্থা সংরক্ষণ করতে পারবেন না।
- আপনার বটটি অবশ্যই শ্রেণি কোড এবং সম্পর্কিত ধ্রুবকগুলির মধ্যে স্ব-অন্তর্ভুক্ত থাকতে হবে।
- আপনি কেবল স্ট্যান্ডার্ড লাইব্রেরি আমদানি ব্যবহার করতে পারেন।
- কোনও কঠোর পারফরম্যান্সের প্রয়োজন নেই। যুক্তিযুক্ত ও বুদ্ধিমান হন। যদি পারফরম্যান্স কোনও সমস্যা হয়ে যায়, আমি সময় সীমা যুক্ত করার অধিকার সংরক্ষণ করি।
প্রতি ব্যক্তি একটি প্রবেশ।আপনি যদি একাধিক এন্ট্রি জমা দেন তবে আপনার বটগুলি একসাথে কাজ করতে পারে না। আমি আপাতত ব্যক্তি প্রতি একাধিক এন্ট্রি দেওয়ার অনুমতি দিচ্ছি, যদিও সমস্যা হয়ে গেলে আমি পরে এটি পুনরায় বন্ধ করতে পারি।- এটি কোনও স্বতন্ত্র সমাপ্তির তারিখ সহ একটি উন্মুক্ত প্রতিযোগিতা। যখন আমি উল্লেখযোগ্য পরিবর্তনগুলি করেছি তখন এটিকে পুনরায় চালু করা হবে।
এডিআইটি 1: 100 থেকে 500 পর্যন্ত জয়ের স্কোর পরিবর্তন হয়েছে যাতে র্যাঙ্কিং আরও সুসংগত হয়। পরীক্ষা ড্রাইভারের একটি নতুন বাগফিক্স রয়েছে এবং এটি জয়ের স্কোর পরিবর্তনগুলিও প্রতিবিম্বিত করে।
EDIT2: প্রয়োজনীয় আমদানির বিষয়ে নোট পরিষ্কার করা।
লিডারবোর্ড (আগস্ট 8, 2018 হিসাবে)
- স্যাম্পেলবট (500.093)
- লাস্টমিনেটবট (486.163)
- রবিনহুড (463.160)
- অডডটড (448.825)
- লোভীবোট (438.520)
- সেকেন্ডপ্লেসবট (430.598)
- থ্রেশহোল্ডবট (390.480)
- জুয়াড়ি (৩১৩.৩62২)
- নাইসবট (২5৫.৫3636)
- র্যান্ডমবট (256.172)
- গুডসামারিটন (136.298)