4x4 हेक्स का एक परफेक्ट गेम खेलें


10

पृष्ठभूमि

हेक्स एक दो-खिलाड़ी सार रणनीति गेम है K×Kजो हेक्सागोनल टाइल्स के एक रोम्बस पर खेला जाता है । रोम्बस के दो विपरीत भाग सफेद रंग के होते हैं, और अन्य दो काले, और दो खिलाड़ी, काले और सफेद, अपने रंग का एक टोकन टाइल पर एक टोकन रखने में बदल जाते हैं। जो खिलाड़ी पहले अपने रंग के विपरीत पक्षों के बीच एक पथ का निर्माण करता है, वह विजेता होता है। यह ज्ञात है कि खेल ड्रॉ में समाप्त नहीं हो सकता है, और बोर्ड आकार की परवाह किए बिना पहले खिलाड़ी की जीत की रणनीति है (विवरण के लिए विकिपीडिया पृष्ठ देखें)।

काम

इस चुनौती में, हम बोर्ड के आकार को ठीक करते हैं K = 4, और बोर्ड का निम्नलिखित ग्रिड के रूप में प्रतिनिधित्व करते हैं। मोटी रेखाएं आसन्न टाइल्स को दर्शाती हैं।

एक 4x4 ग्रिड।

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

एक संभव जीत की रणनीति की रूपरेखा, यह मानते हुए कि सफेद पहले जाता है। पहला चयन करें 5. उसके बाद, यदि आपके पास नीचे से 5 या नीचे की तरफ कोई रास्ता है या किसी भी बिंदु पर 0 या 1 का चयन करता है, तो 0 या 1 में से जो भी रिक्त हो, का चयन करके जवाब दें। यदि काला 9 या 13 का चयन करता है, तो 10 का चयन करें और फिर 14 या 15 में से जो भी रिक्त हो। अगर काला 9, 13 या 14 का चयन नहीं करता है, तो 9 का चयन करें और 13 या 14 में से जो भी रिक्त हो। यदि काला 14 चुनता है, तो 15. चुनकर उत्तर दें, अगला, रिक्त होने पर 10 का चयन करें; यदि काला 10 चुनता है, तो 11. के साथ उत्तर दें। यदि काला है तो 6 का चयन करता है, 7 के साथ उत्तर देता है, और 2 या 3 में से जो भी रिक्त हो। यदि काला 6 का चयन नहीं करता है, तो उसे चुनें, इसलिए आपके पास 5 से नीचे की पंक्ति में एक रास्ता है।

इनपुट और आउटपुट

आपका इनपुट 16 अक्षरों का एक तार है WBE, जो सफेद, काले और खाली के लिए खड़ा है। वे बोर्ड की टाइलों का प्रतिनिधित्व करते हैं, जैसा कि ऊपर कहा गया है। आप निम्न में से इनपुट विधि (जो आपकी आउटपुट विधि भी निर्धारित करते हैं) चुन सकते हैं:

  1. एसटीडीआईएन से इनपुट, एसटीडीयूएसटी के लिए आउटपुट।
  2. एक कमांड लाइन तर्क के रूप में इनपुट, STDOUT के लिए आउटपुट।
  3. इनपुट के रूप में 16 एकल-वर्ण कमांड लाइन तर्क, आउटपुट STDOUT के लिए।
  4. नामित फ़ंक्शन के तर्क के रूप में इनपुट, रिटर्न वैल्यू के रूप में आउटपुट।

आपका आउटपुट उस टाइल का प्रतिनिधित्व करता है, जिस पर आप अपना अगला टोकन रखते हैं, क्योंकि यह स्थानांतरित करने की आपकी बारी है। आप निम्न आउटपुट स्वरूपों में से चुन सकते हैं:

  1. एक शून्य-आधारित सूचकांक (जैसा कि ऊपर की तस्वीर में इस्तेमाल किया गया है)।
  2. एक-आधारित सूचकांक।
  3. आपके Eद्वारा चुने गए Wया Bआपके द्वारा चुने गए इनपुट स्ट्रिंग के साथ ।

नियम

आपकी रणनीति निर्धारक होनी चाहिए। आपको गेम की स्थिति को सही ढंग से संभालने की आवश्यकता नहीं है जो आपकी रणनीति का उपयोग करके खाली बोर्ड से अगम्य हैं, या उन पदों के लिए जो पहले से ही खिलाड़ी के लिए जीत रहे हैं, और आप उन पर क्रैश कर सकते हैं। इसके विपरीत, आपकी रणनीति का उपयोग करने वाले बोर्ड पर, आपको एक कानूनी कदम वापस करना होगा।

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

परिक्षण

मैंने प्रविष्टियों को मान्य करने के लिए पायथन 3 नियंत्रक लिखा है, क्योंकि यह हाथ से करना बहुत कठिन होगा। आप इसे यहाँ पा सकते हैं । यह पहले तीन इनपुट स्वरूपों और पायथन 3 फ़ंक्शंस का समर्थन करता है (अन्य भाषाओं में फ़ंक्शंस को प्रोग्राम में लपेटना पड़ता है), सभी तीन आउटपुट स्वरूप और दोनों खिलाड़ी। यदि कोई रणनीति नहीं जीत रही है, तो वह खोए हुए गेम को आउटपुट देगी, ताकि आप अपना प्रोग्राम ट्विक कर सकें।


यह चुनौती मुझे याद दिलाती है कि जब मैं कैलकुलेटर प्रोग्राम लिख रहा था तो एक टिक टीएसी एआई को सेक करने की कोशिश कर रहा था। ticalc.org/archives/files/fileinfo/354/35408.html
शुक्राणु

2
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.मुझे बहुत पहले जीतना चाहिए था, या मैं गलत हूं?
सेबेस्टियन हॉफनर

@ सेबस्टियनहोफनर नियंत्रक में एक बग जैसा दिखता है। जब मेरे पास समय होगा मैं इसे ठीक करने की कोशिश करूंगा।
जर्बग

@ सेबस्टियनहोफनर बग को अब ठीक किया जाना चाहिए।
जर्गब

जवाबों:


6

मारबेलस, 973 बी

यह प्रश्न में संकेतित रणनीति का एक भोली कार्यान्वयन है। यह उम्मीद करता है कि बोर्ड को 16 कमांडलाइन / मेनबोर्ड मापदंडों की तरह प्रदान किया hex.mbl B W E E E W E E E B E E E E E Eजाएगा और यह सफेद की अगली चाल की शून्य-अनुक्रमित स्थिति का उत्पादन करेगा।

00 }1 }0
&G B? W!
&0 &G &G
!!
00 }0 }1
&H B? W!
&1 &H &H
!!
.. }D .. }9 }9 }D }E }A }D }9 }A .. }E }F }5
}9 B! }E E? W? E? .. E? B? B? W? .. E? .. E?
B! ?0 B! &M &N &O E? &I \\ .. &J .. &K E? &5
?0 ++ ?0 &9 .. &D &P &A &I /\ &J .. &E &L !!
++ .. ++ !! .. !! &E !! \/ &L /\ &K !! &F
\\ .. // .. .. .. !! .. .. \/ .. \/ .. !!
.. =3 \/
&M /\ &N
\/ &O /\ &P
}0 }1 }6 .. }6 .. }7 &7 }2 }3 }A }A }B }E }F
..
..
..
..
..
..
..
..
..
.. .. .. .. .. .. .. .. .. .. .. .. .. B? W!
.. .. .. .. .. .. .. .. .. .. .. .. .. &Q &Q
.. .. .. .. B? .. E? W? E? .. E? B? E? &F \/
.. .. .. &S /\ &T &S &T &U E? &A &R &R !!
.. .. .. &7 .. .. \/ .. &2 &V !! &B \/
.. .. .. !! .. .. &U /\ &V &3 .. !!
.. .. .. .. .. .. .. .. .. !!
.. .. ..
.. .. E?
E? .. &6
&X E? !!
!! &Y
.. !!
}4 }8 }C
\/ \/ \/
30 30 31 31 32 33 35 36 37 39 31 30 31 31 31 33 31 34 31 35
&0 &X &1 &Y &2 &3 &5 &6 &7 &9 &A &A &B &B &D &D &E &E &F &F
:W?
}0
^4
=1
{0
:B?
}0
^0
=0
{0
:E?
}0
^1
=0
{0
:W!
}0
^4
=0
{0
:B!
}0
^0
>0
{0

मुझे लगता है कि मैं शायद बेहतर ब्रांचिंग और कोड री-यूज़ के उन्मूलन के साथ इसमें से लगभग 200 पात्रों को गोल्फ कर सकता हूं।


मैंने 16 कमांड लाइन तर्क के लिए विकल्प जोड़ा और सत्यापनकर्ता स्क्रिप्ट को अपडेट किया, इसलिए इस समाधान का परीक्षण किया जा सकता है।
जर्गब

मारबेलस +1 (पीपीसीजी को लगता है कि इन पात्रों को जोड़ने से टिप्पणी में सुधार हुआ है)
रोहन झुनझुनवाला

1

अजगर 3, 100 बी

b=input()
i=b.find('B')
if b[i]in'BW'and'E'in b:i-=1+(b[i-1]is'W')*4
print((b[:i]+'B'+b[i+1:])[:16])
  • खिलाड़ी: काला
  • विधि: STDIN / STDOUT, MODIFIED_BOARD

रणनीति को पहले Bबोर्ड पर खोजना है । यदि कोई भी यह रिटर्न नहीं है -1, जो कि अजगर में ही है last index। इस प्रकार एक खाली बोर्ड पर मेरा पहला इंडेक्स होगा index=-1, जहां मैं स्थानांतरित करना शुरू करता हूं।

यदि मेरे बाईं ओर फ़ील्ड ( index-1) मुक्त है, तो मेरी अगली चाल वहाँ जाती है। यदि यह लिया जाता है, तो मैं बाईं ओर जाता हूं। मुझे कभी भी ऊपर नहीं जाना है: यदि मैं करता हूं, तो मैं टेम्पो खो देता हूं और खेल खो दूंगा।

एक पूर्ण बोर्ड पर ( Eकहीं भी नहीं ) मैं एक कदम नहीं उठाता।

printपहली बार में थोड़ा अजीब लगता है: मैं नए बोर्ड (जो मैं टुकड़ा करने की क्रिया के माध्यम से करते हैं) लेकिन फिर मैं 16 वर्णों काट करने की जरूरत का निर्माण करने के लिए है। यह एक राहत है क्योंकि मैं नकारात्मक सूचकांकों के साथ काम करता हूं और b[i+1:]इस प्रकार छेद बोर्ड और बाकी मैं उम्मीद करूंगा, शेष को काट देना महत्वपूर्ण है। एक और तरीका सकारात्मक सूचकांकों के साथ काम करना होगा, जैसे कि लेने से (b.find('B')+16)%16, लेकिन (+16)%16एक से अधिक बाइट है ()[:16]

Ungolfed:

board = input()
index = board.find('B')
if board[index] in 'BW' and 'E' in board:
    index -= 1 + (board[index-1] is 'W') * 4
print((board[:index] + 'B' + board[index+1:])[:16])

परीक्षा

हेक्स कंट्रोलर टेस्ट सूट चलाते समय, मुझे कुछ अजीब व्यवहार का सामना करना पड़ा:

OUT: EEEEEEEEEEEEEEEB
OUT: WEEEEEEEEEEEEEBB
OUT: WWEEEEEEEEEEEBBB
OUT: WWWEEEEEEEEEBBBB
OUT: WWWWEEEEEEEBBBBB
OUT: WWWWWEEEEEBBBBBB
OUT: WWWWWWEEEBBBBBBB
OUT: WWWWWWWEBBBBBBBB
OUT: WWWWWWWWBBBBBBBB

Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.

मुझे लगता है कि मुझे या तो 4 वीं बारी के बाद जीतना चाहिए था या एक ही बोर्ड के साथ पूर्ण बोर्ड का जवाब देना एक सही प्रतिक्रिया होना चाहिए। सुनिश्चित नहीं है कि वहाँ क्या गलत है, बहुत गहरा गोता नहीं लगाया - मैं जांच करना चाहता था कि क्या मुझे सभी "विशेष" मामले कवर किए गए हैं। लेकिन जब से मुझे उन स्थितियों को कवर नहीं करना पड़ता है जहां कोई व्यक्ति 4 या तो शुरू होता है, वैसे भी कोई फर्क नहीं पड़ता।

85b

हालाँकि, अगर मैं अपने आप को एक पूर्ण बोर्ड के लिए जाँच नहीं करने देता (यानी बाहर जाने से 'E' in bमैं कोड को केवल 85 बाइट्स का उपयोग करने के लिए सरल कर सकता हूँ:

b=input();i=b.find('B')
if i!=-1:i-=1+(b[i-1]is'W')*4
print((b[:i]+'B'+b[i+1:])[:16])

यह हालांकि निम्नलिखित के लिए ले जाएगा:

Incorrect response 'WWWBWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.

यह गणना की जा सकती है या नहीं भी हो सकती है, और जब से मैंने पाया कि यह एक वैध कदम नहीं था, मैंने लंबे और अधिक सही उत्तर के लिए जाने का फैसला किया।

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