টিক-ট্যাক-টুতে হারান


18

এমন একটি প্রোগ্রাম লিখুন যা একটি মিসের টিক-ট্যাক-টো-এর খেল খেলবে। অর্থাৎ, লক্ষ্যটি হল প্রতিপক্ষকে পর পর তিনটি নিতে বাধ্য করা।

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

ধরুন বোর্ডটি এর মতো সংখ্যাযুক্ত:

0|1|2
-----
3|4|5
-----
6|7|8

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

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

উত্তর:


10

পাইথন, 383 অক্ষর

M=[21,1344,86016,4161,16644,66576,65793,4368]
X=lambda B,k:any(m*k==B&m*3for m in M)
def S(B):
 if X(B,2):return 1,
 M=[i for i in range(0,18,2)if B>>i&3<2]
 return max((-S((B|3<<i)^87381)[0],i)for i in M)if M else(0,)
r='D'
c=ord(raw_input())&1
B=0
for i in range(9):
 if i&1==c:m=S(B^c*87381)[1];print m/2;B|=3-c<<m
 else:
  B|=2+c<<input()*2
  if X(B,2+c):r='XO'[c];break
print r

বোর্ড Bএকটি পূর্ণসংখ্যা, বর্গাকার প্রতি দুই বিট ব্যবহার করে যেমন প্রতিনিধিত্ব করা হয় 00এবং 01খালি প্রতিনিধিত্বমূলক, 10হে প্রতিনিধিত্বমূলক এবং 11এক্স প্রতিনিধিত্বমূলক Mসঙ্গে bitmasks একটি সেট 01একটি হারানো ট্রিপল (এর স্পটের মধ্যে 21= 0b010101= শীর্ষ সারিতে ইত্যাদি) Xকোন হারানো যদি নির্ণয় ট্রিপল kএকটি বোর্ডে উপস্থিত। Sএক্স এক্সের জন্য সর্বোত্তম পদক্ষেপের জন্য মিনিম্যাক্স অনুসন্ধান করে, স্কোরের একটি জোড়া (1 = জয়, -1 = হারাতে হবে, 0 = ড্র) এবং একটি বর্গ সূচককে ফিরিয়ে দেয়। ^87381(= ^0b010101010101010101) খালি স্কোয়ারগুলি অপরিবর্তিত রেখে যাওয়ার সময় X এবং O ফ্লিপ করে।

কম্পিউটারটি কখনই হেরে যায় না, সুতরাং আমার সেই চেকটি অন্তর্ভুক্ত করার দরকার ছিল না :)।

সম্ভবত এখানে একটি সহজ / খাটো নিয়ম-ভিত্তিক অ্যালগরিদম রয়েছে তবে এটি কার্যকর works


লুক্কায়িত স্নেকি বিটওয়াইজ ডাইনোক্রাফট +1
রোহান ঝুনঝুনওয়ালা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.