আপনার পরবর্তী পদক্ষেপ কি?


18

এই চ্যালেঞ্জ একটি লিখতে হয় minimax ফাংশন একটি পরবর্তী শ্রেষ্ঠ চাল আপনার পছন্দের একটি ভাষায়, আউটপুট NxN খেলা মাংসপেশীর আক্ষেপ-Tac অঙ্গুলী দেওয়া বর্তমান বোর্ড রাষ্ট্র । বোর্ডের ইনপুটটি ম্যাট্রিক্স, 2 ডি সংগ্রহ বা অন্য যে কোনও কিছু যা আপনার কাছে বোধগম্য হয় তা হিসাবে গৃহীত হতে পারে তবে নিয়মগুলি মেনে চলেযার পালা এখন এটির জন্য আউটপুট পরবর্তী সেরা পদক্ষেপ , যেখানে এক্স শুরু হয়েছে বলে মনে করা হয়

মিনিম্যাক্স অ্যালগরিদমে দ্রুত পটভূমি

মিনিম্যাক্স অ্যালগরিদমের মূল ধারণাটি হ'ল ডিএজি হিসাবে সমস্ত সম্ভাব্য ফলাফলগুলি গণনা করা এবং তারপরে প্রথম পদক্ষেপের দ্বারা চালিত প্লেয়ারের চালচলনের ক্রমটি প্লেয়ারের কাছে উপকারের দ্বারা তাদের ওজন করা। সমস্ত সম্ভাব্য ফলাফলগুলি প্রথম পদক্ষেপের দ্বারা 'বালতিযুক্ত' হয়ে থাকে এবং সমস্ত ফলাফলের যোগফলের ভিত্তিতে স্কোর করা হয় (হারের জন্য -1, টাইয়ের জন্য 0 এবং একটি জয়ের জন্য 1)। একাধিক খেলোয়াড় খেলতে হবে এমন বাস্তবায়নে, আপনি প্লেয়ারের সমস্ত সম্ভাব্য পদক্ষেপ এবং প্রতিপক্ষের দ্বারা সমস্ত সম্ভাব্য প্রতিক্রিয়াগুলি গণনা করেন। উদাহরণস্বরূপ, টিক-টাক-টো-এর একটি খেলায় (প্রথম পদক্ষেপের পরে) আপনি তৈরি করতে পারেন এমন 8 টি সম্ভাব্য প্রথম চাল রয়েছে এবং কেবলমাত্র পরবর্তী বারের বিশ্লেষণ করার সময় সেগুলি সমান বলে মনে হতে পারে। তবে প্রতিটি পদক্ষেপের চূড়ান্ত ফলাফলের জন্য সম্ভাব্য সকল ফলাফলের পুনরাবৃত্তি করে যা চূড়ান্ত পরিণতিতে ফলাফল দেয় এবং সেগুলি সংক্ষিপ্ত করে,

টিক-ট্যাক-টো-এর ক্ষেত্রে মিনি-সর্বাধিক অ্যালগরিদমের আরও গভীরতর এবং প্রাসঙ্গিক সংক্ষিপ্তসার জন্য এখানে আরও পড়ুন: http://neverstopbuilding.com/minimax

এক্সকেসিডি (3x3 সমাধান কেবল)

টিক-ট্যাক-টো এর 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 (ক্ষতি)


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


দুঃখিত ডিজেএমসিমেহেম, আমি আসলে এই জিনিসগুলিকে ট্যাগ করার চেষ্টা করেছি কিন্তু আমি এখানে নতুন থাকায় আমি পারিনি।
ম্যাজিক অক্টোপাস উরান

বোনাস এছাড়াও অপসারণ, টেডিয়াম ছাড়া কিছুই যোগ।
ম্যাজিক অক্টোপাস উরান

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

1
3x3 উদাহরণে, ও যা খেলুক না কেন তা হারাতে হবে, তবে আপনি বলছেন আউটপুট [2,1] হওয়া উচিত, তা কেন?
দাদা

সম্পাদিত, ভাল ধরা। আমি কী ভাবছিলাম জানি না, এটি ছিল নেতিবাচক উদাহরণ।
ম্যাজিক অক্টোপাস উরন

উত্তর:


8

পার্ল, 101 98 বাইট

+4জন্য অন্তর্ভুক্ত-0p

এসটিডিনে ইনপুট দিয়ে চালান

tictactoe.pl
OXO
---
--X
^D

আউটপুট একই চিত্র, তবে প্রতিটি পদক্ষেপের সাথে তার স্থিতিটি আপডেট হয়, 1একটি জয়কে 2উপস্থাপন করে, একটি ড্রকে 3উপস্থাপন করে এবং ক্ষতির প্রতিনিধিত্ব করে। এই ক্ষেত্রে যে হবে

OXO
223
21X

সুতরাং 3 পদক্ষেপগুলি আঁকুন, 1 জয় এবং 1 টি হেরে (আমি যদি এই আউটপুট ফর্ম্যাটটি গ্রহণযোগ্য না হয় তবে আমি সমাধানটি আপডেট করব, তবে বেসিক কোডটি একই থাকবে)

tictactoe.pl:

#!/usr/bin/perl -0p
m%@{[map"O.{$_}"x"@-"."O|",1-/.(
)(.)/,@-]}Z%sx||s%-%$_="$`X$'";y/XO/OX/;do$0%eg?/1/?3:1+/2/:2

এটি ইতিমধ্যে বেদনাদায়কভাবে ধীরে ধীরে এবং খালি 3 * 3 বোর্ডের জন্য প্রচুর মেমরি ব্যবহার করে (কেন আসলে, পুনরাবৃত্তিটি এত গভীর হয় না Must অবশ্যই কিছু মেমরি ফাঁস হওয়া উচিত)। মেমোজাইজিংয়ের জন্য 6 বাইট খরচ যোগ করা কিন্তু এটি অনেক স্যানার:

#!/usr/bin/perl -0p
$$_||=m%@{[map"O.{$_}"x"@-"."O|",1-/.(\n)(.)/,@-]}Z%sx||s%-%$_="$`X$'";y/XO/OX/;do$0%eg?/1/?3:1+/2/:2

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

যদি একটি পুনরাবৃত্ত ফাংশন 'ফুটো' ঠিক কিভাবে হতে পারে ??? খুব উচ্চতর ভাষা সিপিইউতে 32 বিট রেজিস্টারটি দেখতে পাবে না (বা এটি সাধারণ নির্দেশ হিসাবে কিছু)
রোজলুপি

এই প্রসঙ্গে @ রসলুপ লিকের অর্থ অ্যাক্সেসযোগ্য হারানো স্মৃতি নয় arily পার্ল যখন মেমরি প্রকাশ করে তখন এটি অদ্ভুত থাকে, প্রায়শই এটি আপনি প্রত্যাশার চেয়ে পরে করেন এবং তাই আপনি প্রত্যাশার চেয়ে অনেক বেশি মেমরি ব্যবহার করেন। এটি আপনার ডেটাস্ট্রাকচারগুলি বাড়ানোর প্রত্যাশায় সরাসরি প্রয়োজনের চেয়ে বেশি বরাদ্দও দেয়। এই ক্ষেত্রে "সাধারণ" পুনরাবৃত্তিটি কোনও ফাংশনের সাথে do$0ব্যবহারের পরিবর্তে 10 গুণ কম মেমরি ব্যবহার করবে memory মনে মনে, এই কেসটি এত চরম যে এটি আসলে একটি সত্যিকারের মেমরি ফুটো হতে পারে।
টন হসপেল

কেবল একজনই রেজিস্টারগুলি বা বেস নির্দেশাবলী দেখতে পাচ্ছেন না (হলের নির্দেশাবলী থেকে) কিন্তু মেমরি ব্যবহারের নিয়ন্ত্রণ হারাবেন ... আমার জন্য তারা স্কেল করেন না ...
রোজলুপ

অনেক দিন হয়েছে, আপনি আমার লোককে জিতবেন, দুঃখজনক হলেও আমরা আরও চেষ্টা করি নি।
ম্যাজিক অক্টোপাস আরন

2

জাভাস্ক্রিপ্ট (ES6), 320 294 বাইট

(b,p,d,M,S=-2)=>(T=(p,q,r,s)=>b[p][q]==(n=b[r][s|0])&&n!='-',w=0,b.map((r,y)=>(l=r.length-1,m=15,r.map((c,x)=>(m&=8*T(l-x,x,l)+4*T(x,x,0)+2*T(x,y,0,y)+T(y,x,y))),w|=m)),w?-1:(b.map((r,y)=>r.map((c,x)=>S<1&&c=='-'&&(r[x]='O.X'[p+1],(s=-f(b,-p,1))>S&&(S=s,M=[x,y]),r[x]=c))),S=S+2?S:0,d?S:[M,S]))

ইনপুট

1) বর্তমান বোর্ডকে বর্ণনা করে এমন একটি অ্যারের অ্যারে, যেমন:

[['X', '-'], ['-', 'O']]

2) একটি পূর্ণসংখ্যা বর্তমান টার্নটি বর্ণনা করে: 1 = X, -1 =O

আউটপুট

একটি অ্যারে তৈরি:

  • [x, y]বিন্যাসে সেরা পদক্ষেপের বর্ণনা দেয় এমন অ্যারে
  • একটি পূর্ণসংখ্যা হিসাবে গেমের ফলাফল: 1 = জয়, -1 = হ্রাস, 0 = টাই

উদাহরণ

নিম্নলিখিত উদাহরণে, Xখেলে জয়ের নিশ্চয়তা দেওয়া হয় [1, 2]

let f =
(b,p,d,M,S=-2)=>(T=(p,q,r,s)=>b[p][q]==(n=b[r][s|0])&&n!='-',w=0,b.map((r,y)=>(l=r.length-1,m=15,r.map((c,x)=>(m&=8*T(l-x,x,l)+4*T(x,x,0)+2*T(x,y,0,y)+T(y,x,y))),w|=m)),w?-1:(b.map((r,y)=>r.map((c,x)=>S<1&&c=='-'&&(r[x]='O.X'[p+1],(s=-f(b,-p,1))>S&&(S=s,M=[x,y]),r[x]=c))),S=S+2?S:0,d?S:[M,S]))

console.log(JSON.stringify(f(
  [['O','X','O'],
   ['-','-','-'],
   ['-','-','X']],
  1
)));

একটি স্ট্র্যাঞ্জ গেম কেবল জিতানো মুভি খেলছে না।
একটি দুর্দান্ত খেলা সম্পর্কে কীভাবে?


ভাল হয়েছে, ভাল প্রথম এন্ট্রি। আমার কাছে থাকা মন্তব্যগুলিই প্রদত্ত তথ্য 'এক্স সর্বদা প্রথম স্থানান্তরিত হবে' দিয়ে বাইট সংরক্ষণের সম্ভাবনা। এবং আপনি কি একটি 3x3 বোর্ড ছাড়াই চেষ্টা করেছেন?)?
ম্যাজিক অক্টোপাস আরন

@ কারাসোকম্পিউটিং - 'এক্স সবসময় প্রথমে চলে যাবে' এর সাথে আপনি কী মনে রেখেছেন তা বোঝার বিষয়ে নিশ্চিত হন না। একা বোর্ডের দেওয়া দিকটি কোন দিকে চলেছে তা অনুমান করার জন্য এটি ব্যবহার করা যেতে পারে, তবে কম্পিউটিংয়ের জন্য আসলে আরও বেশি বাইট খরচ হবে; সুতরাং আমি অনুমান করি আপনি অন্য কিছু সম্পর্কে কথা বলছেন। উত্তর হ্যাঁ, আমি কিছুটা বড় বোর্ড দিয়ে কিছু পরীক্ষা করেছি did এটি যতক্ষণ প্রত্যাশা করা উচিত ততক্ষণ কাজ করা উচিত ... ভুল ... খুব বেশি খালি অবস্থান নেই। :-)
আরনাউল্ড

চ্যালেঞ্জ বলে The current state of the board must be the only input to your program। আপনার কোডে দুটি ইনপুট দরকার, যা এই নিয়মটি ভঙ্গ করে।
দাদা

1
@Dada - আমি ভাবছিলাম সেটার ব্যাপারে, কিন্তু আমি অনুমান সক্রিয় রঙ হয় বোর্ড রাজ্যের অংশ (শুধু একটি দাবা অবস্থান মত সর্বদা সক্রিয় রঙ + + প্রসঙ্গক্রমে বর্গ + + castling প্রাপ্যতা দিয়ে আসে)। সুতরাং আমি অনুমান করি যে ওপিতে সেই বিষয়টিটি পরিষ্কার করা উচিত। (যদি আপনি ঠিক, যাতে একটি অপ্রয়োজনীয় অতিরিক্ত অসুবিধা মত শব্দ, এই প্রোগ্রামটিতে।)
Arnauld

1
মিম .. আমি তার প্রতিক্রিয়ায় বোর্ড স্টেটের ব্যাখ্যাটি পছন্দ করি। এটি চিন্তা করে, কিছু লানাগাগুলি কেবল ইনপুট হিসাবে স্ট্রিং ব্যবহার করতে পারে, এক্সএক্সসএক্সএক্সও-ও-এর মতো বোর্ড থাকা বোর্ডের মাত্রাগুলির মতো অতিরিক্ত তথ্য ছাড়াই লো বাইট গুনে বোঝা মুশকিল। আমি বোর্ডের স্টেটে অবদান রাখে এমন কোনও অতিরিক্ত ইনপুটগুলিকে অনুমতি দেই, যদিও আমি এখনও মনে করি তথ্যটি 'এক্স চালিয়ে যায় প্রথমে ধরে নেওয়া' দেওয়া 'দেওয়া যাকে বদলে দেয়' তার চেয়ে আলাদা। কিছু ভাষা অনুমান হিসাবে এর সদ্ব্যবহার করবে;)।
ম্যাজিক অক্টোপাস উরন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.