कनेक्ट 4 के विजेता का निर्धारण करें


19

आपको आंशिक रूप से भरा हुआ कनेक्ट 4 ग्रिड (7x6) दिया जाता है।

O X             
O X          
X O X O     O
X O X O   X X
O X X X O O X
O O O X X O X

(इनपुट 1 डी या 2 डी सरणी के रूप में और पत्र या संख्या, आदि के रूप में दिया जा सकता है)

मान लो की

  • X ने खेल शुरू किया।
  • अभी तक कोई नहीं जीता है।
  • हो सकता है कि खिलाड़ी अब तक अच्छा नहीं खेले हों, लेकिन अब वे दोनों ही सबसे अच्छी रणनीति बनाएंगे।
  • इनपुट ग्रिड दोषपूर्ण नहीं है।

आपको एक एकल मान का उत्पादन करना चाहिए जो इंगित करता है कि कौन सा खिलाड़ी जीतता है (या ड्रा)

कोड गोल्फ चुनौती; इतना कम कोड जीतता है। आपके कार्यक्रम को समय की उचित मात्रा में आउटपुट की वास्तविक गणना करने की आवश्यकता नहीं है, लेकिन आपको यह साबित करने में सक्षम होना चाहिए कि आउटपुट एक परिमित मात्रा में सही ढंग से प्राप्त किया जाएगा।



@ MartinBüttner इसका मतलब यह है कि मैं नीचे उतर जाऊंगा, या मेरा सवाल यहां छोड़ना ठीक है?
भूत_न_थे_कोड

4
इसका मतलब सिर्फ यह है कि प्रश्न संबंधित हैं, अधिक कुछ नहीं, कुछ कम नहीं। लिंक पोस्ट करने का उद्देश्य एक-दूसरे के "लिंक्ड" साइडबार में आने वाली चुनौतियों के लिए है, ताकि लोग संबंधित चुनौतियों को अधिक आसानी से पा सकें। अगर मैं आपके प्रश्न को डुप्लिकेट मानता हूं, तो मैंने ऐसा कहा होगा (या इसे बंद कर दिया है), इसलिए चिंता न करें। :)
मार्टिन एंडर

2
क्या "इष्टतम खेल" अच्छी तरह से परिभाषित है? यदि हां, तो क्या आप इष्टतम खेलने के लिए एल्गोरिदम का वर्णन करने वाला एक लिंक प्रदान कर सकते हैं?
रेनबोल्ट

2
@Rainbolt यह हल कर दिया गया है और वहाँ भी सही एल्गोरिदम मौजूद हैं। अधिक के लिए विकिपीडिया पढ़ें ।
भूत_न_थे_कोड

जवाबों:


16

पर्ल, 119 118 117 बाइट्स

के लिए +4 शामिल है -0p

एसटीडीआईएन पर रिक्त स्थान के साथ घुमाए गए बोर्ड पैडेड दें (गुरुत्वाकर्षण दाएं पत्थरों को खींचता है)

connect4.pl
  OXXX
   XOO
    OX
  OOXX
  XXXO
XXOOXO
OOXXOO
^D

connect4.pl:

#!/usr/bin/perl -p0
y/XO/OX/if$^S|y/X//>y/O//;$_=$$_||=/Z@{[map"|O".".{$_}O"x3,0,5..7]}/sx||s% (?! )%$_="$`X$'";do$0%eg?/1/?3:1+/2/:2

3यदि खिलाड़ी जीत हासिल करने के लिए प्रिंट करता है , 1तो खिलाड़ी हारने के लिए और 2ड्रॉ के लिए।

पुराने पर्ल्स पर आप ^Sएक बाइट हासिल करने के लिए एक शाब्दिक का उपयोग कर सकते हैं । यदि आपको अत्यधिक अक्षमता का बुरा नहीं लगता है तो आप $$_||=(ट्रांसपोज़न टेबल) छोड़ सकते हैं और 6 और बाइट्स प्राप्त कर सकते हैं । यदि आप $_=इसे छोड़ देते हैं, तो यह आपको दिखाएगा कि परिणाम के बजाय कहां खेलना है ( 1यदि एक है तो वहां पर खेलें और जीतें, 2अगर कोई एक है या किसी पर खेलते हैं 3और हार जाते हैं तो ड्रा करें )

एक पूर्ण न्यूनतम वृक्ष का निर्माण और मूल्यांकन करता है। आप स्मृति और समय से बाहर भागेंगे जब तक कि बोर्ड पहले से ही यथोचित अच्छी तरह से भर नहीं जाता है।


2
पृथ्वी पर किसी ने नीचा क्यों देखा? गोल्फ सही मायने में अद्भुत है (पर्ल के साथ मैं गोल्फ और इस तरह के एक समाधान प्राप्त करने है extremly मुश्किल - मुझे यकीन है कि किसी भी अन्य पर्ल गोल्फ खिलाड़ी मुझे पता है कि कोड के साथ आए हैं सकता है नहीं कर रहा हूँ)। और कोड में आवश्यक व्यवहार है।
दादा

इससे मेरा दिमाग आहत होता है। +1!
लेवलोनहुमन

@ दादा आपको कैसे पता है कि यह जवाब वोटिंग डाउन है। मैं 3 वोट के रूप में देखता हूं ...
RosLuP

@RosLuP जब मैंने पहली बार इस पोस्ट को देखा था, इसमें 1 डाउनवोट था। इसके अलावा, जब आपके पास पर्याप्त प्रतिनिधि होते हैं, तो आप देख सकते हैं कि किसी पोस्ट में कितने अप और डाउन वोट हैं: उस स्थिति में, अब इसमें 4 अप और 1 डाउन है।
दादा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.