চূড়ান্ত সামুরাই শোডাউন


37

বিজ্ঞপ্তি: এই চ্যালেঞ্জটি শেষ হয়েছে। এর অর্থ হ'ল গ্রিন চেকমার্ক, যা তাদের প্রবেশের জন্য C5H8NNaO4 কে ভূষিত করা হয়েছে পর্যবেক্ষক কোনও নতুন উত্তরে সঞ্চারিত হবে না।

আপনি এখনও নতুন এন্ট্রি জমা দিতে পারেন, তবে নতুন টুর্নামেন্টে দেরি হতে পারে কারণ আমি আর নতুন এন্ট্রি সক্রিয়ভাবে পরীক্ষা করছি না।

ভূমিকা

এই চ্যালেঞ্জটিতে আপনি আলটিমেট সামুরাই শোডাউন আলটিমেট সংস্করণ বিশেষ সংস্করণ ২.০ এক্স আলফা ওমেগা টার্বো (বা সংক্ষেপে কেবলমাত্র আলটিমেট সামুরাই শোডাউন ) শীর্ষক একটি তোরণ গেম খেলছেন । আপনার বিরোধীরা? প্রোগ্রামিং প্রহেলিকা ও কোড গল্ফের অন্য সদস্যরা ছাড়া আর কেউ নয়!

আপনি যেমন কোনও পিপিসি আরকেড গেম থেকে আশা করতে পারেন, আপনি সরাসরি চূড়ান্ত সামুরাই শোডাউন খেলবেন না , বরং একটি প্রোগ্রাম লিখুন যা আপনার জন্য গেমটি খেলবে। এই প্রোগ্রামটি অন্য ব্যবহারকারীদের একযোগে একের মধ্যে জমা দেওয়া কর্মসূচির বিরুদ্ধে লড়াই করবে। সর্বাধিক দক্ষ প্রোগ্রামটি পিপিসিজির চূড়ান্ত সামুরাইয়ের মুকুটযুক্ত হবে এবং কিংবদন্তির গ্রিন টিক দেওয়া হবে।

খেলা বিবরণ

এই বিভাগটি গেমের পিছনে যান্ত্রিকগুলি বর্ণনা করে।

বিজয় শর্ত

একটি ম্যাচ দুটি সমুরাই নিয়ে গঠিত যা একে অপরের বিরুদ্ধে মুখোমুখি হয়। প্রতিটি সামুরাই 20 টি হিট পয়েন্ট এবং 1 সম্মান দিয়ে প্রতিটি ম্যাচ শুরু করে । একটি সামুরাই জিততে পারে যদি তার প্রতিপক্ষ মারা যায় এবং সে এখনও বেঁচে থাকে। দুটি পদ্ধতি আছে যার দ্বারা একটি সামুরাই মারা যেতে পারে:

  1. যদি কোনও সামুরাইয়ের হিট পয়েন্টগুলি 0 তে নামানো হয় তবে সে মারা যাবে।
  2. যদি কোনও সামুরাই তাদের নিজস্ব সম্মান 0 এর নীচে নিয়ে আসে তবে দ্বন্দ্বের ক্ষেত্রে অসাধু আচরণ করার জন্য দেবতারা তাকে মেরে ফেলবেন।

দেবতাদের দ্বারা আঘাত করা হিট পয়েন্টগুলি কমিয়ে 0 এর চেয়ে বেশি অগ্রাধিকার দেয়, সুতরাং এক পরিস্থিতিতে যখন একটি সামুরাই 0 স্বাস্থ্য পয়েন্টে এবং অন্যটি -1 সম্মানে থাকে, 0 স্বাস্থ্য পয়েন্ট সহ সামুরাই জিতবে। সামুরাই উভয়ই -১ সম্মানে রয়েছে এমন পরিস্থিতিতে তারা উভয়ই দেবতাদের দ্বারা হতাশ হয়ে পড়ে এবং খেলাটি ড্র হয়।

একটি ম্যাচে 500 টি পর্যন্ত টার্ন থাকে । যদি সমস্ত ৫০০ টার্ন পাস হয়ে যায় এবং ম্যাচের সিদ্ধান্ত না নেওয়া হয় (সামুরাইও মারা যায় না), দেবতারা বিরক্ত হয়ে সামুরাই উভয়কেই আঘাত করে, ফলস্বরূপ একটি ড্র হয় in

ক্রিয়াকলাপ

প্রতিটি ঘুরে, সামুরাই অবশ্যই নীচের একটি ক্রিয়া সম্পাদন করতে হবে:

W

সামুরাই অপেক্ষা করবে এবং কোন কাজ করবে না। এটি তাকে দুর্দান্ত দেখায় কিন্তু তার প্রতিপক্ষকে পরাস্ত করতে সহায়তা করে না। এটি ডিফল্ট ক্রিয়াও।

B

সমুরাই সম্মানজনক ফ্যাশনে তার প্রতিপক্ষের কাছে মাথা নত করবে। এটি দেবতাদের সন্তুষ্ট করে এবং এইভাবে সামুরাই 1 সম্মান অর্জন করবে। সম্মান আপনার সামুরাইয়ের সাফল্যের জন্য অতীব গুরুত্বপূর্ণ কারণ অনার এই গেমটির মূলত "রিসোর্স" all অনার থেকে সমস্ত পদক্ষেপ আলাদা হয়ে যায় Bএবং Wঅনার হ্রাস করতে পারে। এছাড়াও, যদি কোনও সামুরাই 7 টি সম্মান বা তার বেশি অর্জন করে তবে তাকে তরোয়াল অফ theশ্বরের উপাসনা দেওয়া হয় । এর প্রভাবগুলি নীচে বর্ণিত হয়েছে।
তবে, আপনার প্রতিপক্ষের কাছে মাথা নত করা আপনাকে উন্মুক্ত করে দেয় যদি আপনার প্রতিপক্ষ তার তরোয়াল দিয়ে আপনাকে আঘাত করার সিদ্ধান্ত নেয়, সুতরাং আপনি যখন নমটি বেছে নেবেন তখন সাবধান হন।

G

সামুরাই কোনও প্রতিরক্ষামূলক অবস্থানে প্রবেশ করবে এবং যে কোনও তরোয়াল হামলা থেকে রক্ষা করবে। এই পদক্ষেপটি সাফল্যের সাথে সমস্ত তরোয়াল স্ট্রাইককে এমনকি দেবতার তরবারির সাহায্যে ব্লক করে দেবে ।
যাইহোক, দেবতারা একটি অত্যধিক প্রতিরক্ষামূলক সামুরাইকে ভ্রমন করেছিলেন, সুতরাং এই পদক্ষেপটি 1 সম্মান গ্রাস করবে যদি তাত্ক্ষণিক পূর্ববর্তী বাঁকটিতে সামুরাইয়ের ক্রিয়াও রক্ষা করা হত। এটি অন্যথায় অনার গ্রহণ করে না।

I

সামুরাই তার তরোয়ালটি তার স্ক্যাবার্ড থেকে দ্রুত টেনে তার প্রতিপক্ষকে আঘাত করার চেষ্টা করবে। সমুরাইয়ের যদি 7 টি সম্মান বা তার বেশি হয়, তবে তিনি তার নিয়মিত তরোয়ালটির পরিবর্তে Godশ্বরের তরোয়ালটি ব্যবহার করবেন। এই পদক্ষেপটি 1 অনার গ্রহণ করে।
দ্রুত অঙ্কন হ'ল একটি দ্রুত ধর্মঘট যা ধীরে ধীরে ওভারহেড আক্রমণগুলিকে পরাজিত করবে, তবে এটি প্যারিসের বিপক্ষে হারাবে। যদি ধর্মঘট সফলভাবে সংযুক্ত হয় তবে এটি 1 টি ক্ষতি বা will শ্বরের তরবারির সাথে 2 টি ক্ষতি করতে পারে ।

P

সমুরাই যে কোনও আগত আক্রমণকে তদন্ত করার চেষ্টা করবে, তারপরে তার নিজের আক্রমণ চালাবে। সমুরাইয়ের যদি 7 টি সম্মান বা তার বেশি হয়, তবে তিনি তার নিয়মিত তরোয়ালটির পরিবর্তে Godশ্বরের তরোয়ালটি ব্যবহার করবেন। এই পদক্ষেপটি 1 অনার গ্রহণ করে।
প্যারি দ্রুত স্ট্রাইকগুলির বিরুদ্ধে একটি ভাল চালাকি, তবে ধীর ওভারহেড আক্রমণ দ্বারা এটি অত্যধিক শক্তিযুক্ত হবে। যদি ধর্মঘট সফলভাবে সংযুক্ত হয় তবে এটি 1 টি ক্ষতি বা will শ্বরের তরবারির সাথে 2 টি ক্ষতি করতে পারে ।

O

সামুরাই তার প্রতিপক্ষকে ধীরে ধীরে ওভারহেড আক্রমণ দিয়ে আঘাত করার চেষ্টা করবে। সমুরাইয়ের যদি 7 টি সম্মান বা তার বেশি হয় তবে তিনি তার নিয়মিত তরোয়ালটির পরিবর্তে Godশ্বরের তরোয়ালটি ব্যবহার করবেন। এই পদক্ষেপটি 1 সম্মান গ্রাস করে।
ওভারহেড স্ট্রাইক প্যারিসকে কাটিয়ে উঠতে পারে, তবে দ্রুত স্ট্রাইকগুলির বিরুদ্ধে এটি হারাবে। যদি ধর্মঘট সফলভাবে সংযুক্ত হয় তবে এটি 1 টি ক্ষতি বা will শ্বরের তরবারির সাথে 2 টি ক্ষতি করতে পারে ।

Godশ্বরের তরোয়াল

সম্মানের সাথে একটি সামুরাই যা or বা ততোধিক God শ্বরের তরবারি ব্যবহারের ক্ষমতা অর্জন করে । যদি তার অনার 7 এর নিচে হ্রাস করা হয় তবে তরোয়াল অফ theশ্বরের উপাসনা করার ক্ষমতা তার কাছ থেকে বাতিল হয়ে যাবে। দেবতাদের সোর্ড পরিবর্তে 2 ক্ষতি 1 পুলিশ।

দেবতাদের সোর্ড স্ট্রাইক একটি তলোয়ার ধর্মঘট এটি সচরাচর পরাজিত করবে না সর্বনাশ অনুমতি দেয় না। উদাহরণস্বরূপ, sশ্বরের প্যারিগুলির একটি তরোয়াল এখনও একটি সাধারণ ওভারহেড স্ট্রাইকের কাছে হারাবে এবং quick শ্বরের দ্রুত তরোপের একটি তরোয়াল কোনও সাধারণ দ্রুত ড্রকে পরাভূত করবে না। প্রকৃতপক্ষে, দেবতাদের তথাকথিত তরোয়াল আসলে সমস্ত শক্তিশালী নয় - সম্ভবত এটি দেবতাদের দ্বারা নির্মিত একটি মহাজাগতিক রসিকতা ...

মিথস্ক্রিয়া সারণী

নীচের স্ট্যাক স্নিপেটে একটি টেবিল রয়েছে যা দুটি সামুরাই গ্রহণ করতে পারে বিভিন্ন ক্রিয়াকলাপের সমস্ত সম্ভাব্য ফলাফলকে স্পষ্টভাবে তালিকাভুক্ত করে। এটি দেখতে, "কোড স্নিপেট দেখান" এ ক্লিক করুন, তারপরে "রান কোড স্নিপেট" ক্লিক করুন।

প্রোগ্রাম যোগাযোগ

টুর্নামেন্টটি পরিচালনার সুবিধার্থে, "দেবতাদের" ভূমিকায় অভিনয় করার জন্য একটি কন্ট্রোলার প্রোগ্রাম লেখা হয়েছিল - এটি সম্মান এবং স্বাস্থ্যের রেকর্ড রাখে এবং সে অনুযায়ী সামুরাইকে আঘাত করে। এই বিভাগটি বর্ণনা করে যে কীভাবে আপনার প্রোগ্রামটি নিয়ন্ত্রণকারী প্রোগ্রামের সাথে যোগাযোগ করবে।

ইনপুট বিবরণ

কন্ট্রোলার প্রোগ্রামটি আপনার প্রোগ্রামটিকে কমান্ড লাইন থেকে এভাবে কল করবে:

<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>

কোথায়:

  • <command>আপনার প্রোগ্রামটি চালানোর জন্য প্রয়োজনীয় আদেশটি। উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটি কোনও ফাইলে থাকে super_sentai.plতবে কমান্ডটি সম্ভবত perl super_sentai.pl

  • <history>আপনার করা চালগুলির ইতিহাস। উদাহরণস্বরূপ, এর WWBPঅর্থ হ'ল আপনি দু'বার অপেক্ষা করেছেন, একবার নত হয়েছিলেন এবং একবার পার করেছেন।

  • <enemy_history>আপনার শত্রু তৈরি চালানো ইতিহাস। উদাহরণস্বরূপ, এর BBBIঅর্থ হ'ল আপনার শত্রু তিনবার রুকু করেছে এবং একটি দ্রুত ড্র করেছে।

  • <your_health> আপনার বর্তমান স্বাস্থ্য।

  • <enemy_health> শত্রুদের বর্তমান স্বাস্থ্য।
  • <your_honour> আপনার বর্তমান সম্মান।
  • <enemy_honour> শত্রুদের বর্তমান সম্মান।

প্রথম টার্নের জন্য, historyএবং enemy_historyখালি থাকবে, সুতরাং আপনার প্রোগ্রামটি ঠিক এই জাতীয় শেষ চারটি যুক্তি দিয়ে ডাকা হবে:

<command> <your_health> <enemy_health> <your_honour> <enemy_honour>

দয়া করে এটির জন্য প্রস্তুত থাকুন!

বিস্মিত পাঠকরা লক্ষ্য করতে পারেন যে দু'টি সমুরাইয়ের সম্মান ও স্বাস্থ্য সরবরাহকারী চারটি যুক্তি কিছুটা হলেও অতিমাত্রায় রয়েছে; যেহেতু এটি একটি নিখুঁত তথ্য গেম, সামুরাইয়ের সম্মান এবং স্বাস্থ্য কেবল ইতিহাসের সাহায্যে নির্ধারণ করা যায়।

এই মানগুলি সুবিধার্থে সরবরাহ করা হয় যাতে আপনাকে ইতিহাসের যুক্তিগুলি পার্স করতে না হয়। এটি সাধারণ কৌশল বাস্তবায়নের জন্য কার্যকর প্রমাণিত হওয়া উচিত, যেমন আপনার অনার 0 হলে আক্রমণ না করা।

আউটপুট বিবরণ

একটি কার্য নির্বাচন করার জন্য, আপনার প্রোগ্রামের আউটপুট এক উচিত W, B, G, I, P, অথবা Oমানক আউটপুটে, কি কর্ম বানাতে চান উপর নির্ভর করে। যদি আপনার প্রোগ্রামটি 1000 মিটারের মধ্যে কোনও কিছু আউটপুট না দেয় তবে এটি বন্ধ হয়ে যাবে এবং আপনার প্রোগ্রামটি আউটপুট হয়ে গেলে এমন আচরণ করা হবে W

যদি আপনার প্রোগ্রামটি একাধিক বর্ণের আউটপুট দেয় তবে কেবলমাত্র প্রথম অক্ষরটি বিবেচনা করা হবে - সুতরাং আউটপুটিং আউটপুট Parryদেওয়ার সমান হবে P

যদি আপনার প্রোগ্রামের প্রথম চিঠির আউটপুট উপরে তালিকাভুক্ত বিকল্পগুলির মধ্যে না হয় তবে এটি ডিফল্ট হবে W

জমা ফরম্যাট

এই পোস্টে উত্তর হিসাবে একটি প্রোগ্রাম জমা দিন। আপনি একাধিক প্রোগ্রাম জমা দিতে পারেন। আপনি যদি একাধিক সাধারণ প্রোগ্রাম জমা দিচ্ছেন তবে আমি তাদের একক উত্তর হিসাবে জমা দেওয়ার পরামর্শ দিচ্ছি; আপনি যদি একাধিক জটিল প্রোগ্রাম জমা দিচ্ছেন তবে আমি তাদের পৃথক উত্তর হিসাবে জমা দেওয়ার পরামর্শ দিচ্ছি। একবার আমি সফলভাবে আপনার প্রোগ্রাম / গুলি টুর্নামেন্টে যোগ করার পরে, আমি আপনার প্রবেশের সাথে গিট সংগ্রহস্থলের প্রতিশ্রুতিবদ্ধ করব (নীচে লিঙ্কিত)।

যদি আমি এমন সমস্যাগুলির মুখোমুখি হই যেগুলি আপনার প্রোগ্রামটিকে টুর্নামেন্টে যোগ দেওয়া থেকে বিরত রাখে তবে আমি আপনার প্রবেশের বিষয়টি নিয়ে ইঙ্গিত দেওয়ার বিষয়ে একটি মন্তব্য করব।

আপনার জমাতে নিম্নলিখিতটি অন্তর্ভুক্ত করুন:

  1. স্কোরবোর্ডে ব্যবহারের জন্য আপনার প্রোগ্রামটির মানব পাঠযোগ্য নাম। স্পেস এখানে অনুমোদিত; কমা এবং ইউনিকোড অক্ষর নয়।
  2. আপনার প্রোগ্রামটি যে ভাষায় লিখিত রয়েছে Please
  3. আপনার প্রোগ্রামের একটি সংক্ষিপ্তসার এটি প্রোগ্রামটি কীভাবে কাজ করে তার একটি বিবরণ বা আপনার প্রোগ্রাম সম্পর্কে কিছু স্বাদযুক্ত পাঠ (যদি আপনি সমস্ত গোপনীয় হতে চান) বা সম্ভবত উভয়ই হতে পারে।
  4. আপনার প্রোগ্রামটি চালানোর জন্য কমান্ড / গুলি প্রয়োজন। উদাহরণস্বরূপ, আপনি যদি জাভা নামক আপনার জমা লিখতে থাকেন তবে আপনি example.javaসংকলনের নির্দেশাবলীর সাহায্যে javac example.javaচলমান নির্দেশাবলী সরবরাহ করবেন java example
  5. প্রোগ্রামটির উত্স কোড।

জমা দেওয়ার ক্ষেত্রে সহায়তা করার জন্য, আমি একটি জমা টেম্পলেট সরবরাহ করি যা এখানে পাওয়া যাবে । টেম্পলেটটি জমাগুলিকে আরও সুন্দর দেখায়। আমি দৃ using়ভাবে এটি ব্যবহার উত্সাহ।

আমি দুটি উদাহরণ এন্ট্রি প্রদান। যদিও উদাহরণস্বরূপ এন্ট্রিগুলি রাউন্ড রবিনে অংশ নেবে, তাদের মূল উদ্দেশ্যটি চূড়ান্ত সামুরাইয়ের শিরোনামের গুরুতর প্রতিযোগী না হয়ে টুর্নামেন্টের জন্য জমা দেওয়া এবং ইনপুট / আউটপুট ফর্ম্যাটগুলি স্পষ্ট করা।

টুর্নামেন্ট কাঠামো

এই বিভাগটি কীভাবে অংশগ্রহণকারীদের মধ্যে টুর্নামেন্ট পরিচালিত হবে তা বর্ণনা করে।

নিয়ন্ত্রণ প্রোগ্রাম

কন্ট্রোল প্রোগ্রামটি পাইথন 2 এ লেখা এবং এটি আলটিমেট সামুরাই শোডাউন গিথুব সংগ্রহস্থলে পাওয়া যায় । আপনি যদি এটি নিজে চালাতে চান তবে এটি কীভাবে চালানো যায় তার নির্দেশাবলী লিঙ্কের README.md ফাইলের অন্তর্ভুক্ত। তবে, টুর্নামেন্টের ফলাফলগুলিকে প্রভাবিত করে এমন হার্ডওয়ার পার্থক্য এড়াতে কেবলমাত্র আমার কম্পিউটারে চালানো টুর্নামেন্টগুলি অফিসিয়াল হবে।

কন্ট্রোল প্রোগ্রামটি আর্চ লিনাক্স পরিচালিত একটি ল্যাপটপ কম্পিউটারে চালানো হবে। এটিতে একটি ইন্টেল কোর আই 7 প্রসেসর এবং 8 জিবি র‌্যাম রয়েছে। আমি আমার কম্পিউটারে সমস্ত এন্ট্রি চালু রাখার চেষ্টা করব, তবে আপনি যদি অবাধে অ্যাক্সেস করতে পারবেন না এমন ভাষাগুলি এড়িয়ে চলেন তবে (যেমন কোনও আর্থিক ব্যয় নয়) আমি এটিকে অত্যন্ত প্রশংসা করব।

স্কোরিং সিস্টেম

স্কোরিং সিস্টেমটি একটি গোলাকার রবিন। প্রতিটি প্রোগ্রাম অন্য প্রতিটি প্রোগ্রামের বিরুদ্ধে আটটি ম্যাচ খেলবে। একটি জয় প্রোগ্রামটিকে 1 পয়েন্ট দেয়, কোনও ক্ষতির কোনও পয়েন্ট না করে এবং 0.5 পয়েন্টের সাথে একটি ড্র দেয়। সর্বোচ্চ স্কোর সহ প্রোগ্রামটি গেমটি জিতল। যদি কোনও ড্র হয় তবে আমি বিজয়ী নির্ধারণের জন্য একে অপরের বিরুদ্ধে শীর্ষ দুটি প্রোগ্রাম দ্বিগুণ করব।

খুব বেশি সংখ্যক প্রবেশকারী উপস্থিত থাকলে প্রতিটি প্রোগ্রাম একে অপরের প্রোগ্রামে যে পরিমাণ বার খেলবে তা 8 থেকে কমে যেতে পারে। যদি এটি ঘটে তবে আমি এখানে একটি নোট যুক্ত করব।

নতুন জমা পড়ার সাথে সাথে আমি বহুবার রাউন্ড রবিন চালাব, তবে এটি কেবল সাম্প্রতিকতম রাউন্ড রবিনই গণনা করবে।

অযোগ্যতা

আপনার প্রোগ্রামটির পক্ষে টুর্নামেন্ট থেকে অযোগ্য ঘোষণা করা সম্ভব। অযোগ্যতা ঘটতে পারে যদি:

  • আপনার প্রোগ্রাম সংকলন বা চালিত হয় না;
  • আপনার প্রোগ্রামটি অন্য একটি প্রোগ্রামের কৌশলগত সদৃশ (এটি, এটি অন্য প্রোগ্রামের মতো সঠিক কৌশলটি প্রয়োগ করে);
  • আপনার প্রোগ্রামটি নিয়ামক কোড, অন্যান্য প্রোগ্রামের কোড ইত্যাদি সংশোধন করে অন্যান্য প্রোগ্রামগুলিকে নাশকতার চেষ্টা করে;
  • আপনার প্রোগ্রামটি নিয়ামক কোডটিতে একটি বাগটি ব্যবহার করার চেষ্টা করে। বাগগুলি কাজে লাগানোর পরিবর্তে গিট সংগ্রহস্থলটিতে আপনার কোনও সমস্যা খোলা উচিত, এখানে একটি মন্তব্য করা বা আমাকে চ্যাটে পিং করা উচিত।

অতীত ফলাফল

সমস্ত টুর্নামেন্টের বিস্তারিত ফলাফল উইকি পৃষ্ঠায় উপলব্ধ করা হয় ।

সর্বাধিক সাম্প্রতিক টুর্নামেন্ট 2015-07-17 07:20 এ শেষ হয়েছে। এখানে ফলাফলগুলির সংক্ষিপ্তসার দেওয়া হল:

The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0

1
ওয়েটার আশ্চর্যজনকভাবে ভাল করছে। অনার্স শেষ হয়ে গেলে স্পার্ক হোল্ডারের বিরুদ্ধে অবশ্যই জয় অর্জন করতে হবে।
স্টিফেনটিজি

এটি একটি ঝরঝরে চ্যালেঞ্জ। আপনি স্পষ্টতই এতে অনেক চিন্তাভাবনা এবং কাজ করেছেন এবং আমি মনে করি এটি অবশ্যই বন্ধ হয়ে গেছে। চমৎকার কাজ. :)
অ্যালেক্স এ

1
@ C5H8NNaO4 হ্যাঁ, পরবর্তী টুর্নামেন্টটি চালানোর আগে আমি বটগুলিতে আপডেটগুলি পরীক্ষা করব।
অ্যাবসিন্থে

1
বিজ্ঞপ্তি: আমার ল্যাপটপটি সম্প্রতি ভেঙে গেছে। সুতরাং, অদূর ভবিষ্যতে আমার কাছে টুর্নামেন্টটি চালানোর কোনও বর্তমান উপায় নেই। আমি ব্যবহার করতে পারি এমন একটি কম্পিউটার সন্ধানের চেষ্টা করার সাথে সাথে পরের টুর্নামেন্টটি চালাতে বিলম্ব হবে।
এবিসন্থে

1
@ লেভি হ্যাঁ! নির্মাতা আমাকে একটি প্রতিস্থাপন পাঠিয়েছে যা আজ পৌঁছেছে। আমরা কথা বলার সাথে সাথে একটি টুর্নামেন্ট চলছে।
সোমরস

উত্তর:


8

সন্ন্যাসী (জাভা)

সন্ন্যাসী সম্মানের মূল্য এবং Godশ্বরের আশীর্বাদকে প্রশংসা করেন। ধৈর্য ধারণ করে প্রশিক্ষণ প্রাপ্ত হয়ে prayersশ্বরের অনুগ্রহ অনুভব না করা পর্যন্ত তিনি শান্তভাবে স্বর্গের কাছে তাঁর প্রার্থনা পাঠান।

তার জীবন উপভোগ করে, সে এটি রক্ষার চেষ্টা করে। যখন তিনি একটি নির্দিষ্ট হারের চেয়ে স্বাস্থ্য হারাচ্ছেন, তখন তিনি নিজেকে যথাসম্ভব সেরা ডিফেন্ড করেন।

তাঁর sশ্বরের সমর্থনের প্রত্যাশায় তিনি এলোমেলোভাবে বীর্যপাত [1] স্বর্গে প্রেরণ করেন , অন্যথায় তিনি তার সাধ্যমত লড়াই করেন best

যদি তার প্রতিদ্বন্দ্বী যুদ্ধ থেকে জর্জরিত হয় তবে তিনি তাকে তার দ্রুত সম্মান ও বেদনাহীন মৃত্যুর জন্য তার অবশিষ্ট সম্মান ব্যবহার করে শেষ করেন।

কম্পাইল / চালানোর

javac Monk.java
java Monk

public class Monk {
    public static void main(String[] args){
        char  r = 'B';
        double  s = Math.random ();
        int n = Math.max (args [0].length ()- 8, 1);
        int p = args.length > 4 ? Integer.parseInt (args [4]):0;
        int l = Integer.parseInt (args [3]);
        int m = Integer.parseInt (args [2]);
        double d = 1 + (20 - m) / n;
        double e = 1 + (20 - l) / n;

        if (((p>8&&s<.7)||l<11||m<2)&&p>0) {
                r=(s<(.14)||d>=2||e/d<.618)?'G':"OPI".charAt((int)(Math.random()*3));
        }

        System.out.print (r);
    }
}

নিনজা (জাভা)

নিনজা দ্রুত এবং আরও দ্রুত আক্রমণ করে। তিনি বন্ধুত্বপূর্ণ আনুষ্ঠানিক অভিবাদন করার পরে অবিলম্বে আক্রমণ করেন এবং প্রতি আক্রমণের আগে এবং পরে তাঁর শত্রুকে নত করে conf

আশীর্বাদ পাওয়ার পরে নিনজা এই আচরণটি বজায় রাখে, প্রতিপক্ষের জন্য তার প্রথম পদক্ষেপের জন্য অপেক্ষা করে। এই সুযোগটি ব্যবহার করে তিনি একাধিক বিস্ফোরণ ঘটিয়েছিলেন, নিনজা দেবী আশীর্বাদ করেছেন যতক্ষণ না তিনি যুদ্ধ থেকে খুব অবসন্ন হন। তার অবশিষ্ট সম্মানটি ব্যবহার করে তিনি নীচের পাতার নীচে লুকিয়ে আছেন এবং পরবর্তী আক্রমণ থেকে নিজেকে রক্ষা করেন। সে লাফিয়ে বেরিয়ে যায় এবং তার শত্রুকে পিছন থেকে আক্রমণ করে, তত দ্রুত লুকিয়ে থাকে।

যদি তিনি মারাত্মক ক্ষত পান তবে তিনি তার প্রতিপক্ষের লাইভ নিতে সর্বদা বেরিয়ে যান - অবশ্যই সম্মানের মিমিনাম রেখে।

javac Ninja.java
java Ninja

public class Ninja {
    public static void main(String[] args){
        char  r = 'B';
        int n = args [0].length ();
        int p = args.length > 4 ? Integer.parseInt (args [4]):0;
        int m = Integer.parseInt (args [2]);
        int a = n % 3;
        if (p>7) {
           if (m>17) {
                r = "BBI".charAt (a);
           } else if (m>13) {
                r = "BII".charAt (a); 
           } else {
               r  = "GIG".charAt (a);
           }

        } else if (p>0) {
           if (m > 10) {
                    r = "BBI".charAt (a);
           } else {
                r="IGI".charAt (n%2);
           }
        }
        System.out.print (r);
    }
}

কাকাশি, কপিরাইট নিনজা (জাভা)

প্রতিপক্ষের শেষ দুটি পদক্ষেপের মধ্যে এলোমেলোভাবে নির্বাচন করে কাকাসি তাঁর প্রতিপক্ষের চালাগুলি অনুলিপি করেন। প্রতিপক্ষ যদি অপেক্ষা করে, তবে সে মাথা নত করে - সে তার সম্মানও বজায় রাখে।

javac Kakashi.java
java Kakashi

public class Kakashi {
    public static void main(String[] args){
        char  r;
        String h = args [1];
        if (h=="W" || Integer.parseInt ( args.length > 4?args [4]:"0") < 1){
                 r = 'B';
        } else if (Math.random ()<.1) {
            r = 'I';
        } else {
            r  = h.charAt ((int) (h.length()==1?0: h.length()-Math.random ()*2));
        }

        System.out.print (r);
    }
}


আমি আশা করি কাকাশি ভাগ করে নেওয়ার মাধ্যমে আশীর্বাদ লাভ করতে পারেন .. আমি কাস্ট.এসটিএসটি পড়ার কথা ভেবেছিলাম। সেখানকার প্রতিটি প্রতিপক্ষের বিরুদ্ধে তাঁর ইতিহাসের প্রতিটি গোলকে সিমুলেট করুন। প্রকৃত শত্রুদের ইতিহাসের সাথে সিমুলেটেড শত্রুদের ইতিহাসের তুলনা করে তিনি কোন প্রতিপক্ষের বিরুদ্ধে লড়াই করছেন তা জানার চেষ্টা করুন। তারপরে প্রতিপক্ষের পরবর্তী পদক্ষেপের পূর্বাভাস দেওয়ার জন্য সেই তথ্যটি ব্যবহার করুন এবং একটি পূর্বনির্ধারিত তালিকা থেকে সেরা কাউন্টারমভে বেছে নিন। তবে আমার কাছে মনে হচ্ছে এই মুহুর্তে আমার কাছে সুপার স্লো ইন্টারনেট রয়েছে এবং জাভা কোনও দক্ষতা নেই this

পর্যবেক্ষক, (node.js)

পূর্বাভাসিত পদক্ষেপের জন্য সেরা প্রতিপক্ষকে বেছে নিয়ে পর্যবেক্ষক তার অতীত 5 টি পদক্ষেপ থেকে প্রতিপক্ষের পরবর্তী পদক্ষেপের পূর্বাভাস দেওয়ার আগে ধনুক করে।

সম্পাদনা করুন: নোড.জেএস বয়লারপ্লেট ভাগ করে নেওয়ার জন্য @ অ্যাপসিলার্সকে ধন্যবাদ!

node observer.js

var argv = process.argv;
var history = argv.length>6?argv[2]:"";
var enemyHistory = argv.length>6?argv[3]:"";
var offset = 8 - argv.length;
var my = { health:+argv[4-offset], honor:+argv[6-offset], history:history };
var enemy = { health:+argv[5-offset], honor:+argv[7-offset], history:enemyHistory };
my.godSword = my.honor >= 7;
enemy.godSword = enemy.honor >= 7;
function decide() {
    process.stdout.write(arguments[Math.floor(arguments.length*Math.random())]);
    process.exit();
}

var m = {
    m:{},
    l:function (a,b) {
        if (!this.m[a]) {
           this.m [a] = [];
        }
        this.m[a].push (b);
    },
    p:function (a) {
       for (var k=0;k<a.length;k++)
       for (var j=1;j<a.length;j++)
       for (var i=-1+k; i<a.length-j; i++)this.l (a.slice (i,i+j),a[i+j]);
    },
    a:function (a) {
      if (!this.m[a])return;
      return this.m[a][0|Math.random () * this.m[a].length-1]
    }
}
var g={
   B:"IPO",
   G:"B",
   I:"PG",
   O:"IG",
   P:"OG",
   W:"I"
}
var c,i=0;
m.p(enemy.history);
while (!c && i++<enemy.history.length) {
   c=m.a (enemy.history.slice (i));
}
decide.apply  (0,my.honor < 7?["B"]:g[c].split (''))

সম্পাদনা: পর্যবেক্ষকের মধ্যে আমার একটি বড় ত্রুটি ছিল, আমি আসলে গতকাল রাতে কী ভেবেছিলাম তা জানি না। দেখে মনে হচ্ছে তিনি কেবল শত্রুর অতীত দুটি পদক্ষেপের দিকে চেয়েছিলেন। তিনি আশ্চর্যরকম ভাল ভালো কাজ করেছেন।

তার স্মৃতি এখন শত্রুদের ইতিহাসের দীর্ঘতম (শেষ) অংশে অনুসন্ধান করেছে যা তিনি ইতিমধ্যে দেখেছেন। এটি মুভের ইতিহাস অনুসরণকারী সমস্ত চালগুলির সাথে একটি অ্যারে ধারণ করে। একটি এলোমেলোভাবে নির্বাচিত হয়। সুতরাং যদি কোনও পদক্ষেপটি প্রায়শই অনুসরণ করা হয় তবে এটি তোলা হওয়ার সম্ভাবনাও তত বেশি। ধরনের মার্কভ চেইনের মতো।

পর্যবেক্ষক, এখন প্রহরী এছাড়াও।


[1]: টিআইএল: বীর্যপাতের একটি ধর্মীয় অর্থ রয়েছে


আপনি এখনই # 1 এবং # 3! দুর্দান্ত বট! :)
অ্যাপসিলাররা

দ্য অবজার্ভারের সাথে জয়ের জন্য অভিনন্দন। সবুজ রঙের টিকটি এখন আপনার: ডি
অ্যাবসিন্থে

7

মিয়াও সেনশি (জাভা)

হাইজিমা অঞ্চল থেকে শিলা করা, মাইয়ো সম্পর্কে খুব বেশি জানা যায়নি। তারা সাধারণত খেলাধুলার গেমগুলিতে অংশ নেয় না, তবে তাদের প্রতিদ্বন্দ্বীদের মূল্যায়ন করার জন্য একজন যোদ্ধাকে প্রেরণ করেছে।

এগুলি একটি সম্মানজনক গুচ্ছ, সুতরাং আপনাকে নিশ্চিত করা যায় যে তিনি তাঁর উপস্থিতিগুলি দেবতাদের কাছে সংক্ষেপে জানাতে পারবেন। একবার প্রতিবেদন করার জন্য তিনি তার শত্রুদের যথেষ্ট পরিমাণে দেখে ফেললে, তিনি তার প্রতিপক্ষকে আঘাত করার জন্য প্রাপ্ত আশীর্বাদগুলি ব্যবহার করবেন।

রানকে সংকলন করতে এটি জাভা স্ট্যান্ডার্ড:

> javac MeiyoSenshi.java
> java MeiyoSenshi
public class MeiyoSenshi {
    public static void main(String[] args){
        System.out.print(
                Integer.valueOf(args[args.length<5?0:2])>12 ||
                Integer.valueOf(args[args.length<5?2:4])<1  ?
                "B":
                "IPO".charAt((int)(Math.random()*3))
        );
    }
}

7

স্পার্ক ধারক (রুবি)

প্রথম টার্নে স্পার্ক ধারক ধনুক করেন, তারপরে এলোমেলোভাবে কাজ করে। এটি দুটি উদাহরণ এন্ট্রিগুলির মধ্যে একটি।

COMMAND: ruby spork-holder.rb

if ARGV.length == 4
    print "B"
else
    print ["W", "B", "G", "I", "P", "O"].sample
end

ওয়েটার (বাশ)

ওয়েটার কেবল প্রতিটি টার্নের জন্য অপেক্ষা করে। এটি দুটি উদাহরণ এন্ট্রিগুলির মধ্যে একটি।

COMMAND: echo W

কোনও উত্স কোডের প্রয়োজন নেই।


7

কাপুরুষ (নোড.জেএস)

আমি কাপুরুষ / এটি একটি অলৌকিক বিষয় যা আমি শ্বাস নিতে সাহস পেলাম অতিরিক্ত
বিদ্যুত / গ্রীষ্মের সবচেয়ে হালকা হাওয়া

  • পরীক্ষা BXBXBX/ BBBনিদর্শন নম (অথবা তোমাকে আঘাত) আপনি যখন রুকু করছি।
  • GXGXGXযখন আপনি পাহারা দিচ্ছেন তখন নমগুলির জন্য চেক করুন ।
  • যদি তার এলোমেলো সাহসী রোল যদি সেই রাউন্ডের জন্য তার ভয় প্রান্তকে অতিক্রম করে, তবে তিনি হিট করার চেষ্টা করবেন।
    • Godশ্বরের তরোয়াল থাকা তাকে সাহসী করে তোলে।
    • Aশ্বরের তরোয়াল সহ একটি প্রতিপক্ষ তাকে আরও ভয়ঙ্কর করে তোলে।
    • প্রতিপক্ষ যিনি কমপক্ষে ৫ টি স্বাস্থ্য বা তারও বেশি নেতৃত্ব দেন তাকেও কিছুটা ভয় পান।
  • অন্যথায়, তিনি রক্ষণ এবং মাথা নত করে।

আপনি যদি নোড.জেএস জমা দিতে চান তবে আমার বয়লারপ্লেট কোডটি নির্দ্বিধায় ব্যবহার করুন; decideফাংশন সহ সমস্ত কিছুই সম্পূর্ণ সাধারণ এবং গ্রহণযোগ্য।


node coward.js

var argv = process.argv;
var history = argv.length>6?argv[2]:"";
var enemyHistory = argv.length>6?argv[3]:"";
var offset = 8 - argv.length;
var my = { health:+argv[4-offset], honor:+argv[6-offset], history:history };
var enemy = { health:+argv[5-offset], honor:+argv[7-offset], history:enemyHistory };
my.godSword = my.honor >= 7;
enemy.godSword = enemy.honor >= 7;
function decide() {
    process.stdout.write(arguments[Math.floor(arguments.length*Math.random())]);
    process.exit();
}

var enemyGuards = !!enemy.history.match(/G.G.G.$/);
var enemyBows = !!enemy.history.match(/(B.B.B.$)|(BBB$)/);

// open with a bow
if(!my.history) { decide("B"); }

// enemy will likely bow? Hit them with your super sword! (or bow)
if((!enemy.honor || enemyBows)) {
    if(my.godSword) { decide("P","I","O"); }
    else { decide("B"); }
}

// no point in hitting them if they're going to guard
if(enemyGuards) { decide("B"); }

// calculate bravery level
var braveryLevel = 0.3;
braveryLevel += (my.godSword * 0.2) - (enemy.godSword * 0.2);
braveryLevel -= (enemy.health - my.health > 5) * 0.1;

// if we're feeling brave, hit them
if(Math.random() < braveryLevel && my.honor) { decide("P","I","O"); }

// if we didn't just guard, and we're not feeling brave, cower in fear
if(!my.history.match(/G$/)) {
    decide("G");
}

// if we did just guard, and we're feeling cowardly,
//   if we don't have sword of the gods, bow
//   otherwise, do anything except guard
if(!my.godSword) {
    decide("B");
} else {
    decide("B","P","I","O");
}

1
এটি একটি শক্ত বট। অসাধারণ বয়লারপ্লেট; আমি এখনই এটি ব্যবহার করব। ভাগ করে নেওয়ার জন্য ধন্যবাদ :)
C5H8NNaO4

6

ত্বক-এক-তিল (আর)

শত্রুরা যখন ঝুঁকতে পারে তখন আঘাত হয়, অন্যথায় প্রহরীরা।

args <- commandArgs(TRUE)
L <- length(args)
my_health <- as.integer(args[L-3])
enemy_health <- as.integer(args[L-2])
my_honour <- as.integer(args[L-1])
enemy_honour <- as.integer(args[L])
if(L>4){enemy_history <- args[L-4]}else{enemy_history <- ""}
if(my_honour<1){
    out <- "B"
}else if (enemy_honour<=1 | grepl("BB$",enemy_history)){
    out <- sample(c("I","O"),1)
}else{
    out <- "G"
}
cat(out)

ব্যবহার করে চালান Rscript Whack-a-mole.R


1
ভাল কাজ, প্লাস আমি নামটি পছন্দ করি।
অ্যালেক্স এ

3

হাতি ওয়ারিয়র (জাভা)

এলিফ্যান্ট ওয়ারিয়র একটি পুরানো, আরও প্রাকৃতিক সময় থেকে। তিনি অনেক কিছু দেখেছেন, এবং সব মনে আছে। তিনি তার প্রতিপক্ষকে পরীক্ষা করার সময় দেবতাদের প্রতি অনুগ্রহ বজায় রাখেন এবং তারপরে একবার সে তাদের অন্তরে রাখলে সেগুলি আলাদা করে নেয়।

সংকলন: javac ElephantWarrior.java
আদেশ:java ElephantWarrior

import java.util.LinkedList;

//Elephants never forget
class ElephantWarrior
{


  static LinkedList<Choice> analysis = new LinkedList<Choice>();

  public static void main(String[] args){
      if(args.length < 6){ respond("B");}   
      String myhis = args[0];
      String enHis = args[1];
      int health = Integer.parseInt(args[2]);
      int enHealth = Integer.parseInt(args[3]);
      int honour = Integer.parseInt(args[4]);
      int enHonour = Integer.parseInt(args[5]);

        //Bow a few times until I know how he operates
        if(enHis.length() <= 5){
            respond("B");
        }

        //Special cases
        //If I'm at 0 honor, better bow
        else if(honour <= 0){
            respond("B");

        }
        else{
          analyze(enHis);

          //Narrow it down to applicable choices
          char hisLast = enHis.toCharArray()[enHis.toCharArray().length - 1];
          LinkedList<Choice> hisOptions = new LinkedList<Choice>();
          for(Choice c: analysis){
              if(c.pattern.toCharArray()[0] == hisLast){
                  hisOptions.add(c);
              }
          }

           //Default to assuming they bow
          char hisNext = 'B';
          int mostLikely = 0;

          //What will they do next?
          for(Choice c : hisOptions){
              if(c != null && c.probability > mostLikely){
                  //System.out.println("Option = " + c.pattern);
                  //System.out.println("Prob = " + c.probability);
                  mostLikely = c.probability;
                  hisNext = c.pattern.toCharArray()[1]; }
          }

          //Now go through potential case
          switch(hisNext){
              case 'W':
                  respond("I");
                  break;
              case 'B': 
                  respond("O");
                  break;
              case 'G':
                  respond("B");
                  break;
              case 'I':
                  if(enHonour  > 0){
                      respond("P");
                  }
                  else{
                      respond("B");
                  }
                  break;
              case 'P':
                  respond("O");
                  break;
              case 'O':
                  respond("I");
                  break;
              default:
                  respond("G");
          }
        }
    }





      static void analyze(String his){

        //Keep track of his previous moves
        char[] shortString = his.substring(1,his.length() - 1).toCharArray();
        char[] longString = his.toCharArray();
        for( int i = 0; i < shortString.length; i++) {
          String pattern = "" + longString[i] + shortString[i];
          boolean exists = false;
          for(Choice c : analysis){
              if(c.pattern.equals(pattern)){
                  exists = true;
                  c.probability++;
              }
          }
          if(!exists){
              analysis.add(new Choice(pattern, 1));
          }
        }
      }

      private static void respond(String s){
            System.out.println(s);
            System.exit(0);
        }

    }

class Choice{
        String pattern;
        int probability;

       Choice(String p, int i){
            pattern = p;
            probability = i;
       }
}

2
আমি এটি পরীক্ষা করিনি, তবে দেখে মনে হচ্ছে এটি প্রথম টার্নের বাইরে চলে যাবে যেখানে কেবল চারটি রয়েছে args
জিওবিটস

ঠিক আছে, বুঝতে পারিনি যে এগুলিকে মোটেই অন্তর্ভুক্ত করা হবে না। আমি অনুমান করি স্পষ্টতই একটি ফাঁকা স্ট্রিং ক্যান পাস হবে, ধন্যবাদ!
কেইন

@ কাট্যা এটি এখন ঠিক হয়েছে, বিটিডব্লিউ, টুর্নামেন্টে অন্তর্ভুক্ত করা উচিত।
কেইন

3

ওয়ারিয়র প্রিন্সেস (জুলিয়া)

এটি হিল চ্যালেঞ্জের প্রথম রাজা আমি প্রতিযোগিতায় অংশ নিয়েছি। আসুন দেখুন কীভাবে এটি হয়।

ওয়ারিয়র প্রিন্সেস আক্রমণ এবং সম্মানকে অগ্রাধিকার দেয় এবং প্রয়োজনে স্ব-সংরক্ষণে রিসর্ট করে। সে বরং আগ্রহী এবং কখনই অপেক্ষা করে না। নিম্বল থাকার প্রয়াসে তিনি ওভারহেড আক্রমণও ব্যবহার করেন না।


হিসাবে সংরক্ষণ করুন warrior-princess.jlএবং কমান্ড লাইন থেকে চালিত করুন :

julia warrior-princess.jl <arguments>

আপনার যদি জুলিয়া না থাকে তবে আপনি এটি এখানে ডাউনলোড করতে পারেন । সমস্যাগুলি এড়াতে সর্বশেষতম স্থিতিশীল সংস্করণটি সুপারিশ করা হয় (অর্থাত্ বিকাশ সংস্করণ নয়)।


type Samurai
    history::String
    health::Int
    honor::Int
end

A = length(ARGS) < 5 ? ["", "", ARGS] : ARGS

me = Samurai(A[1], int(A[3]), int(A[5]))
opponent = Samurai(A[2], int(A[4]), int(A[6]))


if length(me.history) == 0

    # Always begin the match with an honorable bow
    action = "B"

elseif (!ismatch(r"[OIP]", opponent.history) && me.history[end] != 'G') ||
       (me.health < 2 && me.honor > 0)

    # Guard if the enemy has not yet attacked and I did not previously
    # guard, or if my health is low and my honor is sufficient
    action = "G"

elseif me.honor < 2

    # Bow if I'm low on honor
    action = "B"

elseif opponent.honor >= 7 && opponent.history[end]['B', 'W']

    # Assume the enemy will attack with the Sword of the Gods if they
    # most recently bowed or waited
    action = "I"

else
    action = "P"
end

println(action)

1
আপনার প্রথম কোটএইচ এন্ট্রি এবং প্রথম জুলিয়া কোটএইচ এন্ট্রি যদি কখনও ভুল না হয়: অভিনন্দন!
প্ল্যানাপাস

@ প্লানাপাস ধন্যবাদ! : ডি সম্ভবত আমি এটি থেকে একটি অভ্যাস করব।
অ্যালেক্স এ

3

গারগোয়েল (জাভা)

সম্মান গ্রহণ না করে রক্ষণাত্মক পদক্ষেপটি ব্যবহার করার চেষ্টা করে।

যেহেতু এটি জাভা এন্ট্রি:

> javac Gargoyle.java
> java Gargoyle
public class Gargoyle { 
    public static void main(String args[]) {
        if (args.length < 5 || Integer.valueOf(args[4]) > 0) {
            System.out.println("IPO".charAt((int)(Math.random()*3)));
        } else if (args[0].charAt(args[0].length()-1) != 'G') {
            System.out.println('G');
        } else {
            System.out.println('B');
        }
    }
}

3

তরোয়ালদল (সি / জাভা)

তরোয়ালদর্শী প্রথম পালা এবং যখনই সে সম্মানের দিকে কম চলছে b তারপরে তিনি পরীক্ষা করেন যে প্রতিপক্ষটি পূর্বের দিকে মোড় না দিয়ে বা ডিফেন্ড করেছে বা অপেক্ষা করেছিল না। যদি প্রতিপক্ষটি না থাকে, তবে একটি বড় সম্ভাবনা রয়েছে যে তিনি বর্তমান পালা এবং তরোয়ালদলের মধ্যে এগুলির মধ্যে একটি করবেন যা এলোমেলোভাবে প্রতিপক্ষের উপর আঘাত করে strikes যদি এটি সত্য না হয় তবে তিনি পূর্বের পালা রক্ষা না করলে তিনি ডিফেন্ড করেন। যদি সে থাকে তবে সে সম্মান অর্জন করতে মাথা নত করে।

সি সংস্করণ:

#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_and_exit(char* str)
{
    puts(str);
    exit(0);
}

int main(int argc, char** argv){

    srand(time(NULL));
    char* attack_moves[]={"I", "P", "O"};
    int random_num = rand() % 3;

    if(argc == 5 || atoi(argv[5]) == 0)
        print_and_exit("B");
    else if(argv[2][strlen(argv[2])-1] != 'B' && argv[2][strlen(argv[2])-1] != 'G' && argv[2][strlen(argv[2])-1] != 'W')
        print_and_exit(attack_moves[random_num]);
    else if(argv[1][strlen(argv[1])-1] != 'G')
        print_and_exit("G");

     print_and_exit("B");
}

জিসিসি (সংকলক) ইনস্টল করুন এবং সংকলনের জন্য কোডটিকে " সোর্ডসম্যান.সি. " কমান্ড নামে একটি ফাইলে সংরক্ষণ করুন :

gcc Swordsman.c -o Swordsman

এক্সিকিউটেবল নামের " তরোয়ালমান " তৈরি করা হবে। ব্যবহার করে চালান

Swordsman

জাভা সংস্করণ:

public class Swordsman {

    public static void print_and_exit(String str)
    {
        System.out.println(str);
        System.exit(0);
    }
    public static void main(String[] argv) {

        String attack_moves[]={"I", "P", "O"};
        int random_num = (int)(Math.random()*3);

        if(argv.length == 4 || Integer.valueOf(argv[5]) == 0)
            print_and_exit("B");
        else if(argv[2].charAt(argv[2].length()-1) != 'B' && argv[2].charAt(argv[2].length()-1) != 'G' && argv[2].charAt(argv[2].length()-1) != 'W')
            print_and_exit(attack_moves[random_num]);
        else if(argv[1].charAt(argv[1].length()-1) != 'G')
            print_and_exit("G");

         print_and_exit("B");
    }

}

জাভাক (সংকলক) ইনস্টল করুন এবং সংকলনের জন্য কোডটিকে " সোর্ডসমান.জাভা " কমান্ড নামের একটি ফাইলে সংরক্ষণ করুন :

javac Swordsman.java

" Swordsman.class " নামের ক্লাস ফাইল তৈরি করা হবে। ব্যবহার করে চালান

java Swordsman



আক্রমণকারী (জাভা)

আক্রমণকারী তার প্রতিপক্ষকে মৃত চায় ব্যতীত কোনও কিছুরই যত্ন করে না। তিনি এলোমেলোভাবে আক্রমণাত্মক আক্রমণগুলির মধ্যে একটি আক্রমণ করেন এবং যদি সম্মান কম হয়, তীরভোজন।

public class Attacker {

    static int position = -1;

    public static void print_and_exit(String str)
    {
        System.out.println(str);
        System.exit(0);
    }
    public static void main(String[] argv) {

        String attack_moves[]={"I", "P", "O"};
        position = (position + 1) % 3;

        if(argv.length != 5 && Integer.valueOf(argv[5]) == 0)
            print_and_exit("B");
        else 
            print_and_exit(attack_moves[position]);
    }

}

জাভ্যাক (সংকলক) ইনস্টল করুন এবং সংকলনের জন্য কোডটিকে " Attacker.java " কমান্ড নামে একটি ফাইলে সংরক্ষণ করুন :

javac Attacker.java

" Attacker.class " নামের ক্লাস ফাইল তৈরি করা হবে। ব্যবহার করে চালান

java Attacker


ভবিষ্যদ্বাণী (সি / জাভা)

ভবিষ্যদ্বাণীকারী শত্রুদের চলার পূর্বাভাস দেয়। প্রথম টার্নে এটি একটি এলোমেলো পদক্ষেপ ব্যবহার করে। ধনুক যদি তার সম্মান কম হয়, শত্রুদের সম্মান কম হয় বা পূর্ববর্তীতে মাথা নত করে থাকে strikes যদি ভবিষ্যদ্বাণীকারী পূর্ববর্তী পালা রক্ষা না করে তবে বর্তমান পালা প্রহরী। অন্যথায়, পূর্ববর্তী সময়ে শত্রুরা যেমন করেছিল তেমন একই পদক্ষেপ নিয়ে আসে, তবে শর্ত থাকে যে 'W', প্রিডিক্টর ধনুকের ক্ষেত্রে তা না হয় isn't

সি সংস্করণ:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

void print_and_exit(char* str)
{
    puts(str);
    exit(0);
}

int main(int argc, char** argv){

    srand(time(NULL));
    int random = rand() % 5;
    char* moves[] = {"B", "G", "I", "P", "O"};

    if(argc == 5)
        print_and_exit(moves[random]);

    if(atoi(argv[5]) <= 0)
        print_and_exit(moves[0]);
    if(atoi(argv[6]) <= 0)
        print_and_exit(moves[4]);
    if(argv[2][strlen(argv[2])-1] == 'G')
        print_and_exit(moves[4]);
    if(argv[1][strlen(argv[1])-1] != 'G')
        print_and_exit(moves[1]);

    if(argv[2][strlen(argv[2])-1] != 'W'){
        char buf[2]={0};
        *buf = argv[2][strlen(argv[2])-1];
        print_and_exit(buf);
    }

    print_and_exit(moves[0]);

}

GCC (সংকলক) ইনস্টল করুন এবং সংকলনের জন্য কোডটিকে " Predictor.c " নামক একটি ফাইলে সংরক্ষণ করুন :

gcc Predictor.c -o Predictor

এক্সিকিউটেবল নামের " প্রিডিকটর " তৈরি করা হবে। ব্যবহার করে চালান

Predictor

জাভা সংস্করণ:

public class Predicator{

    public static void print_and_exit(String str)
    {
        System.out.println(str);
        System.exit(0);
    }

    public static void main(String[] argv){

        int random = (int)(Math.random() * 5);
        String moves[] = {"B", "G", "I", "P", "O"};

        if(argv.length == 4)
            print_and_exit(moves[random]);
        else if(Integer.valueOf(argv[5]) <= 0)
            print_and_exit(moves[0]);
        else if(Integer.valueOf(argv[6]) <= 0)
            print_and_exit(moves[4]);
        else if(argv[2].charAt((argv[2].length())-1) == 'G')
            print_and_exit(moves[4]);
        else if(argv[1].charAt((argv[1].length())-1) != 'G')
            print_and_exit(moves[1]);
        else if(argv[2].charAt((argv[1].length())-1) != 'W'){
                    print_and_exit(""+argv[2].charAt((argv[2].length())-1));
        }
        else
            print_and_exit(moves[0]);
    }
}

জাভ্যাক (সংকলক) ইনস্টল করুন এবং সংকলনের জন্য কোডটিকে " Predicator.java " কমান্ড নামের একটি ফাইলে সংরক্ষণ করুন :

javac Predicator.java

" Predicator.class " নামের ক্লাস ফাইল তৈরি করা হবে। ব্যবহার করে চালান

java Predicator


এই বটগুলি কতটা কার্যকর হবে তা নিশ্চিত নন যেহেতু এটি পরীক্ষা করার জন্য আমার কাছে পাইথন 2 ইন্টারপ্রেটার নেই।


1
আমি এটি (আক্রমণকারী) পরীক্ষা করিনি, তবে দেখে মনে হচ্ছে এটি প্রথম টার্নের বাইরে চলে যাবে যেখানে কেবল চারটি আর্গ রয়েছে।
জিওবিটস

আক্রমণকারী মনে হয় ArrayIndexOutOfBoundsExceptionপ্রথম টার্নটি একটি উপহার দিচ্ছে , যার ফলে এটি প্রথম টার্নটির জন্য অপেক্ষা করবে। পাশাপাশি এটি কাজ করছে।
অ্যাবসিন্থে

ক্যাট্যা এবং জিওবিটস, স্থির এটি সন্ধানের জন্য ধন্যবাদ।
স্পিক্যাট্রিক্স

পূর্বাভাসকারী চলাকালীন, আমি segmentation fault (core dumped)24
C5H8NNaO4

@ C5H8NNaO4 সমস্যাটি সমাধান করেছেন ed তিনটি বটের জন্য আপডেট করা কোড। এখনই কাজ করা উচিত। এটা ইশারা জন্য ধন্যবাদ! :-D
স্পিক্যাট্রিক্স

2

মাস্টার ইয়ে (পাইথন)

প্রারম্ভিক খেলায় মাস্টার ঘাতক প্রচুর অনুগ্রহ অর্জন করে, এটি অদৃশ্য না হওয়া পর্যন্ত এটি তৈরি করে। তারা যখন কমপক্ষে এটি আশা করে তখন আক্রমণ করার চেষ্টা করে।

import sys, random

class MasterYi(object):
    def __init__(self):
        self.attack = lambda: random.choice(['I','P','O'])
        self.bow   = "B"
        self.guard = "G"
        self.wait  = "W"
        if len(sys.argv)>6:
            self.hist = sys.argv[1]; self.ohist = sys.argv[2]
            self.hp   = sys.argv[3]; self.ohp   = sys.argv[4]
            self.hon  = sys.argv[5]; self.ohon  = sys.argv[6]
        else:
            self.hist = [];          self.ohist = []
            self.hp   = sys.argv[1]; self.ohp   = sys.argv[2]
            self.hon  = sys.argv[3]; self.ohon  = sys.argv[4]
        self.last  = self.hist  and self.hist[-1]  or "W"
        self.olast = self.ohist and self.ohist[-1] or "W"
        self.oGuarder = len(self.ohist)>4 and self.ohist[-4]==self.ohist[-2]=="G"

    def move(self):
        if self.hon < 1: return self.bow
        if self.olast == "G": return self.attack
        if self.hon > 6:
            if self.oGuarder: return self.bow
            if self.ohon > 6: return self.guard
            if self.ohon < 7: return self.attack
            return self.attack
        if self.ohon > 6: return self.guard
        return self.bow

Yi = MasterYi()
print(Yi.move())

চালাতে: হিসাবে সংরক্ষণ করুন MasterYi.py

python MasterYi.py <args>

2

অনুলিপি-সান (সি)

তার প্রতিপক্ষের প্রতিটি পদক্ষেপ অনুলিপি করে। খুব নিশ্চিত যে সে হারাতে গ্যারান্টিযুক্ত। কম্পাইল:gcc copy-san.c

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc == 5) {
        putchar('B');
    } else {
        char *enemy_hist = argv[2];
        size_t len = strlen(enemy_hist);
        putchar(enemy_hist[len - 1]);
    }
    putchar('\n');
    return 0;
}

2

হবি (জাভা)

হেবি সাপের পথ অনুসরণ করে।

দেবতাদের আশীর্বাদ করার জন্য সাপের কোনও প্রয়োজন নেই।

সাপ তার স্ট্রাইকগুলি স্লিটার করে; সৈকতে wavesেউয়ের মতো, যা আসে তা ফিরে আসে way

সাপ কখনই অপেক্ষা করে না।

সাপের দক্ষতার কোনও ধারণা নেই, অন্যথায় এটি পাইথনে লেখা হত।

চলমান নির্দেশাবলী:

> javac hebi.java
> java hebi

কোড বডি:

public class hebi{

    public static void main(String args[]){

        if( (args.length < 5) || (args[0].length() % 18 == 0) ) System.out.println( "IPO".charAt((int)(Math.random()*3)) );
        else{

            int hist_size = args[0].length();

            if      (hist_size % 3 == 1) System.out.println("G");
            else if (hist_size % 3 == 2) System.out.println("B");
            else{

                if     (hist_size % 18 ==  9) System.out.println(args[0].charAt(hist_size -  3));
                else if(hist_size % 18 == 12) System.out.println(args[0].charAt(hist_size -  9));
                else if(hist_size % 18 == 15) System.out.println(args[0].charAt(hist_size - 15));
                else{

                    char move_head = args[0].charAt( (hist_size / 18) * 18 );
                    char move_mid;
                    if( hist_size % 18 == 3 ){
                        if     ( move_head == 'I' ) move_mid = "PO".charAt((int)(Math.random()*2));
                        else if( move_head == 'O' ) move_mid = "IP".charAt((int)(Math.random()*2));
                        else                        move_mid = "OI".charAt((int)(Math.random()*2));
                        System.out.println(move_mid);
                    }
                    else{
                        move_mid = args[0].charAt( ((hist_size / 18) * 18) + 3 );
                        char move_tail;

                        if( move_head == 'I' ){
                            if( move_mid == 'P' ) move_tail = 'O';
                            else                  move_tail = 'P';
                        }else if( move_head == 'P' ){
                            if( move_mid == 'O' ) move_tail = 'I';
                            else                  move_tail = 'O';
                        }else{
                            if( move_mid == 'I' ) move_tail = 'P';
                            else                  move_tail = 'I';
                        }

                        System.out.println( move_tail );

                    }

                }

            }

        }

    }

}

2

মাননীয় (জাভা)

সম্মানিত মান সম্মান সর্বোপরি। অর্থাত্, তাঁর সম্মান অন্য সবার aboveর্ধ্বে। শত্রু সমুরাই যদি বৃহত্তর বা সমান সম্মান পায় তবে সে নমুকু করে। তার চেয়ে বেশি সম্মানিত কেউ হতে পারে না। অন্যথায়, তিনি এলোমেলো পদক্ষেপ করেন। তিনি কখনও একটানা দু'বার পাহারায় রাখেন না - সেটা হবে অসত্ম!

সংকলন করতে:

> javac TheHonourable.java
> java TheHonourable

সূত্র:

public class TheHonourable {
    public static void main(String[] args) {
        char move;

        if (args.length < 5) {
            move = 'B';
        } else if (Integer.valueOf(args[5]) >= Integer.valueOf(args[4])){
            move = 'B';
        } else {
            move =  (args[0].endsWith("G")) ?
                    "IPO".charAt((int)(Math.random()*3)) :
                    "GIPO".charAt((int)(Math.random()*4));
        }

        System.out.print(move);
    }
}

1

ধন্য সমুরাই (পাইথন)

এই সামুরাই যতক্ষণ সম্ভব দেবতাদের অনুগ্রহ বজায় রাখার চেষ্টা করে। তিনি পবিত্র তরোয়াল পেতে ছুটে আসেন, তারপরে গার্ডিং এবং আক্রমণটির মধ্যে বিকল্প হিসাবে একটি স্ট্রাইক দিয়ে, প্রয়োজনে সম্মান ফিরিয়ে দেন। দেখে মনে হচ্ছে খুব শীঘ্রই সে বা তার প্রতিপক্ষের পতন হতে পারে, সে হত্যার জন্য ছুটে যায়। তিনি সহজেই কোনও প্রতিপক্ষের কাছে পড়বেন যা তার প্যাটার্নটি ট্র্যাক করতে পারে, তবে তার সর্বদা দুটি ক্ষতিতে আক্রমণ করার কৌশলটি কার্যকরভাবে কার্যকর হওয়া উচিত।

import sys
import random
class BlessedSamurai(object):
    def __init__(self):
        if len(sys.argv) < 7:
            print("B")
        else:
            self.attack = ['O', 'I', 'P']
            self.hp = sys.argv[3]
            self.ohp = sys.argv[4]
            self.hon = sys.argv[5]
            self.last = sys.argv[1][-1]
            print(self.move())

    def move(self):
        #check if I have low health or should rush the kill
        if (self.hp < 5 or self.ohp < 5) and self.hon > 0:
            return(random.choice(self.attack))
        # charge honour to get SOTG
        elif self.hon < 7:
            return 'B'
        #Alternate guarding and attacking
        else:
            if self.last == 'G':
                return(random.choice(self.attack))
            return 'G'
Sam = BlessedSamurai()

চালানোর জন্য:
বরকতমসুরাই.পি হিসাবে সংরক্ষণ করুন

python BlessedSamurai.py <args>

4
আপনার প্রোগ্রামটির চালটি মুদ্রণ করা দরকার ।
mbomb007

3
আমি এটি পরীক্ষা করিনি, তবে দেখে মনে হচ্ছে এটি প্রথম টার্নের বাইরে চলে যাবে যেখানে কেবল চারটি আরগ রয়েছে।
জিওবিটস

তিনি যা করেছিলেন তার সাথে আমি একই ধরণের বিন্যাস ব্যবহার করেছি। @ স্ট্রানজায়ার, আরগস পাওয়ার জন্য আমি কী করেছি তা একবার দেখুন।
mbomb007

সবাইকে ধন্যবাদ! আমার এখনই অজগর দোভাষীর অ্যাক্সেস নেই, তবে আমি মনে করি আমি বিষয়গুলি ঠিক করেছি। একরকম আমি পুরোপুরিভাবে মিস করেছি যে নির্দেশাবলীর প্রথম সেটটির কোনও ইতিহাস থাকবে না।
স্ট্রঞ্জির

হাই, আপনার প্রোগ্রামটিতে আপনার একটি ছোট বাগ ছিল "গ্লোবাল নাম 'লাস্ট' সংজ্ঞায়িত নয়"। যেহেতু এটি একটি ছোট বাগ আমি পরিবর্তন করেছি lastকরতে self.lastযা সমস্যাটি সমাধানের জন্য মনে হয়।
আব্বাসে

1

হারমুরাই (সি ++)

তার প্রতিপক্ষকে প্রশংসিত করে, এবং এটি কিছুটা ভৌতিক। তিনি জানতে চান যে তিনি অন্যান্য সামুরাই যা করতে পারে তা করতে পারে কিনা, কারণ তিনি এখনও নিজেকে সামুরাই বলে বিশ্বাস করতে পারেন না। তাঁর কখনই বিবর্ণ স্বপ্নটি এটি জানার আগে বাস্তবে পরিণত হয়েছিল। যা তার মাথা ব্যয় করতে পারে ...

#include <stdio.h>
#include <string>
#include <sstream>

using namespace std;

char getLastAttack(string enemy_history)
{
    size_t found = enemy_history.find_last_of("IPO");
    if(found == string::npos)
    {
        return 'I';
    }

    return enemy_history[found];
}

int main(int argc, const char * argv[])
{
    if(argc != 7){
        printf("B");
        return 0;
    }

    string enemy_history(argv[2]);

    int ho;
    string honour(argv[5]);
    stringstream(honour) >> ho;

    if(ho > 20){
        char atk = getLastAttack(enemy_history);
        printf("%c", atk);
        return 0;
    }

    char lastMove = enemy_history[enemy_history.length()-1];
    if(lastMove == 'W' || lastMove == 'G')
        lastMove = 'B';
    printf("%c", lastMove);
    return 0;
}

ইনিকি (সি ++)

যতটা সম্ভব কঠোর স্ট্রাইক করে। যখন সে বিপদে পড়ে তখন অচলাবস্থার আক্রমণ মোডে যায়।

#include <stdio.h>
#include <string>
#include <sstream>

using namespace std;

char getLastAttack(string enemy_history)
{
    size_t found = enemy_history.find_last_of("IPO");
    if(found == string::npos)
    {
        return 'I';
    }

    return enemy_history[found];
}

int main(int argc, const char * argv[])
{
    if(argc != 7){
        printf("B");
        return 0;
    }

    string history(argv[1]);
    string enemy_history(argv[2]);
    string health(argv[3]);
    string enemy_health(argv[4]);
    string honour(argv[5]);
    string enemy_honour(argv[6]);

    int he, enemy_he, ho, enemy_ho;
    stringstream(health) >> he;
    stringstream(enemy_health) >> enemy_he;
    stringstream(honour) >> ho;
    stringstream(enemy_honour) >> enemy_ho;

    if(ho > 6 || ((he < 6 || enemy_he < 6) && ho > 0))
    {
        char atk = getLastAttack(enemy_history);
        printf("%c", atk);
        return 0;
    }


    printf("B");
    return 0;
}

দুটোই সি ++ তে লেখা। সংকলন করতে:

g++ iniqy.cpp -o iniqy

লিনাক্স চালানোর জন্য: ./iniqy

উইন্ডোজ চালানোর জন্য: iniqy.exe


1

টার্মিনেটর (রুবি)

টার্মিনেটর তার নিজের স্বাস্থ্যের দিকে মনোযোগ দেয় না। টার্মিনেটরের সম্মানের কোনও ধারণা নেই। টার্মিনেটরটি ভবিষ্যত থেকে প্রেরণ করা হয় এবং কেবল তার প্রতিপক্ষকে শেষ করতে দৃ to় সংকল্পবদ্ধ হয়। এটি তার বিরোধীদের নড়াচড়া করে দেখে আর কিছুই করে না। এটি চলনগুলির নমুনা দেয় এবং উপযুক্ত প্রতিক্রিয়াটিকে এমন জটিলভাবে গণনা করে যে কোনও বর্তমান প্রযুক্তি টার্মিনেটরের ক্রিয়াকলাপ অনুমান করতে পারে না। প্রকৃতপক্ষে, ২০১৫ সালে বসবাসকারী যে কোনও ব্যক্তির কাছে টার্মিনেটর কিছুটা এলোমেলো মনে হতে পারে ...

responses = {
  ?W => %w(B I),
  ?B => %w(I O),
  ?G => %w(B B),
  ?I => %w(G P),
  ?P => %w(B O),
  ?O => %w(G I)
}

if ARGV.size > 4
  pool = ARGV[1].chars.map{ |c| responses[c] }.flatten
  puts pool.sample
else
  puts %w(O I P B).sample
end

1

এজেন্ট 38 [1] (সি)

ব্যাপক জেনেটিক হেরফেরের পণ্য হিসাবে, এজেন্ট 38 এর একটি সুপার [2] -সামুরাইয়ের দৈহিক ও মানসিক তীক্ষ্ণতা রয়েছে এবং এটি অসহায়ভাবে [ প্রশংসাপত্র আবশ্যক ] ত্রুটিযুক্ত [ প্রশংসাপত্র আবশ্যক ] প্রতিযোগীদের তুলনায় উচ্চতর ।


//Agent 38
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#ifdef _WIN32
#include <Windows.h>
unsigned int tick_count(){
    return GetTickCount();
}
#else
#include <sys/time.h>
unsigned int tick_count(){
    struct timeval t;
    gettimeofday(&t, NULL);
    return 1000 * t.tv_sec + t.tv_usec / 1000;
}
#endif

float program[5][4][4][4][4]={
    {{{{-1.192779,0.693321,-1.472931,-0.054087},{0.958562,0.557915,0.883166,-0.631304},{-0.333221,1.410731,0.496346,0.087134},{0.459846,0.629780,-0.479042,-0.025909}},{{0.547976,1.059051,-0.748062,-0.675350},{-0.607591,-0.152156,-0.400350,-0.685337},{1.686450,0.628706,0.312865,0.324119},{1.652558,0.403733,-0.456481,-0.081492}},{{0.371629,-0.036948,-0.982682,0.065115},{1.360809,0.681294,0.505074,0.782737},{-0.545192,0.954937,-0.727853,0.273542},{-0.575777,1.615253,-0.064885,-0.516893}},{{0.577015,-0.112664,0.456595,-0.007560},{-0.660930,-0.738453,0.668093,1.716388},{1.972322,0.108558,0.535114,-0.337916},{0.640208,-0.019680,-0.769389,0.873087}}},{{{-0.021140,-0.095956,-0.098309,-0.280295},{-0.926284,1.724028,0.278855,0.678060},{0.153006,-1.860947,-0.577699,-1.931683},{-0.187152,0.529719,-1.164157,0.125499}},{{0.582208,-0.835029,-0.329857,0.088176},{-0.030797,0.389396,0.584636,-0.025866},{-0.736538,1.624658,0.690493,0.387515},{0.973253,-0.530825,1.934379,-0.872921}},{{0.812884,0.138399,-1.452478,-1.504340},{-0.119595,0.986078,-0.993806,1.102894},{0.848321,-0.268764,0.876110,0.782469},{0.948619,-0.557342,0.749764,-0.712915}},{{-1.195538,0.783784,-1.973428,-0.873207},{0.085426,-0.241360,-0.534561,-0.372105},{0.029696,-0.906821,0.932227,-0.834607},{0.764903,-0.276117,-1.346102,-0.093012}}},{{{0.168113,0.855724,1.817381,-0.547482},{0.468312,0.923739,-0.723461,0.798782},{-0.875978,-0.942505,-0.684104,-0.046389},{0.893797,-0.071382,0.283264,0.811233}},{{0.391760,0.309392,-0.045396,-0.977564},{0.085694,0.257926,-0.775461,0.060361},{0.486737,-0.175236,0.806258,-0.196521},{0.691731,-0.070052,0.636548,0.464838}},{{0.532747,-1.436236,-0.900262,-0.697533},{0.566295,0.650852,0.871414,-0.566183},{-0.075736,-0.886402,0.245348,-0.438080},{-0.811976,0.022233,-0.685647,0.323351}},{{-1.864578,1.141054,1.636157,-0.455965},{0.592333,0.890900,-0.259255,0.702826},{0.404528,0.905776,0.917764,0.051214},{0.761990,0.766907,-0.595618,-0.558207}}},{{{0.209262,-1.126957,-0.517694,-0.875215},{0.264791,0.338225,0.551586,0.505277},{0.183185,0.782227,0.888956,0.687343},{0.271838,0.125254,1.071891,-0.849511}},{{0.261293,-0.445399,0.170976,-0.401571},{0.801811,0.045041,-0.990778,-0.013705},{-0.343000,-0.913162,0.840992,0.551525},{-0.526818,-0.231089,0.085968,0.861459}},{{0.540677,-0.844281,-0.888770,0.438555},{0.802355,-0.825937,0.472974,-0.719263},{-0.648519,1.281454,0.470129,-0.538160},{-0.851015,0.985721,-0.993719,0.558735}},{{1.164560,-0.302101,0.953803,0.277318},{0.886169,0.623929,1.274299,-0.559466},{-0.948670,0.807814,-1.586962,-0.502652},{-0.069760,1.387864,-0.423140,0.285045}}}},
    {{{{0.747424,-0.044005,0.402212,-0.027484},{0.785297,0.169685,0.734339,-0.984272},{-0.656865,-1.397558,0.935961,-0.490159},{-0.099856,-0.293917,0.129296,-0.920536}},{{0.546529,-0.488280,-0.516120,-1.112775},{0.155881,-0.103160,0.187689,0.485805},{0.918357,0.829929,0.619437,0.877277},{0.389621,0.360045,0.434281,0.456462}},{{-0.803458,-0.525248,-0.467349,0.714159},{-0.648302,-0.005998,-0.812863,0.205664},{0.591453,0.653762,-0.227193,-0.946375},{0.080461,0.311794,0.802115,-1.115836}},{{-0.495051,-0.869153,-0.179932,0.925227},{-1.950445,1.908723,-0.378323,-0.472620},{-0.688403,-1.470251,1.991375,-1.698926},{-0.955808,-0.260230,0.319449,-1.368107}}},{{{-0.029073,-0.622921,-1.095426,-0.764465},{-0.362713,-0.123863,0.234856,-0.772613},{0.697097,0.103340,0.831709,0.529785},{0.103735,-0.526333,-0.084778,0.696831}},{{-0.670775,0.289993,-0.082204,-1.489529},{0.336070,0.322759,0.613241,0.743160},{0.298744,-1.193191,0.848769,-0.736213},{0.472611,-0.830342,0.437290,-0.467557}},{{-0.529196,-0.245683,0.809606,-0.956047},{-1.725613,0.187572,0.528054,-0.996271},{-0.330207,0.206237,0.218373,0.187079},{0.243388,0.625787,-0.388859,0.439888}},{{-0.802928,-0.811282,0.788538,0.948829},{0.966371,1.316717,0.004928,0.832735},{-0.226313,0.364653,0.724902,-0.579910},{-0.544782,-0.143865,0.069256,-0.020610}}},{{{-0.393249,0.671239,-0.481891,0.861149},{-0.662027,-0.693554,-0.564079,-0.477654},{0.070920,-0.052125,-0.059709,0.473953},{-0.280146,-0.418355,0.703337,0.981932}},{{-0.676855,0.102765,-0.832902,-0.590961},{1.717802,0.516057,-0.625379,-0.743204},{-0.170791,-0.813844,-0.269250,0.707447},{0.057623,0.472053,-0.211435,0.147894}},{{-0.298217,0.577550,1.845773,0.876933},{0.617987,0.502801,0.951405,0.122180},{0.924724,-0.166798,0.632685,-0.466165},{-0.834315,-0.864180,-0.274019,0.568493}},{{0.669850,-0.961671,0.790462,0.738113},{-0.534215,-0.556158,0.653896,0.031419},{0.065819,0.220394,0.153365,-0.373006},{0.886610,-0.742343,1.282099,0.198137}}},{{{0.092579,-0.026559,-1.121547,0.143613},{-0.289030,0.265226,-0.350741,-0.897469},{-0.918046,0.038521,-1.515900,0.488701},{-0.759326,-1.782885,-1.787784,0.249131}},{{-0.849816,-0.857074,-0.843467,-0.153686},{0.998653,0.356216,0.926775,0.300663},{-0.749890,-0.003425,-0.607109,0.317334},{-0.561644,0.446478,-0.898901,0.711265}},{{0.232020,-0.445016,0.618918,0.162098},{0.381030,-0.036170,0.084177,0.766972},{0.493139,0.189652,-0.511946,-0.273525},{0.863772,-0.586968,0.829531,-0.075552}},{{0.191787,-0.627198,0.975013,-0.448483},{-0.197885,0.151927,-0.558646,-1.308541},{-0.582967,1.207841,0.746132,0.245631},{0.314827,-0.702463,-0.301494,0.787569}}}},
    {{{{0.670028,-1.825749,-0.739187,0.482428},{0.175521,-0.020120,-0.154805,0.187004},{0.971728,-0.160181,-0.164031,-0.868147},{-0.954732,-0.175713,0.791116,0.294173}},{{-0.958337,-0.843157,-0.472882,0.273517},{-0.999058,0.824762,-0.223130,-0.150628},{0.393747,-0.301297,0.095572,-0.798950},{-0.119787,0.746673,0.955094,0.259353}},{{0.951590,0.225539,0.503282,0.668746},{-0.384898,-0.979592,-0.005485,-0.191883},{-0.692369,-0.642401,-0.825598,0.171933},{-0.321919,-0.498635,0.449704,0.780842}},{{-0.387902,0.522435,0.565608,0.166193},{-0.799671,-0.295871,-0.702573,-0.151006},{0.040550,-0.468503,0.651076,0.636352},{-0.839299,-0.090651,0.428761,0.187043}}},{{{-0.369823,0.377011,0.422936,0.284752},{-0.181514,-0.701449,0.748768,0.540533},{0.734381,0.149410,-0.867043,-0.397142},{-0.770904,-0.581897,-1.578306,-0.402638}},{{0.859015,-0.540358,0.202715,-0.975354},{-0.773629,-0.382342,-0.022498,-0.129286},{-0.901210,-0.641866,1.219216,0.731525},{0.740457,0.858546,-0.408661,-0.364897}},{{-0.830865,-1.370657,-1.226303,-0.392147},{-0.810554,-0.975232,-0.717845,-0.825379},{-0.150096,-0.664533,0.347084,0.243443},{-0.447383,0.842164,1.491342,0.380295}},{{-0.383958,0.811219,0.160459,0.841601},{1.631515,0.371637,0.110000,0.467783},{-0.689356,-0.004289,-0.081057,-0.317243},{0.092451,-0.181268,-0.575747,-0.580061}}},{{{0.908549,-0.013975,-0.880165,-0.938937},{-0.225713,0.449478,0.372569,-0.229889},{0.255711,-0.264752,0.307982,0.260505},{0.314966,-0.540905,0.743032,-0.078475}},{{-0.307472,-1.268296,0.020383,1.798401},{-0.150954,0.909716,-0.407903,0.379046},{0.621853,-0.003629,-0.582697,0.614618},{-0.122843,-0.627133,-0.217968,0.608322}},{{0.071923,0.807315,0.538905,-0.630660},{0.495641,0.240202,-0.920822,-0.258533},{-1.760363,-0.448525,-0.351553,-0.551666},{0.152720,0.900531,0.061966,-0.544377}},{{0.648923,0.450945,-1.530020,1.570190},{0.536210,0.078454,0.577168,0.464872},{-0.888258,-0.950748,0.781474,0.958593},{0.463631,0.319614,-0.248374,-0.413144}}},{{{0.293463,0.236284,1.721511,0.107408},{-0.790508,-0.072027,-0.559467,-0.955839},{-0.777662,-0.169876,0.896220,0.776105},{0.003944,-0.745496,-0.236446,-0.824604}},{{-1.770746,-0.051266,-0.174258,0.003074},{-0.339553,-0.868807,-0.032754,-0.494847},{-0.896712,0.957339,-0.003444,-1.582125},{-0.699883,0.626691,0.799635,-0.542343}},{{-0.635123,-0.755960,0.576373,-0.899530},{-0.393745,0.718900,0.312400,0.511415},{-0.647565,0.368431,0.214726,0.892693},{-0.511960,-0.513262,0.885908,-0.536478}},{{-0.590074,0.623328,0.268674,-0.401391},{0.308868,-0.869862,0.233132,0.243337},{-0.242908,-0.557192,-0.728454,0.867029},{0.156435,-0.805308,-0.815392,-1.437798}}}},
    {{{{0.613484,1.454566,-0.363858,0.634053},{0.535096,-0.641079,-0.607553,0.852559},{0.959100,-0.398621,0.375819,0.385756},{-0.601982,0.494128,0.809699,0.608804}},{{-1.390871,-0.943062,1.556671,0.966501},{-0.013242,0.152716,-0.089592,0.230793},{0.933785,0.119358,0.057387,0.502033},{-0.332925,0.537509,-0.081436,-0.701995}},{{-0.435117,0.996885,0.646630,-0.092342},{0.004343,-0.737514,-0.716187,-0.946819},{0.814258,-0.766971,-0.488162,-0.531619},{-0.923069,0.683915,-0.023809,-1.242992}},{{-0.909155,-0.166488,-0.159273,-0.908121},{-0.783871,-0.522598,0.691845,-0.164065},{1.255966,0.051373,-0.566025,0.820081},{0.186583,0.266032,-0.793747,-0.510092}}},{{{0.890639,0.970042,-0.507885,-0.029557},{-0.771142,-0.875802,0.400070,-1.264247},{-0.881146,0.570950,-0.051624,0.347612},{0.312110,-0.374885,0.600112,0.388460}},{{-0.417107,-0.309284,-0.128477,0.689671},{-0.695866,1.254585,-0.381883,-0.313415},{0.433565,0.919626,0.159180,-0.657310},{-1.396139,0.346053,0.108768,0.061238}},{{-0.776695,0.084491,0.045357,0.312823},{-0.379268,1.217006,-0.014838,-1.032272},{-1.251344,-0.366283,-0.124786,0.729754},{0.979936,0.669519,-0.900018,-0.596954}},{{-0.998834,0.593942,0.375639,-0.627459},{0.297281,0.400240,0.839707,0.960262},{-0.872143,0.574040,-0.559580,-1.965570},{-0.559218,-0.778780,-0.955526,-0.253380}}},{{{-1.919625,-1.911049,0.025035,0.754917},{-0.110993,0.535933,-0.572788,-0.856476},{-0.810836,-0.496261,1.128368,1.758826},{-0.564368,-1.849772,-0.251560,0.635528}},{{0.768196,-0.934122,0.207228,0.884610},{-0.356145,0.265792,-0.835582,0.377675},{-0.410745,0.613212,0.245560,-0.873826},{1.725191,-0.263344,-0.077167,-0.976379}},{{-0.736299,-0.109476,0.044512,-0.004005},{0.692230,0.316670,0.267247,-1.076821},{-0.903184,0.189762,-0.674111,0.219113},{0.639162,1.347521,0.428823,-0.765664}},{{-0.509165,0.458806,-0.851011,0.455027},{-0.218564,-0.063492,0.889320,-0.762062},{0.145950,0.985037,-0.489372,-0.879851},{0.352346,-0.127275,0.896496,-0.596037}}},{{{0.402678,1.479855,0.089187,0.967153},{-0.431225,0.402980,0.883584,-0.900324},{0.262233,-0.647278,0.637005,0.142678},{-0.003253,-0.671924,0.969458,-0.316752}},{{0.345185,-0.477503,-0.326822,-0.106251},{0.239521,1.617125,0.632651,0.969976},{-1.015183,-0.676629,0.955842,0.134925},{-0.319063,-0.493157,-0.488088,0.713008}},{{-0.468621,1.301292,-1.826501,1.138666},{0.170247,-0.661171,0.895204,-0.400700},{-0.077645,-0.978179,-0.245724,0.245282},{-0.258300,0.287261,-0.006274,0.549716}},{{-0.932247,-0.274950,0.920451,0.016237},{0.888865,-0.845248,1.661716,-0.108960},{0.712357,0.586609,-0.867356,0.355058},{-0.540912,0.892622,0.302627,0.247194}}}},
    {{{{0.817578,0.719047,0.438903,0.637398},{0.750466,-0.911799,-0.609606,0.358541},{-1.782979,-0.851717,-0.802122,0.735913},{0.490604,-0.417822,-0.332074,0.836756}},{{-0.650232,-0.442026,0.874916,0.705671},{0.217602,-0.755841,0.573944,0.279365},{-0.713729,0.358880,-0.308992,0.778297},{0.832099,-0.916695,-0.887834,1.041483}},{{1.019467,1.099488,-0.130674,-0.241995},{0.792572,0.756977,0.518186,0.070411},{-0.815779,-0.790757,-1.027439,-0.163698},{0.721461,-0.403364,0.656609,-0.367364}},{{-0.279333,-0.742041,0.515832,-0.408114},{0.834577,0.736056,0.900594,0.276357},{0.726000,0.464991,-0.569281,0.098139},{-0.582324,0.875666,-0.681556,-0.903009}}},{{{1.300969,-0.798351,0.107230,1.611284},{0.239211,0.418231,-0.795764,-0.398818},{-0.939666,1.768175,-0.297023,-0.064087},{-0.239119,-0.365132,0.864138,0.595560}},{{1.898313,-0.343816,1.066256,0.876655},{-0.053636,0.544756,-0.937927,0.189233},{0.445371,-0.656790,-0.675091,0.753163},{-0.293330,-0.002717,0.341173,0.095493}},{{0.951658,0.513912,-0.678347,-0.981140},{-0.020791,0.571138,-0.890648,0.881789},{-1.783345,0.909598,-0.393155,0.240630},{-0.057908,-0.237435,-0.124993,-0.754091}},{{-0.014153,0.127172,0.097134,0.538952},{0.167943,0.786395,0.946153,-0.762513},{-0.562758,0.675657,-0.226395,0.979761},{0.850214,0.818309,0.397074,-0.372059}}},{{{0.803316,-0.659538,-1.987864,-0.186366},{-0.259213,0.315848,-0.427898,0.326521},{-0.168181,-0.620898,0.562309,0.722064},{-1.949690,0.307720,-0.147760,0.603492}},{{0.898339,0.986228,0.724530,0.105193},{0.066046,0.037689,-0.553543,0.597864},{0.296553,0.165199,0.500125,-0.395978},{0.790120,-1.873361,0.354841,-0.187812}},{{-0.559746,0.357012,0.373903,-0.113564},{-0.671918,-0.919720,0.258328,-0.283453},{0.008365,0.597272,0.355827,0.391287},{0.355297,-0.631888,0.221383,1.448221}},{{0.259199,-0.491776,0.721151,0.391427},{0.494000,0.652814,-0.153306,-0.615687},{0.142167,-0.601161,0.281702,0.563390},{0.904019,1.284241,0.901663,0.244620}}},{{{-0.664638,-0.564596,0.839897,0.153358},{-0.506883,0.822337,-0.974957,-0.098112},{-0.962870,-0.274566,0.418039,-0.020525},{-0.965969,0.954587,-0.250493,-0.031592}},{{-0.966475,0.455338,0.868491,0.723032},{-0.002141,0.021922,-0.131429,-0.601106},{-1.240003,1.483318,1.612920,-0.653210},{-0.505979,0.005588,-0.087506,-0.705789}},{{-0.203137,0.765652,-0.132974,-0.900534},{0.731132,0.133467,-1.086363,0.600763},{1.795911,-0.411613,-1.990494,0.405937},{0.729332,-0.119175,-0.979213,0.362346}},{{-0.049014,0.228577,-1.728796,-0.898348},{-0.540969,1.245881,-0.820859,0.285859},{0.430751,-0.373652,0.034535,0.434466},{0.365354,0.243261,0.910114,1.497873}}}}
};
float eval_polynomial(float variables[4],int program_index,int variable_index,int indices[4]){
    if(variable_index==4)return program[program_index][indices[0]][indices[1]][indices[2]][indices[3]];
    float result=0,base=1;
    for(int power=0;power<4;++power){
        indices[variable_index]=power;
        result+=base*eval_polynomial(variables,program_index,variable_index+1,indices);
        base*=variables[variable_index];
    }
    return result;
}
int main(int argc,char *argv[]){
    srand(tick_count());
    rand();
    float variables[4],probability[5],total=0;
    int i,indices[4],temp;
    for(i=0;i<4;++i){
        sscanf(argv[i-4+argc],"%d",&temp);
        variables[i]=temp;
    }
    temp=variables[1];
    variables[1]=variables[2];
    variables[2]=temp;
    if(variables[1]==0){ //bow if our honour is 0
        putchar('B');
        return 0;
    }

    variables[0]/=20;variables[2]/=20;
    variables[1]=1/(variables[1]+1);variables[3]=1/(variables[3]+1);
    for(i=0;i<5;++i){
        probability[i]=eval_polynomial(variables,i,0,indices);
        if(probability[i]<0)probability[i]=0;
        total+=probability[i];
        probability[i]=total;
    }
    total*=(float)rand()/RAND_MAX;
    for(i=0;i<5;++i)if(total<probability[i]){
        putchar("BGIPO"[i]);
        return 0;
    }
    putchar('B');
    return 0;
}

[1] সম্পূর্ণ অপ্রাসঙ্গিক সংখ্যা [2] সময়ের 1% সত্য হতে গ্যারান্টিযুক্ত


YAGMCSE

মন্টি কার্লো পদ্ধতিতে শালীন খেলা প্রদর্শিত হবে বলে মনে হয়, তবে এখানে আরও একটি জেনেরিক মন্টি কার্লো সিমুলেশন এন্ট্রি রয়েছে!

এই প্রতিযোগিতায় থাকা অন্যান্য বেশিরভাগ এন্ট্রি থেকে পৃথক, এই এন্ট্রিটিতে প্রচুর পরিমাণে এলোমেলো গেমের সিমুলেশন ব্যবহার করা হয়, এবং এইভাবে অনুকূল পারফরম্যান্সের জন্য -O3 পতাকা ব্যবহার করা প্রয়োজন।

কমান্ডটি দিয়ে প্রোগ্রামটি সংকলন করুন : gcc monte.c -o monte -O3 -std = c99

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef _WIN32
#include <Windows.h>
unsigned int tick_count(){
    return GetTickCount();
}
#else
#include <sys/time.h>
unsigned int tick_count(){
    struct timeval t;
    gettimeofday(&t, NULL);
    return 1000 * t.tv_sec + t.tv_usec / 1000;
}
#endif

const int turn_limit=500;
enum Move{
    WAIT,BOW,GUARD,QUICK,PARRY,OVERHEAD
};
struct Player{
    int health,honour;
    enum Move lastMove;
};
typedef struct Player Player;
//<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
//<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
int damage_table[6][6][2]={
    {{0,0},{0,0},{0,0},{1,0},{1,0},{1,0}}, //P1 is waiting
    {{0,0},{0,0},{0,0},{1,0},{1,0},{1,0}}, //P1 is bowing
    {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}, //P1 is guarding
    {{0,1},{0,1},{0,0},{0,0},{1,0},{0,1}}, //P1 is using quick draw
    {{0,1},{0,1},{0,0},{0,1},{0,0},{1,0}}, //P1 is parrying
    {{0,1},{0,1},{0,0},{1,0},{0,1},{0,0}} //P1 is using overhead attack
};
enum Move decode_move(char x){
    switch(x){
        case 'W': return WAIT; break;
        case 'B': return BOW; break;
        case 'G': return GUARD; break;
        case 'I': return QUICK; break;
        case 'P': return PARRY; break;
        case 'O': return OVERHEAD; break;
    }
    return WAIT;
}
struct SimulationStat{
    enum Move first_me_move;
    int win,draw,lose,compound;
};
int stat_compare(const void*a,const void*b){
    return ((struct SimulationStat*)b)->compound-((struct SimulationStat*)a)->compound;
}
struct SimulationStat monte_carlo(int num_iters,enum Move first_me_move,Player original_me,Player original_opponent){
    struct SimulationStat simulation_result={first_me_move,0,0,0};

    for(int iter=0;iter<num_iters;++iter){
    Player me=original_me,opponent=original_opponent;
        int turn,game_result;
        for(turn=0;turn<turn_limit;++turn){
            enum Move me_move,opponent_move=rand()%(OVERHEAD-BOW+1)+BOW;
            if(turn==0)me_move=first_me_move;
            else me_move=rand()%(OVERHEAD-BOW+1)+BOW;

            //update honour for guarding
            if(me.lastMove==GUARD&&me_move==GUARD)--me.honour;
            if(opponent.lastMove==GUARD&&opponent_move==GUARD)--opponent.honour;

            int me_attacking=me_move==QUICK||me_move==PARRY||me_move==OVERHEAD,opponent_attacking=opponent_move==QUICK||opponent_move==PARRY||opponent_move==OVERHEAD;

            //update health of players
            me.health-=damage_table[me_move][opponent_move][0]*(1+(opponent.honour>=7));
            opponent.health-=damage_table[me_move][opponent_move][1]*(1+(me.honour>=7));

            //update honour for attacking (Sword of the Gods is revoked after the player attacks with an original honour value of 7)
            if(me_attacking)--me.honour;
            if(opponent_attacking)--opponent.honour;

            //printf("%d %d\n",me.health,me.honour);
            //printf("%d %d\n",opponent.health,opponent.honour);

            //check if any of the terminating conditions are met
            //c. both players fall off the graces of the gods (me.honour<0&&opponent.honour<0)
            if(me.honour<0&&opponent.honour<0){
                game_result=0; //draw
                break;
            }
            //a. player 1 falls off the graces of the gods (me.honour<0)
            else if(me.honour<0){
                game_result=-1; //loss
                break;
            }
            //b. player 2 falls off the graces of the gods (opponent.honour<0)
            else if(opponent.honour<0){
                game_result=1; //win
                break;
            }
            //d. both players are dead (me.health<0&&opponent.health<0)
            else if(me.health<0&&opponent.health<0){
                game_result=0; //draw
                break;
            }
            //e. player 1 is dead (me.health<0)
            else if(me.health<0){
                game_result=-1; //loss
                break;
            }
            //f. player 2 is dead (opponent.health<0)
            else if(opponent.health<0){
                game_result=1; //win
                break;
            }
        }
        //both players get struck down by the guards for being boring
        if(turn==turn_limit)game_result=0; //draw

        if(game_result==1)++simulation_result.win;
        else if(game_result==0)++simulation_result.draw;
        else ++simulation_result.lose;
    }
    return simulation_result;
}
int main(int argc,char*argv[]){
    //const int num_iters=200000,num_shortlist_iters=1000000;
    const int num_iters=20000,num_shortlist_iters=55000;

    srand(tick_count());
    Player me,opponent;
    if(argc==5){
        sscanf(argv[1],"%d",&me.health);
        sscanf(argv[2],"%d",&opponent.health);
        sscanf(argv[3],"%d",&me.honour);
        sscanf(argv[4],"%d",&opponent.honour);
        me.lastMove=WAIT;
        opponent.lastMove=WAIT;
    }else{
        sscanf(argv[3],"%d",&me.health);
        sscanf(argv[4],"%d",&opponent.health);
        sscanf(argv[5],"%d",&me.honour);
        sscanf(argv[6],"%d",&opponent.honour);
        me.lastMove=decode_move(argv[1][strlen(argv[1])-1]);
        opponent.lastMove=decode_move(argv[2][strlen(argv[2])-1]);
    }

    struct SimulationStat results[6];
    results[0].first_me_move=WAIT;
    results[0].win=0;
    results[0].draw=0;
    results[0].lose=num_iters;
    results[0].compound=-num_iters*2-1000; //waiting is worse than any other action

    for(enum Move first_me_move=BOW;first_me_move<=OVERHEAD;++first_me_move){
        results[first_me_move]=monte_carlo(num_iters,first_me_move,me,opponent);
        struct SimulationStat *cur=&results[first_me_move];
        cur->compound=cur->win*4+cur->draw*1-cur->lose*2;
    }
    qsort(results,OVERHEAD-WAIT+1,sizeof(*results),stat_compare);

    for(int i=0;i<OVERHEAD-BOW+1;++i){
        struct SimulationStat *cur=&results[i];
//        fprintf(stderr,"%c: %f%% win, %f%% draw, %f%% lose => %d\n","WBGIPO"[cur->first_me_move],(double)cur->win/num_iters*100.,(double)cur->draw/num_iters*100.,(double)cur->lose/num_iters*100.,cur->compound);
    }

    for(int i=0;i<2;++i){
        results[i]=monte_carlo(num_shortlist_iters,results[i].first_me_move,me,opponent);
        struct SimulationStat *cur=&results[i];
        cur->compound=cur->win*2+cur->draw*1;
    }
    qsort(results,2,sizeof(*results),stat_compare); 

    for(int i=0;i<2;++i){
        struct SimulationStat *cur=&results[i];
//        fprintf(stderr,"%c: %f%% win, %f%% draw, %f%% lose => %d\n","WBGIPO"[cur->first_me_move],(double)cur->win/num_shortlist_iters*100.,(double)cur->draw/num_shortlist_iters*100.,(double)cur->lose/num_shortlist_iters*100.,cur->compound);
    }
    putchar("WBGIPO"[results[0].first_me_move]);
    return 0;
}

1
তিনি কেবল যে কোনও কারণে মাথা নত করছেন বলে মনে হয়। আপনি এটিকে একবার দেখতে
চাইবেন

@ C5H8NNaO4 এই গুরুতর বাগ সম্পর্কে আমাকে অবহিত করার জন্য আপনাকে ধন্যবাদ। আমার সম্পাদনাটি বাগটি ঠিক করা উচিত।
পোটোমাটো

YAGMCSE মনে হয় কেবলমাত্র হয় GBWWWWW...বাBWWWW
C5H8NNaO4

@ C5H8NNaO4 এটি আশ্চর্যজনক। আপনার উল্লিখিত ফলাফলগুলি আমি প্রতিলিপি করতে সক্ষম নই। YAGMCSE এর প্রতিদ্বন্দ্বী কি নিরবচ্ছিন্নভাবে মাথা নত করা / পাহারা দেওয়া / অপেক্ষা করা ছিল?
পোটোটোমাটো

হ্যাঁ, তিনি প্রথম round রাউন্ডে মাথা নিচু করেছিলেন। এখানে একটি পেস্টবিন রয়েছে
C5H8NNaO4

1

টার্গেট ডামি প্রবেশের ব্যর্থ চেষ্টার পরে, আমি আপনাকে আমার পরবর্তী বট ...

স্ক্রুজবট - পাইথন 2

এই বট যদি একটি সম্মান থাকে তবে সে মাথা নত করবে। অন্যথায় সে একটি মুদ্রা উল্টাবে।

যদি তা মাথায় আসে তবে তিনি এলোমেলো আক্রমণ চালিয়ে যাবেন। যদি এটি লেজগুলিতে অবতরণ করে তবে সে নত হয় বা রক্ষা করবে।

COMMAND: python scroogebot.py

import random, sys
# If he has more than one honor...
if int(sys.argv[5]) > 1:
    #Flip a coin.
    coin = random.choice(['heads','tails'])
    #If the coin lands on heads...
    if coin == 'heads':
        #Attack!
        print random.choice(['I','O','P'])
    #If the coin lands on tails...
    else:
        #Don't attack!
        print random.choice(['G','B'])
#If he has 1 honor...
else:
    #Bow!
    print "B"

হ্যাঁ, নতুন প্রবেশ! মাত্র একটি দ্রুত মাথা উঁচু করুন - গতকাল আমার অপারেটিং সিস্টেমটি নতুন করে তৈরি করার পরে, নতুন টুর্নামেন্ট স্থাপনের কিছুটা সময় আগে হতে পারে। যদিও সপ্তাহের শেষের দিকে আপনার ফলাফলগুলি নিয়ে আমার একটি নতুন টুর্নামেন্টটি করা উচিত।
অবাস্তে

0

যোশিমিতসু (জেএস)

শেষ দুটি চালচলন যাচাই করে পাহারা না দেওয়ার চেষ্টা করে, উচ্চতর সম্মানের সাথে বীরত্ব পাবে। অ্যাপসিলার তৈরি টেম্পলেট ভিত্তিক

var attacks = ['I','P','O'];
var pasive = ['B','W'];
var argv = process.argv;
var playerHistory = argv.length>6?argv[2].split(''):[];
var enemyHistory = argv.length>6?argv[3].split(''):[];
var offset = 8 - argv.length;
var my = { health:+argv[4-offset], honor:+argv[6-offset], history:playerHistory };
var enemy = { health:+argv[5-offset], honor:+argv[7-offset], history:enemyHistory };
my.godSword = my.honor >= 7;
enemy.godSword = enemy.honor >= 7;

enemy.lastMove = enemyHistory.pop();
enemy.secondToLast = enemyHistory.pop();

enemy.didAttack = !!attacks.indexOf(enemy.lastMove);

my.lastMove = playerHistory.pop();

function decide() {
    process.stdout.write(arguments[Math.floor(arguments.length*Math.random())]);
    process.exit();
}

chooseAnAttack = function(){ decide.apply(this,attacks); };

if( ( pasive.indexOf( enemy.lastMove ) && my.honor < 15 ) || (my.honor < 7 && enemy.health > 10) || my.honor === 1 ){
    if( Math.random * 15 < my.honor ){
        chooseAnAttack();
    } else {
        decide('B');
    }
} else if( enemy.honor < 2 ){
    chooseAnAttack();
} else if( enemy.didAttack ){

    if( attacks.indexOf( enemy.secondToLast ) ){
        decide('G');
    } else if( pasive.indexOf( enemy.secondToLast ) ){
        chooseAnAttack();
    } else if( enemy.secondToLast == 'G' ){
        decide('B');
    }

} else if( enemy.lastMove = 'G' ) {
    chooseAnAttack();
} else if( enemy.lastMove === 'W' ){
    if( attacks.indexOf( enemy.secondToLast ) ){
        decide('G');
    } else if( pasive.indexOf( enemy.secondToLast ) ){
        chooseAnAttack();
    } else if( enemy.secondToLast == 'G' ){
        decide('B');
    }
}

0

মূ ((সি)

মূর্খ একটি বরং কৌশলগত কৌশলটির জন্য অনুরোধ করে, সম্মানের অভাবে বাধ্য না হলে কখনও কখনও একই পদক্ষেপের পুনরাবৃত্তি করবেন না। তার চলনগুলি মূলত এলোমেলোতার উপর ভিত্তি করে, তার ক্রিয়াগুলি পূর্বাভাস দেওয়া শক্ত করে তোলে। তাঁর মঙ্গল তাঁর মনের সর্বশেষ বিষয়, কারণ তার চিন্তাভাবনাগুলি কেবল রক্তপাত এবং চূড়ান্ত বিজয়ের উপর নির্ভর করে

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

const char commands[] =
{
    'W', 'B', 'G', 'I', 'P', 'O'
};

char select_candidate(const char c[])
{
    unsigned i = 0;
    int n_candidates = 0;
    char candidates[sizeof(commands)];

    for (; i < sizeof(commands); i++)
        if (c[i])
            candidates[n_candidates++] = c[i];

    /* There are no candidates for actions, so the fool blindly attacks his opponent, hoping for the best */
    return n_candidates == 0 ? 'I' : candidates[rand() % n_candidates];
}

int main(int argc, char *argv[])
{
    unsigned i = 0;
    int honour;
    char candidates[sizeof(commands)];
    char last_action;

    srand(time(NULL));

    memcpy(candidates, commands, sizeof(commands));

    /* It's the first round, the fool selects a random action except for waiting */
    if (argc != 7)
    {
        candidates[0] = 0;
        putchar(select_candidate(candidates));
        return 0;
    }

    last_action = argv[1][strlen(argv[1]) - 1];
    honour = atoi(argv[5]);

    if (honour == 0)
    {
        /* The fool realises he will meet his doom if he performs any of the following moves */
        /* and removes them from his list of possible actions */
        candidates[3] = 0;
        candidates[4] = 0;
        candidates[5] = 0;

        /* Only omit the blocking action if the last action was blocking */
        if (last_action == 'G')
            candidates[2] = 0;
    } else if (honour >= 7) {

        /* If the fool has the opportunity to abuse power, he will */
        candidates[0] = 0;
        candidates[1] = 0;
    }

    /* However unintellegent, the fool decides never to repeat the same move twice */
    for (; i < sizeof(commands); i++)
    {
        if (candidates[i] == last_action)
        candidates[i] = 0;
    }

    /* The fool randomly selects a possible action and hopes for the best */
    putchar(select_candidate(candidates));

    return 0;
}


নবী (সা।)

নবী তার পরবর্তী পদক্ষেপের পূর্বাভাস দেওয়ার জন্য তার প্রতিপক্ষের পূর্ববর্তী 2 পদক্ষেপগুলির জ্ঞান ব্যবহার করেন এবং দ্রুত এবং মারাত্মক পাল্টা আক্রমণ সরবরাহ করেন। এছাড়াও, তিনি জ্যোতিষশাস্ত্র এবং স্টাফ করেন।

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char* argv[])
{
    char* hist;
    char* enemy_hist;
    int hist_len;
    int enemy_hist_len;
    int health;
    int enemy_health;
    int honour;
    int enemy_honour;

    if (argc != 7)
    {
        /* Always start with guarding */
        putchar('G');
        return 0;
    }

    srand(time(NULL));

    /* Grab the command-line values */
    hist         = argv[1];
    enemy_hist   = argv[2];
    health       = atoi(argv[3]);
    enemy_health = atoi(argv[4]);
    honour       = atoi(argv[5]);
    enemy_honour = atoi(argv[6]);

    hist_len = strlen(hist);
    enemy_hist_len = strlen(enemy_hist);

    /* Looks like the enemy is starving for honour. */
    /* This means that they have to bow, so attack them,  */
    /* But only if we have the honour to do so. */
    if (enemy_honour == 0 && honour > 0)
    {
        putchar('O');
        return 0;
    } else if (honour == 0) {
        /* We have to bow */
        putchar('B');
        return 0;
    } else if (honour <= 3) {
        /* We have low honour, attack if the enemy has no honour, otherwise bow to restore some of our honour */
        putchar(enemy_honour == 0 ? ((rand() % 2) ? 'I' : 'O') : 'B');
        return 0;
    }

    switch (enemy_hist[enemy_hist_len - 1])
    {
        /* The enemy has previously performed a passive action, so they will likely attack this round */
        case 'W':
        case 'B':
        case 'G':
            putchar(hist[hist_len - 1] == 'G' ? 'P' : 'G'); /* Protect ourselves, using `guard` if we did not use it last turn */
            return 0;

        default:
            if (enemy_hist_len >= 2)
            {
                switch (enemy_hist[enemy_hist_len - 2])
                {
                    case 'I':
                    case 'P':
                    case 'O':
                        /* The enemy has attacked for the last 2 turns, they will likely rest now */
                        putchar((rand() % 2) ? 'I' : 'O');
                        return 0;

                    default:
                        /* Low health, block an incoming attack */
                        if (health <= 5)
                        {
                            putchar(hist[hist_len - 1] == 'G' ? 'P' : 'G');
                            return 0;
                        } else {
                            /* Choose randomly to bow or attack */
                            int decision = rand() % 3;
                            putchar(decision == 2 ? 'B' : decision == 1 ? 'I' : 'O');
                            return 0;
                        }
                }
            } else {
                /* Attack! */
                putchar((rand() % 2) ? 'I' : 'O');
                return 0;
            }
    }

    /* If somehow we get to this point, parry */
    putchar('P');
    return 0;
}


সংকলন

উভয় প্রোগ্রাম সি লেখা হয় এবং এর সাথে সংকলন করা যেতে পারে gcc:

gcc fool.c -o fool
gcc prophet.c -o prophet


চলমান

* স্নো

./fool <args>
./prophet <args>

উইন্ডোজ

fool.exe <args>
prophet.exe <args>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.