कनेक्ट 4 खेलें!


20

कनेक्ट 4 का खेल खेलने के लिए एक कार्यक्रम लिखें । आपको इनपुट के रूप में बोर्ड की स्थिति दी जाती है और आपको यह तय करना चाहिए कि आपके टुकड़े को किस पंक्ति में रखना है या तो एक पंक्ति में 4 प्राप्त करें (क्षैतिज, लंबवत, या तिरछे) या अपने प्रतिद्वंद्वी को वही करने से रोकें।

बोर्ड एक 6x7 सरणी है, जहां प्रत्येक कक्ष खाली ('') हो सकता है, जिसमें आपका टुकड़ा ('X') या आपके प्रतिद्वंद्वी का टुकड़ा ('O') हो सकता है। एक उदाहरण बोर्ड:

O      
XX    X
XOX  OO
XOO OXO
OXXOXXO
XOXOXOX

आप विकर्ण जीत के लिए कॉलम 3 (कॉलम में 0-6, बाईं ओर से क्रमांकित) खेलना चाहते हैं। इसलिए आप आउटपुट:

3

आपके कोड को एक कॉलम नंबर आउटपुट करना होगा, और उसे निम्न मानदंडों को पूरा करना होगा:

  1. आप उस कॉलम में नहीं खेल सकते जिसमें पहले से ही 6 टुकड़े हैं।
  2. यदि कम से कम एक जीतने की चाल है, तो आपको उनमें से एक खेलना चाहिए।
  3. यदि आप अपने प्रतिद्वंद्वी को उसके अगले कदम पर जीतने से रोक सकते हैं, तो आपको ऐसा करना चाहिए।

ध्यान दें कि इष्टतम खेल आवश्यक नहीं है, केवल यह कि आप तत्काल जीत लेते हैं या अपने प्रतिद्वंद्वी की तत्काल जीत को रोकते हैं। यदि आपके प्रतिद्वंद्वी के पास जीतने का एक से अधिक तरीका है, तो आपको उनमें से किसी को ब्लॉक करने की आवश्यकता नहीं है।

आपको मानक इनपुट पर बोर्ड दिया गया है और आपको एक कॉलम नंबर प्रिंट करना होगा जिसमें आप मानक आउटपुट पर खेलना चाहते हैं। बोर्ड को अच्छी तरह से गठित (कोई छेद नहीं, कम से कम एक संभव कदम) और पहले से ही किसी भी खिलाड़ी के लिए जीत नहीं होने की गारंटी है।

सबसे छोटा कोड जीतता है।

उदाहरण 1

      X
      O
      X
      O
 OOO  X
 XXX  O

आपको जीत के लिए या तो कॉलम 0 या 4 खेलना होगा।

उदाहरण 2

      X
X     X
O     O
XOX  XO
XXO XOX
XXO XXO

आपको अपने प्रतिद्वंद्वी की तत्काल जीत को अवरुद्ध करने के लिए कॉलम 3 खेलना होगा।

उदाहरण 3

X      
XO     
OX    O
XO   XX
XXO OOO
OOO XXO

आप अपने प्रतिद्वंद्वी को जीतने या जीतने से रोक नहीं सकते हैं, इसलिए आप किसी भी कॉलम 1-6 (0 भरा हुआ है) को खेल सकते हैं।

उदाहरण 4

X      
O      
X      
OOO    
XOX    
OXOX   

आप कॉलम 3 में नहीं खेल सकते, क्योंकि यह आपके प्रतिद्वंद्वी को तुरंत जीतने देता है। आप कॉलम 1-2 या 4-6 में खेल सकते हैं।

जवाबों:


9

सी, 234 286 256 चर

हर कदम के प्रयास के बाद प्रतिद्वंद्वी जीतने की चाल की जाँच करके, समस्या को सही ढंग से हल करने के लिए निश्चित।

यह कोड इनपुट फ़ाइल प्रारूप के लिए बहुत संवेदनशील है - प्रत्येक पंक्ति को 7 वर्ण + न्यूलाइन को जीतना होगा।
बोर्ड को 7x6 के बजाय 8x8 मैट्रिक्स के रूप में माना जाता है। 8 वें कॉलम में न्यूलाइन हैं, और 2 अतिरिक्त पंक्तियों में शून्य हैं, इसलिए वे समाधान में हस्तक्षेप नहीं करते हैं। वे वास्तव में मदद करते हैं - दाएं कॉलम से दाएं चलते समय, आप न्यूलाइन कॉलम से टकराते हैं, जो एक सीमा जांच के रूप में कार्य करता है।

wजीतने या ब्लॉक करने के अवसर के लिए एक स्थिति की जाँच करता है। qचारों ओर जाँच करने के लिए कक्ष होना चाहिए। यह 4 दिशाओं के माध्यम से लूप का उपयोग करता है (9,8,7 से शुरू होता है, फिर कई बार 1)। दिशा में
Cशुरू होने वाले समान वर्णों के अनुक्रम के लिए जाँच , आगे और पीछे दोनों। यह दोनों अनुक्रमों (प्रारंभिक स्थिति की गिनती नहीं) का योग देता है, इसलिए यदि यह 3 लौटता है, तो 4 की एक पंक्ति होती है।qd

char B[99],q;
C(i,d){
    return B[d*i+++q]-B[q]?d>0?C(1,-d):0:1+C(i,d);
}
w(x){
    return x&&C(1,x>6?x:1)>2|w(x-1);
}
t(l,c,r,v){
    for(;c--;)B[q=c]&32&B[c+8]-32?r=w(9,B[c]=l)?v=c:v||r*t(79,l,0,1)?r:c,B[c]=32:0;
    return r;
}
main(){
    putchar(48+t(88,16+read(0,B+16,48),0,0)%8);
}

5

पायथन 2.x - 594 591 576 557 523 459 458 433 बाइट्स

यह मैंने अब तक हासिल किया सबसे अच्छा है। मुझे लगता है कि सी। को हराना बहुत कठिन है, मुझे कहना पड़ेगा।

r=range
f=[]
exec'f+=list(raw_input());'*6
def n(p):
 o,b,a,k=[],1,'O',lambda q:any([o[i:i+4]==list(q)*4for o in(f[x-x%7:],f[x%7::7])for i in r(3)]+[all(q==f[7*(y+u*i)+z+i]for i in r(4))for u,z,v,c in((1,0,3,4),(-1,3,6,3))for y in r(z,v)for z in r(c)])
 for x in r(42):
    if x>34<a>f[x]or x<35and f[x+7]>'0'>f[x]:f[x]=p;z=k(p)*b;o=z*[x]+o+[x]*(a==p or n(a)[1]);b-=z;f[x]=' '
 return o[0]%7,b
a,b,c,d=n('X')+n('O')
print(a,(c,a)[d])[b]

इफ-लाइन (लाइन 7) में एक टैब का इंडेंटेशन होता है। एसई को टैब पसंद नहीं है।


2
मैं इन्हें परिष्कृत करने में बहुत अधिक समय लगाता हूं। इसके अलावा, 458 बाइट संस्करण ने # 4 उदाहरण के लिए सही ढंग से काम नहीं किया। 25 बाइट दूर ले जाओ और यह करता है। जादू।
देखिए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.