আপনার লক্ষ্য উইথফের নিম এর গেমের জন্য নিখুঁত খেলোয়াড় লিখুন ।
উইথফের নিমের নিয়ম
উইথফের নিম একটি ডিটারমিনিস্টিক দুই খেলোয়াড়ের খেলা যা দুটি গাদা দুটি অভিন্ন কাউন্টারের সাথে খেলে। খেলোয়াড়রা বিকল্প মোড়, যাতে তারা এর মধ্যে একটি করে:
- প্রথম স্তূপ থেকে এক বা একাধিক কাউন্টার সরান
- দ্বিতীয় স্তূপ থেকে এক বা একাধিক কাউন্টার সরান
- প্রথম স্তূপ এবং দ্বিতীয় স্তূপ উভয় থেকে সমান সংখ্যক কাউন্টার (এক বা একাধিক) সরান।
অবশ্যই, পাইলস নেতিবাচক যেতে পারে না, তবে তারা 0 এ যেতে পারে যে কোনও খেলোয়াড় সামগ্রিকভাবে শেষ কাউন্টারটিকে মুছে ফেললে গেমটি জিতবে।
আরও জ্যামিতিক বিবেচনার জন্য, আপনি এই অ্যাপলেটটিতে খেলতে পারেন এমন একটি গেমের সমতুল্য সূচনা এখানে । একক রানী কোয়ার্টার-অসীম দাবা বোর্ডের কিছু স্কোয়ারে শুরু হয় যার কোণটি নীচে-বামে রয়েছে। খেলোয়াড়রা বিকল্পভাবে রানিকে রানী করে, যা দাবা রানির মতো চলে তবে তিন দিকে সীমাবদ্ধ:
- নিচে
- বাম
- ত্রিভুজ নীচে এবং বাম
যে রানিকে কোণে সরিয়ে দেয় সে জিতল।
রানির স্থানাঙ্কগুলি (কোণার সাথে (0,0)
) সম্পর্কিত পাইলগুলির মাপের সাথে সংযুক্ত করে, উভয় গেম একই রকম দেখতে সহজ easy
নিখুঁত খেলা
(নিখুঁত খেলা এবং বিজয়ী পদক্ষেপের ধারণার সাথে পরিচিত হলে আপনি এড়িয়ে যেতে পারেন))
যেহেতু উইথফের নিম একটি সীমাবদ্ধ এবং নির্বিচারবাদী খেলা, তাই এটি নিখুঁত খেলার ধারণা রয়েছে । একটি নিখুঁত খেলোয়াড় একটি কৌশল যা সর্বদা তাত্ত্বিকভাবে জেতা অবস্থান থেকে জয়ী হবে, যার অর্থ এমন একটি অবস্থান যেখানে একটি কৌশল রয়েছে যা একটি জয় নিশ্চিত করে।
একটি বিজয়ী কৌশল হিসাবে, খেলোয়াড়ের সবেমাত্র সরানো জন্য তাত্ত্বিক বিজয়ী অবস্থানে সর্বদা স্থানান্তরিত হওয়ার পক্ষে যথেষ্ট, এবং এইভাবে প্লেয়ারটি আর না চলে। এই বিজয়ী অবস্থানগুলির মধ্যে প্রথমটি (একে শীতল অবস্থানগুলিও বলা হয় ) (0,0), (1,2), (2,1), (3,5), (5,3)
। উইথফের নিমের জন্য একটি বিজয়ী কৌশল এবং উইন পজিশনগুলি তৈরি করার সূত্রের জন্য অ্যালগরিদমের ব্যাখ্যার জন্য উইকিপিডিয়া নিবন্ধটি দেখুন ।
প্রোগ্রাম প্রয়োজনীয়তা
একটি প্রোগ্রাম লিখুন বা ফাংশন ইনপুট হিসাবে একটি অবস্থান নেয় এবং সেই পদক্ষেপের পরে অবস্থানের আকারে একটি বিজয়ী পদক্ষেপ আউটপুট করে। সবচেয়ে কম বাইট জেতা
যদি বিজয়ী পদক্ষেপের অস্তিত্ব থাকে না, অর্থ্যাৎ অবস্থানটি একটি তাত্ত্বিক ক্ষতি, আপনার প্রোগ্রামটি তাই এবং জব্দ করা উচিত।
আপনার প্রোগ্রাম অবশ্যই একটি যুক্তিসঙ্গত সময়ের মধ্যে চলতে হবে। সুতরাং, একটি ক্ষতিকারক পুনরাবৃত্তি গেম ট্রি অনুসন্ধান যথেষ্ট হবে না। আপনি যদি কোনও কৌশল পূর্বনির্ধারিত এবং হার্ড-কোড করতে চান তবে তা ঠিক।
ইনপুট
(i,j)
গাদা আকারের প্রতিনিধিত্বকারী অ-নেতিবাচক সংখ্যার একটি জুড়ি , প্রতিটি সর্বাধিক 99
। এটি দুটি সংখ্যা, একটি টুপল, একটি তালিকা বা আপনার পছন্দসই ধারক হতে পারে।
আউটপুট
আপনার পদক্ষেপের পরে অবস্থানটি মুদ্রণ বা আউটপুট করুন, আবার দুটি সংখ্যা বা এর ধারক হিসাবে। এটি অবশ্যই একটি বিজয়ী অবস্থানে আইনি পদক্ষেপ হতে হবে। যদি এমন একাধিক পদক্ষেপ থাকে তবে যে কোনও একটি ভাল, তবে কেবল একটি।
যদি বিজয়ী পদক্ষেপ না থাকে তবে আপনাকে অবশ্যই আউটপুটে এটি নির্দেশ করতে হবে। কোন আউটপুট মত False
, None
, 0, অথবা (-1,-1)
কি করতে হবে, যতদিন এটি একটি আইনগত অবস্থান নয়, এবং প্রতি হারানো ইনপুট জন্য একই।
উদাহরণ রান
f(5,0) = (0,0)
f(2,2) = (1,2) # Or (2,1) or (0,0)
f(1,2) = False
f(13,9) = (13,8) # Or (10,6)
f(10,6) = False
f(5,10) = (5,3)
f(25,30) = (8,13)