এই চ্যালেঞ্জ একটি লিখতে হয় minimax ফাংশন একটি পরবর্তী শ্রেষ্ঠ চাল আপনার পছন্দের একটি ভাষায়, আউটপুট NxN খেলা মাংসপেশীর আক্ষেপ-Tac অঙ্গুলী দেওয়া বর্তমান বোর্ড রাষ্ট্র । বোর্ডের ইনপুটটি ম্যাট্রিক্স, 2 ডি সংগ্রহ বা অন্য যে কোনও কিছু যা আপনার কাছে বোধগম্য হয় তা হিসাবে গৃহীত হতে পারে তবে নিয়মগুলি মেনে চলে । যার পালা এখন এটির জন্য আউটপুট পরবর্তী সেরা পদক্ষেপ , যেখানে এক্স শুরু হয়েছে বলে মনে করা হয় ।
মিনিম্যাক্স অ্যালগরিদমে দ্রুত পটভূমি
মিনিম্যাক্স অ্যালগরিদমের মূল ধারণাটি হ'ল ডিএজি হিসাবে সমস্ত সম্ভাব্য ফলাফলগুলি গণনা করা এবং তারপরে প্রথম পদক্ষেপের দ্বারা চালিত প্লেয়ারের চালচলনের ক্রমটি প্লেয়ারের কাছে উপকারের দ্বারা তাদের ওজন করা। সমস্ত সম্ভাব্য ফলাফলগুলি প্রথম পদক্ষেপের দ্বারা 'বালতিযুক্ত' হয়ে থাকে এবং সমস্ত ফলাফলের যোগফলের ভিত্তিতে স্কোর করা হয় (হারের জন্য -1, টাইয়ের জন্য 0 এবং একটি জয়ের জন্য 1)। একাধিক খেলোয়াড় খেলতে হবে এমন বাস্তবায়নে, আপনি প্লেয়ারের সমস্ত সম্ভাব্য পদক্ষেপ এবং প্রতিপক্ষের দ্বারা সমস্ত সম্ভাব্য প্রতিক্রিয়াগুলি গণনা করেন। উদাহরণস্বরূপ, টিক-টাক-টো-এর একটি খেলায় (প্রথম পদক্ষেপের পরে) আপনি তৈরি করতে পারেন এমন 8 টি সম্ভাব্য প্রথম চাল রয়েছে এবং কেবলমাত্র পরবর্তী বারের বিশ্লেষণ করার সময় সেগুলি সমান বলে মনে হতে পারে। তবে প্রতিটি পদক্ষেপের চূড়ান্ত ফলাফলের জন্য সম্ভাব্য সকল ফলাফলের পুনরাবৃত্তি করে যা চূড়ান্ত পরিণতিতে ফলাফল দেয় এবং সেগুলি সংক্ষিপ্ত করে,
টিক-ট্যাক-টো-এর ক্ষেত্রে মিনি-সর্বাধিক অ্যালগরিদমের আরও গভীরতর এবং প্রাসঙ্গিক সংক্ষিপ্তসার জন্য এখানে আরও পড়ুন: http://neverstopbuilding.com/minimax
এক্সকেসিডি (3x3 সমাধান কেবল)
নিয়ম
- যে কোনও ভাষা ব্যবহার করা যেতে পারে, তবে কোনও বাহ্যিক মিনিম্যাক্স গ্রন্থাগার অনুমোদিত নয়।
- আউটপুট একটি স্থানাঙ্ক (0-n, 0-n) বা একটি সংখ্যা (1-n * n) হতে পারে সেরা পরবর্তী পরবর্তী পদক্ষেপের সূচক।
- এগুলি ছাড়াও, আপনি অবশ্যই জয়ের পরিবর্তে কোনও ক্ষেত্রে সেরা পরাজয় বা টাই হ'ল চিহ্নিত করতে সক্ষম হবেন।
- আপনি যেভাবে ক্ষতি বা টাই বোঝাচ্ছেন তা আবার আপনার পক্ষে up
- ইনপুট অবশ্যই traditionalতিহ্যবাহী এক্স এবং হে ব্যবহার করবে এবং আপনাকে অবশ্যই এক্স চালগুলি প্রথমে ধরে নিতে হবে; ফাঁকা স্থানগুলি যে কোনও কিছু দ্বারা প্রতিনিধিত্ব করা যায়।
- আপনার প্রোগ্রামটিতে আসা যে কোনও ইনপুটগুলির এন ও ও এন + 1 এক্স রয়েছে বলে আপনি ধরে নিতে পারেন, অন্য কথায় আপনি ধরে নিতে পারেন আপনি একটি সুগঠিত বোর্ড পাচ্ছেন।
- বোর্ডের বর্তমান অবস্থা অবশ্যই আপনার প্রোগ্রামের একমাত্র ইনপুট হতে হবে, আপনি যদি পুনরাবৃত্তি ব্যবহার করছেন তবে ইনপুট প্রয়োজনীয়তার সুবিধার্থে সহায়ক পদ্ধতি অবশ্যই তৈরি করতে হবে। স্পষ্টতার জন্য /codegolf//a/92851/59376 দেখুন ।
- 10> = n> = 1 এর যে কোনও মান অবশ্যই সমর্থিত হবে; যদি আপনার প্রোগ্রামটি এন> 10 এর জন্য "সময়সীমা" বেরিয়ে আসে তবে আমি এটি গ্রহণযোগ্যও বোধ করি কারণ কিছু ভাষায় প্রসেসিং শক্তিটি উল্লেখযোগ্যভাবে হ্রাস পেয়েছে (বিশেষত ওয়েব-ফেসিং কনসোলগুলি ব্যবহার করে)।
বিচার করা
- এটি কোড-গল্ফ, তাই প্রোগ্রামের সর্বনিম্ন বাইট গণনা এবং মানের লুফোলগুলি সর্বজনীনভাবে অনুমোদিত নয়।
- টাইয়ের ক্ষেত্রে, সবচেয়ে বড় 'এন' সমর্থনকারী প্রোগ্রামটি বিজয়ী হবে।
উদাহরণ ইনপুট
2x2
[[X,O]
[-,-]]
আউটপুট: 2 বা [0,1] (3 বা [1,1] এছাড়াও যুক্তিযুক্তভাবে সঠিক হবে) (অবস্থানের ইঙ্গিতের কিছু ফর্ম, যতক্ষণ আপনি সহজেই আপনার ব্যবহৃত ফর্ম্যাটটি ব্যাখ্যা করতে পারবেন ততক্ষণ নির্বিচারে)
3x3
[[X,O,X]
[O,X,-]
[-,-,-]]
আউটপুট: -1 (ক্ষতি)
আবার আপনি যে কোনও ইনপুট ফর্ম্যাটটি চান তা অনুমোদিত, তবে এক্স এবং ও এর অবশ্যই ব্যবহার করা উচিত, প্রদত্ত উদাহরণগুলি কেবলমাত্র অনুপ্রেরণার জন্যই সেই বিন্যাসে সীমাবদ্ধ রাখার উদ্দেশ্যে নয়।