टिक-टैक-पैर की अंगुली पर खोएं


18

एक प्रोग्राम लिखें जो एक मिसरे टिक-टैक-टो का खेल खेलेगा। यही है, लक्ष्य अपने प्रतिद्वंद्वी को एक पंक्ति में तीन लेने के लिए मजबूर करना है।

मानक इनपुट पर स्वीकार करें या तो 'X' या 'O' (अक्षर, शून्य नहीं), यह निर्धारित करने के लिए कि कार्यक्रम किस तरफ खेला जाएगा। फिर अपनी बारी पर अपनी चाल के लिए एक अंक का उत्पादन करें, और खेल खत्म होने तक अपने विरोधियों की बारी पर एक भी अंक पढ़ें (एक्स हमेशा पहले चला जाता है)। एक बार विजेता का फैसला करने के बाद, एक्स या ओ के लिए कौन जीता, या ड्रा के लिए डी। उदाहरण के लिए, यदि ओ को एक पंक्ति में 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प्रतिनिधित्व करते हुए, 10O का 11प्रतिनिधित्व करता है और X Mका प्रतिनिधित्व 01करता है। एक खोने वाले ट्रिपल ( 21= 0b010101= शीर्ष पंक्ति आदि) के धब्बों के साथ बिटमास्क का एक सेट है Xयदि कोई हारता है तो गणना करता है । के लिए ट्रिपल kएक बोर्ड पर मौजूद है। Sएक्स के लिए एक न्यूनतम चाल के लिए न्यूनतम खोज करता है, स्कोर की एक जोड़ी लौटाता है (1 = जीत, -1 = हार, 0 = ड्रा) और एक वर्ग सूचकांक। ^87381(= ^0b010101010101010101) खाली वर्गों को अपरिवर्तित छोड़ते समय X और O को प्रवाहित करता है।

कंप्यूटर कभी नहीं खोता है, इसलिए मुझे उस चेक को शामिल करने की आवश्यकता नहीं थी :)।

वहाँ एक आसान / कम नियम आधारित एल्गोरिथ्म है, लेकिन यह काम करता है।


डरपोक डरपोक बिटकॉइन जादू टोना +1
रोहन झुनझुनवाला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.