পাইথন 2: 399 401 349 333 317 370 বাইট
2x বাগ ফিক্স: ক্রেডিট l4m2
-52 চরিত্রগুলি: ভূগর্ভস্থমোনরেলে জমা il
-16 অক্ষর: জনাথন ফ্রেচের কাছে কৃতিত্ব
-26 অক্ষর: ব্যবহারকারীকে ক্রেডিট 202729
def f(b):
t=4,9,2,3,5,7,8,1,6;n=lambda k:[t[i]for i,j in enumerate(b)if j==k];p,o,a,I=n(2),n(1),n(0),t.index
for i in p:
for j in p:
for k in a:
if i+j+k==15and-j+i:return I(k)
for i in o:
for j in o:
for k in a:
if i+j+k==15and-j+i:return I(k)
for i in 9,3,7,1:
if i in a and 5 in p:return I(i)
for i in 5,4,2,8,6:
if i in a:return I(i)
return I(a[0])
অনলাইনে চেষ্টা করে দেখুন!
লিনিয়ার বীজগণিত কোর্সের প্রথম দিন আমি শেষ সেমিস্টার নিয়েছিলাম, আমার অতিপ্রাকৃত স্নাতক ছাত্র প্রশিক্ষক প্রস্তাব করেছিলেন যে আপনি যদি টিক-ট্যাক-টো বোর্ডকে ম্যাট্রিক্স হিসাবে উপস্থাপন করেন:
4 | 9 | 2
--+---+--
3 | 5 | 7
--+---+--
8 | 1 | 6
তারপরে পরপর তিনটি পাওয়া পারা [1,9] এর মধ্যে 15 টি সংখ্যা যুক্ত করে তিনটি সংখ্যা বাছাইয়ের সমান This এই উত্তরটি এই ধারণাটি কাজে লাগায়। ফাংশনটি বোর্ডের প্রতিনিধিত্বকারী নয় নম্বর সমন্বিত একটি তালিকা গ্রহণ করে। 0 একটি খালি স্থান নির্দেশ করে, 1 প্রতিপক্ষের দ্বারা দখল করা হয়েছে, এবং 2 প্রোগ্রাম দ্বারা নির্মিত পূর্ববর্তী নাটকটির প্রতিনিধিত্ব করে। প্রথম 3 লাইনগুলি বুঝতে পারে যে প্রোগ্রামটি কী সংখ্যাটি বেছে নিয়েছে (পি), বিরোধীরা বাছাই করেছে (ও) এবং এখনও উপলব্ধ (ক)। এটি তখন উপলভ্য সংখ্যাগুলির মধ্যে নজর রাখে এবং দেখায় যে তাদের মধ্যে দুটি সংখ্যার সাথে মিলিত হয়ে এটি ইতিমধ্যে পনেরোটি যোগ করেছে। এটি যদি করে তবে এটি স্কোয়ারটি বাছাই করবে এবং জিতবে। যদি তাত্ক্ষণিকভাবে বিজয়ী পদক্ষেপ না থাকে, তবে প্রতিপক্ষ একই পদ্ধতি ব্যবহার করে জিততে পারে কিনা তা পরীক্ষা করে দেখবে। যদি তারা পারেন তবে এটি তাদের বিজয়ী স্কয়ার লাগবে take যদি বিজয়ী বা অবরুদ্ধ পদক্ষেপ নাও পাওয়া যায় তবে এটি একটি কোণে সরানো হবে। এটি একটি বোকা সঙ্গীকে বাধা দেয়:
- - -
- X -
- - -
- O - # Bad Move
- X -
- - -
- O X
- X -
- - -
- O X
- X -
O - -
- O X
- X -
O - X
যদি এগুলির কোনওটি না ঘটে তবে এটি নির্বিচারে একটি বর্গ নির্বাচন করবে। ফাংশনটি অ্যালগরিদম দ্বারা নির্বাচিত 0 সূচকযুক্ত বর্গের প্রতিনিধিত্ব করে [0,8] এর একটি সংখ্যা আউটপুট করে।
সম্পাদনা করুন: অ্যালগরিদমটি এখন তির্যক কেন্দ্রের উপরে কেন্দ্রকে অগ্রাধিকার দেয়, যা l4m2 এবং সম্পর্কিত কৌশল দ্বারা নির্দেশিত অন্য বোকা সঙ্গীর সম্ভাবনা রোধ করবে।
সম্পাদনা: স্পষ্ট করার জন্য, ফাংশনটি অ্যারে আকারে একটি বোর্ডে নিয়ে যায় এবং [0,8] তে পূর্ণসংখ্যার হিসাবে একটি পদক্ষেপ আউটপুট করে। কারণ এই আই / ও কৌশলটি এতটাই জটিল, এখানে একটি মোড়ক স্ক্রিপ্ট এটি আরও ইন্টারেক্টিভ করে তোলে। এটিতে একটি একক কমান্ড লাইন আর্গুমেন্ট লাগে, যা প্লেয়ারের আগে চলে গেলে 1 হওয়া উচিত এবং প্রোগ্রামটি আগে চলে গেলে 0 হবে।
import sys
def f(b):
t=4,9,2,3,5,7,8,1,6;n=lambda k:[t[i]for i,j in enumerate(b)if j==k];p,o,a,I=n(2),n(1),n(0),t.index
for i in p:
for j in p:
for k in a:
if i+j+k==15and-j+i:return I(k)
for i in o:
for j in o:
for k in a:
if i+j+k==15and-j+i:return I(k)
for i in 9,3,7,1:
if i in a and 5 in p:return I(i)
for i in 5,4,2,8,6:
if i in a:return I(i)
return I(a[0])
board = [0,0,0,0,0,0,0,0,0]
rep = {0:"-",1:"X",2:"O"}
turn = int(sys.argv[1])
while True:
for i in range(3):
print rep[board[i*3]]+" "+rep[board[i*3+1]]+" "+rep[board[i*3+2]]
print
if turn:
move = int(raw_input("Enter Move [0-8]: "))
else:
move = f(board)
board[move] = turn+1
turn = (turn+1)%2
we can assume that all previous moves of the 2nd player were also played by our engine