টেস্ট ড্রাইভার • চ্যালেঞ্জ আলোচনা • অভিযাত্রী জমা দিন
( চিত্র উত্স )
বেশ কয়েকটি প্রতিদ্বন্দ্বী অ্যাডভেঞ্চারার ধনসম্পদের জন্য ধ্বংসস্তূপে অভিযান চালাচ্ছে তবে তারা কেবল একবারে এতটা বহন করতে পারে এবং তাদের সহ্য করার সীমা থাকতে পারে। তারা সর্বাধিক মূল্যবান ধন পেতে এবং চালিয়ে যেতে খুব ক্লান্ত হয়ে ওঠার আগেই বেরিয়ে যেতে চায়। তারা তাদের লুটপাটের শেননিগান থেকে যতটা সম্ভব ধনী হওয়ার চেষ্টা করছে।
গেমপ্লের
প্রতিটি অ্যাডভেঞ্চারার অন্ধকারের প্রথম ঘরে 1000 স্ট্যামিনা পয়েন্ট এবং তাদের ব্যাকপ্যাকে 50 কেজি জায়গা দিয়ে শুরু হয়।
গেমটি টার্ন-ভিত্তিক ফ্যাশনে পরিচালিত হয়, সমস্ত খেলোয়াড় একই সাথে তাদের পালা সমাধান করে। প্রতিটি পালা, আপনি নিম্নলিখিত ক্রিয়াগুলির মধ্যে একটি করতে পারেন:
- পাশের ঘরে চলে যান।
- আগের ঘরে চলে যান।
- ধন নিতে স্ট্যামিনা বিড করুন।
- একটি ধন ফেলে দিন।
কক্ষগুলির মধ্যে চলতে 10 টি স্ট্যামিনা প্রয়োজন হয় এবং আপনার ব্যাকপ্যাকটিতে বর্তমানে প্রতি 5 কেজি জন্য 1 টি গোল করা হয়। উদাহরণস্বরূপ, 3 কেজি ধনসম্পদ বহনকারী একজন অ্যাডভেঞ্চারারের জন্য 11 স্ট্যামিনা সরানো দরকার এবং 47 কেজি বহনকারী একজনকে 20 স্ট্যামিনা সরানো দরকার।
খসড়া বাদ দেওয়ার জন্য 1 টি স্ট্যামিনা প্রয়োজন।
ধ্বংসাবশেষ থেকে বেরিয়ে আসার পরে, খেলোয়াড় আর কোনও পালা নেবেন না।
যদি কোনও খেলোয়াড় এগুলির কোনও পদক্ষেপ নিতে না পারে (স্ট্যামিনার অভাব বা কোষাগারের অভাবের কারণে), তাদের অ্যাডভেঞ্চারার ক্লান্ত হয়ে মারা যায়, তাদের অধিষ্ঠিত ধনটিকে বর্তমানে অধিষ্ঠিত ঘরে intoেলে দেয়। একইভাবে, কোনও খেলোয়াড় যদি কোনও অবৈধ পদক্ষেপ নেওয়ার চেষ্টা করে, তবে তাদের অভিযাত্রী তার পরিবর্তে ফাঁদে পড়ে মারা যাবে, ফলস্বরূপ একই ধনাত্মক স্প্লাইজে পরিণত হবে।
আদেশ
ধনটির জন্য সর্বনিম্ন বিড 1 কেজি প্রতি 1 টি স্ট্যামিনা the ধনসাধ্য হওয়ার সম্ভাবনা বেশি হওয়ার জন্য আপনি অতিরিক্ত স্ট্যামিনা পয়েন্টগুলিকেও বিড করতে পারেন। যে স্ট্যামিনা বিড করা হয়েছিল তা ফলাফল কী তা বিবেচনা না করেই গ্রাস করা হয়।
একাধিক খেলোয়াড় একই ধন নেওয়ার জন্য বিড করে থাকলে, যে খেলোয়াড় সর্বাধিক বিড করে সে ধন পায়। যদি একাধিক খেলোয়াড় সর্বোচ্চ বিড করেন তবে তাদের কেউই এই ধনটি পাবেন না।
উইন কন্ডিশন
ট্রেজারের বৃহত্তম মোট মান সহ খেলোয়াড়টি বিজয়ী। টাই হওয়ার সম্ভাবনা কম থাকলে, বন্ধনগুলি সর্বনিম্ন মোট ওজনে যায়, তারপরে ক্ষুদ্রতম সংখ্যার, তারপরে সর্বাধিক মূল্যবান ধনটির মান, দ্বিতীয় সর্বাধিক মূল্যবান, তৃতীয় ... টাই না ভাঙার আগ পর্যন্ত। এখনও এই সময়ে একটি টাই থাকা সন্নিকট-অসম্ভব ইভেন্টে, পরীক্ষা চালক "এটিকে স্ক্রু করুন" বলে এবং বিজয়ী নির্বিচারে নির্ধারিত হয়।
টুর্নামেন্টের প্রসঙ্গে খেলোয়াড়রা 10 পয়েন্ট প্রাপ্ত প্রথম স্থান, 9 পয়েন্ট নিয়ে দ্বিতীয় স্থান, 8 পয়েন্ট সহ তৃতীয় স্থান ইত্যাদি ... মৃত খেলোয়াড় এবং অ্যাডভেঞ্চারারদের সাথে 0 পয়েন্ট অর্জন না করে।
ধ্বংসাবশেষ সম্পর্কে
- প্রতিটি ঘরে প্রাথমিকভাবে ⌊ r এর মধ্যে থাকেএবংট্রেজারে। (রুমের নম্বরটিকোথায়)
- নির্বিচারে অনেক কক্ষ রয়েছে, কেবল অ্যাডভেঞ্চারার স্ট্যামিনা এবং অন্বেষণে ইচ্ছুক দ্বারা সীমাবদ্ধ।
- প্রতিটি ধনটির আর্থিক মূল্য (পুরো $) এবং একটি ওজন (পুরো কেজিতে) থাকবে।
- ভাঙ্গনের গভীরে যাওয়ার সাথে সাথে ট্রেজারার আরও মূল্যবান এবং প্রচুর পরিমাণে ঝোঁক।
- কোষাগার উত্পন্ন করার জন্য নির্দিষ্ট সূত্রগুলি নিম্নরূপ: ( পাশা রোলগুলির জন্য স্বরলিপি ব্যবহার করে)
- সূত্রটি ব্যবহার করে প্রথমে ওজন তৈরি করা হয় (সর্বনিম্ন 1)
- ট্রেজার মান তারপর মাধ্যমে উৎপন্ন হয় (যেখানে রুম সংখ্যা এবং ওজন)
খেলোয়াড়দের কাছে দৃশ্যমান তথ্য
প্রতিটি ঘুরে, খেলোয়াড়গণ নিম্নলিখিত তথ্য পান:
- তারা বর্তমানে যে ঘরে রয়েছে তার সংখ্যা This এটি 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
এই বৈশিষ্ট্যাবলী সঙ্গে S:
name
: ট্রেজারের নাম (প্রসাধনী উদ্দেশ্যে)value
: the সালে ধনটির আর্থিক মান $weight
: কেজিতে ট্রেজারের ওজন
get_action
নিম্নলিখিত মান / নিদর্শনগুলির মধ্যে একটি ফেরত দেওয়া উচিত:
'next'
অথবা'previous'
পরবর্তী / পূর্ববর্তী কক্ষে যেতে'take', <treasure index>, <bid>
(হ্যাঁ, টুপল হিসাবে, যদিও কোনও ক্রম প্রযুক্তিগতভাবেও কাজ করবে) ঘরের ট্রেজার তালিকার প্রদত্ত সূচকে ট্রেজারে বিড করতে to উভয় যুক্তিই পূর্ণসংখ্যার হওয়া উচিত। ভাসমানগুলি গোল করা হবে।'drop', <inventory index>
প্রদত্ত সূচকে পাওয়া বাহিত ধনটি ফেলে দেওয়া। সূচকটি (স্বাভাবিকভাবে) পূর্ণসংখ্যা হওয়া উচিত।
অন্যান্য বিধিনিষেধ
- আপনি কেবলমাত্র সিউডোর্যান্ডমনেসের জন্য সূচনা করার সময় আপনাকে সরবরাহ করা এলোমেলো উদাহরণটি ব্যবহার করতে পারেন।
- আচরণগত nondeterminism পরিচয় করিয়ে দিতে পারে এমন অন্য যে কোনও কিছু অনুমোদিত নয়। নতুন উদ্ঘাটিত (এবং পরীক্ষা চালকের সম্ভাব্য বাগগুলি) পরীক্ষায় সহায়তা করার জন্য একই বীজ দেওয়া হলে এখানে বটগুলি অভিন্নরূপে আচরণ করা inte কেবল মহাজাগতিক বিকিরণের ফলে যে কোনও বিচ্যুতি / অবিচ্ছিন্নতার কারণ হওয়া উচিত।
- মনে রাখবেন যে হ্যাশ কোডগুলি পাইথন 3 এ এলোমেলোভাবে করা হয়েছে, তাই
hash
কোনও সিদ্ধান্ত নেওয়ার জন্য ব্যবহার করার অনুমতি নেই।dict
সিদ্ধান্তগুলি পুনরাবৃত্তির অর্ডার ব্যবহার করার সময়ও ঠিক আছে কারণ পাইথন ৩.6 থেকে অর্ডারে সামঞ্জস্য রয়েছে।
- আপনি
ctypes
হ্যাকস বাinspect
স্ট্যাক ভুডু (বা অন্য কোনও পদ্ধতি) ব্যবহার করে পরীক্ষা চালককে অবরুদ্ধ করতে পারবেন না । সেই মডিউলগুলির সাথে আপনি করতে পারেন এমন কিছু চিত্তাকর্ষকভাবে ভীতিজনক জিনিস রয়েছে। দয়া করে না।- প্রতি বট প্রতিরক্ষামূলক অনুলিপিগুলি এবং এর প্রাকৃতিক অপরিবর্তনীয়তাগুলির মাধ্যমে যুক্তিসঙ্গতভাবে ভালভাবে স্যান্ডবক্সযুক্ত
namedtuple
হয় তবে কিছু অপ্রয়োজনীয় ফাঁকা / শোষণ রয়েছে। - থেকে অন্যান্য কার্যকারিতা
inspect
এবংctypes
যতদিন তন্ন তন্ন হিসাবে ব্যবহার করা যেতে পারে পাশকাটিয়ে নিয়ামক কার্যকারিতা ব্যবহার করা হয়। - আপনার বর্তমান গেমের অন্যান্য বটের উদাহরণ দখল করার কোনও পদ্ধতির অনুমতি নেই।
- প্রতি বট প্রতিরক্ষামূলক অনুলিপিগুলি এবং এর প্রাকৃতিক অপরিবর্তনীয়তাগুলির মাধ্যমে যুক্তিসঙ্গতভাবে ভালভাবে স্যান্ডবক্সযুক্ত
- বটগুলির একক পরিচালনা করা উচিত এবং কোনও উদ্দেশ্যে কোনওভাবেই অন্য কোনও বটের সাথে সমন্বয় না করতে পারে। এর মধ্যে বিভিন্ন লক্ষ্য সহ দুটি বট তৈরি করা অন্তর্ভুক্ত যা অন্যের সাফল্যের জন্য নিজেকে ত্যাগ করে। একবার যদি 10 টিরও বেশি প্রতিযোগী আসে, আপনি একই গেমটিতে দু'টি বট দেওয়ার নিশ্চয়তা পাবেন না এবং অ্যাডভেঞ্চারার নামগুলি বট শ্রেণির কোনও ইঙ্গিত দেয় না, সুতরাং এই ধরণের কৌশল যাইহোকই সীমাবদ্ধ।
- মৃত্যুদন্ড কার্যকর করার সময়টিতে বর্তমানে কোনও কঠোর বাধা নেই, তবে টুর্নামেন্টগুলি খুব বেশি সময় নিতে শুরু করলে ভবিষ্যতে আমি এটিকে কঠোর-সীমাবদ্ধ করার অধিকার সংরক্ষণ করি। যুক্তিযুক্ত হোন এবং 100 মিমি এর নীচে মোড় প্রক্রিয়াজাতকরণ চালিয়ে যাওয়ার চেষ্টা করুন , কারণ আমি এটিকে প্রান্তিকের নীচে সীমাবদ্ধ করার প্রয়োজনের পূর্বেও ধারণা করি না। (সমস্ত বট প্রতি পালা প্রতি 100 মিমি নিলে টুর্নামেন্টগুলি প্রায় 2 ঘন্টার মধ্যে চলবে))
- আপনার বট শ্রেণীর নাম অবশ্যই সমস্ত জমা দেওয়ার মধ্যে স্বতন্ত্রভাবে নামকরণ করা উচিত।
- আপনি গেমসের মধ্যে কিছু মনে করতে পারে না। (তবে, আপনি পালা মধ্যে জিনিস মনে রাখতে পারেন )
- Sys.modules সম্পাদনা করবেন না। যে কোনও বাহ্যিক উদাহরণের ভেরিয়েবলকে ধ্রুবক হিসাবে বিবেচনা করা উচিত।
- আপনি আপনার নিজের সহ কোনও বটের কোড প্রোগ্রামক্রমে পরিবর্তন করতে পারবেন না।
- এর মধ্যে আপনার কোড মোছা এবং পুনরুদ্ধার করা অন্তর্ভুক্ত। এটি ডিবাগিং এবং টুর্নামেন্টগুলিকে আরও প্রবাহিত করা।
- যে কোনও কোড যা নিয়ামককে ক্রাশের কারণ ঘটায় তা অবিলম্বে অযোগ্য ঘোষণা করা হবে। যদিও বেশিরভাগ ব্যতিক্রম ধরা পড়বে, কিছু কিছু পিছলে যেতে পারে এবং সেগফাল্টগুলি অপরিবর্তনীয়। (হ্যাঁ, আপনি পাইথনে সেগফল্ট করতে পারেন ধন্যবাদ আপনাকে
ctypes
)
জমা
উত্তর স্ক্র্যাপিংয়ে সহায়তা করার জন্য, উত্তরের উপরের অংশে আপনার বটের নামটি একটি দিয়ে নির্দেশ করুন এবং আপনার উত্তরটিতে #Header1
কমপক্ষে একটি কোড ব্লক অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন (আপনার উত্তরের মধ্যে কেবল প্রথমটি ব্যবহৃত হবে)। আপনার কোনও আমদানি বা ডকাস্ট্রিং অন্তর্ভুক্ত করার দরকার নেই, কারণ এগুলি স্ক্র্যাপার দ্বারা স্বয়ংক্রিয়ভাবে যুক্ত হবে।
আমি বিশদ এবং বোধগম্য ব্যাখ্যা সহ উত্তরগুলিকে উজ্জীবিত করতে আরও ঝোঁক হয়ে পড়ব। অন্যরাও একই রকম আচরণ করার সম্ভাবনা রয়েছে।
মোটামুটিভাবে বলতে গেলে, আপনার উত্তরটি এমন কিছু ফর্ম্যাট করা উচিত:
# Name of Bot
Optional blurb
#imports go here
class BotName(Adventurer):
#implementation
Explanation of bot algorithm, credits, etc...
(হিসাবে রেন্ডার)
বট নাম
Ptionচ্ছিক ব্লাব
#imports go here class BotName(Adventurer): #implementation
বট অ্যালগরিদম, ক্রেডিট ইত্যাদির ব্যাখ্যা ...
স্থানীয়ভাবে টেস্ট ড্রাইভার চালানো
আপনার পাইথন 3.7+ প্রয়োজন হবে এবং আমি আপনাকে পাইপের মাধ্যমেও ইনস্টল করার পরামর্শ দিচ্ছি tabulate
। জমা দেওয়ার জন্য এই পৃষ্ঠাটি স্ক্র্যাপ করার জন্য অতিরিক্ত প্রয়োজন lxml
এবং requests
। সেরা ফলাফলের জন্য আপনার এএনএসআই রঙ পালানোর পক্ষে একটি টার্মিনালও ব্যবহার করা উচিত। উইন্ডোজ 10 এ কীভাবে সেট আপ করবেন সে সম্পর্কে তথ্য এখানে পাওয়া যাবে ।
আপনার বটকে একই ডিরেক্টরিতে ruins.py
( ruins_bots
ডিফল্টরূপে) উপ- ডিরেক্টরিতে একটি ফাইলের সাথে যুক্ত করুন from __main__ import Adventurer
এবং মডিউলটির শীর্ষে যুক্ত করতে ভুলবেন না । এই মডিউল যোগ করা হয় যখন স্ক্র্যাপার আপনার জমা ডাউনলোড, এবং যখন এটা স্পষ্টভাবে হল hacky, এই নিশ্চিত করুন যে আপনার বট উপার্জন সঠিকভাবে অ্যাক্সেস আছে অধিকাংশ সহজবোধ্য উপায় Adventurer
।
সেই ডিরেক্টরিতে সমস্ত বটগুলি রানটাইমের সময় গতিশীলভাবে লোড হবে, সুতরাং আর কোনও পরিবর্তন প্রয়োজন হবে না।
টুর্নামেন্ট
চূড়ান্ত বিজয়ী প্রতিটি গেমটিতে 10 টি পর্যন্ত বট নিয়ে একটি সিরিজে গেম নির্ধারিত হবে। যদি 10 টিরও বেশি জমা থাকে তবে প্রতিটি বট 20 টি গেম না খেলে অবধি শীর্ষস্থানীয় 10 বটগুলি 10 টি গ্রুপে বিভক্ত করে নির্ধারিত হবে। শীর্ষস্থানীয় 10 বটগুলি এই গ্রুপ থেকে রিসেট স্কোরগুলির সাথে নির্বাচিত হবে এবং প্রথম স্থানের বট দ্বিতীয় স্থানের বোটের উপরে 50 পয়েন্টের লিড অর্জন না করা পর্যন্ত বা 500 টি গেম না হওয়া পর্যন্ত গেম খেলবে।
কমপক্ষে 10 টি জমা দেওয়া না হওয়া অবধি খালি স্লটগুলি "ড্রিংকার্ডস" দিয়ে পূর্ণ হবে যা এলোমেলোভাবে ধ্বংসাবশেষের মধ্য দিয়ে ঘুরে বেড়ায় এবং (এবং মাঝে মাঝে ড্রপ) এলোমেলো ট্রেজারি গ্রহণ করে যতক্ষণ না তারা স্ট্যামিনা থেকে বেরিয়ে আসে এবং প্রস্থান করার জন্য অবলম্বন করতে হয়।
নতুন জমা দেওয়া থাকলে টুর্নামেন্টগুলি সাপ্তাহিক পুনরায় চালানো হবে। এটি কোনও ওপেন কোথ চ্যালেঞ্জ যার কোনও শেষের তারিখ নেই।
লিডারবোর্ড
রান থেকে 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 এপ্রিল: একটি দম্পতি নিয়ম আপডেট / স্পষ্টকরণ
আপডেট - এপ্রিল 17: অন্যান্য বটের কোড পরিবর্তন করার মতো ঘৃণ্য ক্রিয়াকলাপের কয়েকটি উল্লেখযোগ্য প্রান্তকে নিষিদ্ধ করা ban
আপডেট - 4 মে: স্নেফারকে পেছনের দিকগুলি সম্পূর্ণরূপে ধ্বংস করার জন্য অনুদান প্রদান করা হয়েছে। অভিনন্দন!
pip
ইনস্টল করে থাকেন এবং চালু করেন PATH
(যা নতুন ইনস্টলেশন AFAIK এর জন্য ডিফল্ট) তবে উইন্ডোজ থেকে আপনি pip install modulename
কমান্ড প্রম্পটে চালাতে পারেন । অন্যান্য পরিস্থিতিতে (যা সম্পর্কে আমি জানি না), পাইপে যান , প্রয়োজনীয় মডিউলটি অনুসন্ধান করুন এবং একটি বিকল্প চয়ন করুন।