माइनस्वीपर सॉल्वर


34

हमने पहले से ही माइनस्वीपर फ़ील्ड तैयार किए हैं , लेकिन किसी को वास्तव में उन उत्पन्न खानों को स्वीप करना पड़ता है, इससे पहले कि पीसीजी उड़ जाए!

आपका कार्य एक माइनस्वीपर सॉल्वर लिखना है जो "वर्किंग माइनस्वीपर" के स्वीकृत समाधान के थोड़े संशोधित संस्करण के साथ संगत है (बड़े क्षेत्रों के लिए अनुमति देने के लिए क्रियाओं को रिक्त स्थान द्वारा अलग किया जाता है)।

इनपुट: एक माइनस्वीपर फ़ील्ड, रिक्त स्थान द्वारा अलग किए गए फ़ील्ड। पहली पंक्ति खानों की कुल संख्या को दर्शाती है।

  • x: अछूता
  • !: झंडा
  • अंक: उस क्षेत्र के आसपास की खानों की संख्या

उदाहरण:

10
0 0 1 x x x x x
0 0 2 x x x x x
0 0 2 ! x x x x
0 0 1 2 x x x x
0 0 0 1 x x x x
1 1 0 2 x x x x
x 1 0 2 x x x x
1 1 0 1 x x x x

आउटपुट: प्रारूप में आपका अगला कदम action row column(शून्य से शुरू)

मान्य कार्य:

  • 0: खोलो इसे
  • 1: एक ध्वज लगाएं

उदाहरण:

0 1 2

नियम:

  • आप एक पूरा प्रोग्राम लिखते हैं जो एकल फ़ील्ड को इनपुट के रूप में लेता है (या तो STDIN या कमांड लाइन आर्ग्युमेंट्स) और एकल एक्शन (STDOUT) को आउटपुट करता है। इसलिए, आप इसके अलावा, राज्यों को नहीं बचा सकते !
  • आपकी पसंद को जीवित रहने के लिए सर्वोत्तम बाधाओं का पालन करना चाहिए। (यानी यदि 100% सुरक्षित कदम है, तो इसे लें)
  • यह ; सबसे छोटा समाधान (UTF-8 बाइट्स में) जीतता है

टेस्ट:

ये परीक्षण सामान्य स्पष्ट स्थितियों के लिए परीक्षण के उद्देश्य की सेवा करते हैं; आपका कार्यक्रम प्रत्येक परीक्षण क्षेत्र के लिए काम करना चाहिए।

में:

4
x x x x
1 2 x x
0 1 2 x
0 0 1 x

बाहर (इनमें से कोई भी):

1 1 2
0 0 2
0 1 3

में:

2
x x x
1 ! x
1 1 x

बाहर (इनमें से कोई भी):

0 0 0
0 0 1
0 1 2
0 2 2
1 0 2

में:

10
x x x x x x x x
1 3 3 x x x x x
0 1 ! 3 3 4 x x
0 2 3 ! 2 3 x x
0 1 ! 2 2 ! x x

बाहर (इनमें से कोई भी):

1 1 5
1 0 2

में:

2
x x x
2 3 1
! 1 0

बाहर (इनमें से कोई भी):

0 0 1
1 0 0
1 0 2

अच्छा! 1) शायद परीक्षण के लिए किसी को टेस्ट हार्नेस लिखना चाहिए: एक क्षेत्र दिया गया, यह प्रत्येक चरण को प्रिंट करता है, और क्या प्रोग्राम जीतता है। कार्यक्रम को बिना किसी अस्पष्टता के नक्शे पर जीतना चाहिए। 2) मुझे आश्चर्य है कि अगर कोई ध्वज कार्रवाई का उपयोग करेगा। ऐसा लगता है कि यह कभी भी आवश्यक नहीं होना चाहिए।
क्लाउडीयू

पहले टेस्ट के लिए। तुम क्यों करने के लिए ले जाने में सक्षम हैं 0 0 2या 0 1 3। मैं यह नहीं देख सकता कि उनमें से किसी एक को कैसे सुरक्षित माना जाएगा। (मुझे खानों में पर्याप्त नहीं होना चाहिए ...)
एफडिनॉफ

1
संभवतः Fया Pदिखता बेहतर ध्वज से !:)
दृष्टि

1
@JonathanVanMatre फ़ील्ड एक रिक्त है, लेकिन यह गारंटी है कि आपका पहला उद्घाटन मेरा नहीं है, क्योंकि खानों को पहले क्लिक के बाद रखा गया है :)
तिमुल्ला

2
मजेदार तथ्य: केवल एक सीमित संख्या में बोर्ड उपलब्ध हैं (कम से कम एक्सपी संस्करण में, जो प्रतिस्पर्धात्मक स्थिति में विहित है)। बोर्ड के चारों ओर स्थानांतरित कर दिया जाता है क्योंकि आप यह सुनिश्चित करने के लिए पहले स्थान पर क्लिक करते हैं कि आप एक खदान पर क्लिक नहीं कर रहे हैं, लेकिन इसके अलावा यह पहले से ही तय है कि आप किस बोर्ड का उपयोग करेंगे।
अंडरग्राउंडोरेल

जवाबों:


17

मेथेमेटिका

फिर भी गोल्फ नहीं हुआ। आई / ओ प्रारूपों पर कुछ और काम करने की आवश्यकता है।

t = {{0, 0, 1, x, x, x, x, x}, {0, 0, 2, x, x, x, x, x}, {0, 0, 2, F, x, x, x, x}, 
     {0, 0, 1, 2, x, x, x, x}, {0, 0, 0, 1, x, x, x, x}, {1, 1, 0, 2, x, x, x, x}, 
     {x, 1, 0, 2, x, x, x, x}, {1, 1, 0, 1, x, x, x, x}};
(*Sqrt[2] is  1.5*)
c = Sequence; p = Position;
nums = p[t, _?NumberQ];
fx = Nearest[p[t, x]];
flagMinus[flag_] := If[Norm[# - flag] < 1.5, t[[c @@ #]]--] & /@ nums
flagMinus /@ p[t, F];
g@x_List := Tr[q[#] & /@ x]
eqs = MapIndexed[t[[c @@ (nums[[#2]][[1]])]] == g[#1] &, (fx[#, {8, 1.5}] & /@nums)];
vars = Union@Cases[eqs, _q, 4];
s = Solve[Join[eqs, Thread[0 <= vars < 2]], vars, Integers];
res = (Transpose@s)[[All, All, 2]];
i = 1; plays = Select[{i++, #[[1]], Equal @@ #} & /@ res, #[[3]] &];
Flatten /@ ({#[[2]] /. 1 -> F, List @@ vars[[#[[1]]]] - 1} & /@ plays)

(*
{{0, 0, 3}, {F, 1, 3}, {F, 2, 4}, {0, 3, 4}, {0, 4, 4}, 
 {F, 5, 4}, {F, 6, 0}, {F, 6, 4}, {0, 7, 4}}
*)

संपादित करें: बोनस ट्रैक

मैंने एक इंटरएक्टिव खेल का मैदान बनाया जो किसी दिए गए कॉन्फ़िगरेशन के लिए सभी संभावित समाधानों की गणना करके बम संभावनाओं की गणना करता है:

गणितज्ञ ग्राफिक्स

इसे स्थापित किए बिना गणित के परीक्षण के निर्देश:

  1. Http://pastebin.com/asLC47BW डाउनलोड करें और इसे * .CDF के रूप में सहेजें
  2. Https://www.wolfram.com/cdf-player/ पर वुल्फराम रिसर्च से मुफ्त सीडीएफ पर्यावरण को लोड करें (एक छोटी फ़ाइल नहीं)

स्लाइडर बोर्ड आयामों को बदलता है। यह सिर्फ एक स्केचिंग प्रोग्राम है, पूरी तरह से परीक्षण नहीं किया गया है, कृपया किसी भी बग की रिपोर्ट करें। मैंने "बोर्ड पर उपलब्ध बमों की कुल संख्या" सुविधा को लागू नहीं किया है। यह अनंत माना जाता है।

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