खेल
हाल ही में, मेरा बहुत समय मेरे फोन पर एक व्यसनी खेल द्वारा लिया गया है, जिसे लॉजिक डॉट्स कहा जाता है, जिसने मुझे इस चुनौती को लिखने के लिए प्रेरित किया। यदि मैं आपको खेल प्रदर्शन दिखाता हूं तो नियमों की व्याख्या करना आसान है, इसलिए यहां एक अनसुलझी और सुलझी हुई पहेली का स्क्रीनशॉट है:
अब यहाँ, तीन मुख्य बातें हैं।
- खेल बोर्ड (केंद्र में चौकों का 4x4 ग्रिड)
- आवश्यक आकृतियाँ (स्कोर और मेनू के तहत ऊपर से दूसरी पट्टी में लिंक किए गए डॉट्स), जो सभी पंक्तियाँ हैं, या
a
1 आयतों द्वारा। - पंक्तियों और स्तंभों पर संख्याएँ, जो यह बताती हैं कि एक समाधान के लिए कॉलम में कितने डॉट्स होने चाहिए
खेल का उद्देश्य आवश्यक आकार को ग्रिड में फिट करना है। आप आकृतियों को घुमा सकते हैं, लेकिन वे तिरछे नहीं जा सकते।
समाधान में, ध्यान दें कि सभी आकार बिल्कुल एक बार बनाए जाते हैं (क्योंकि वे केवल एक बार आवश्यक आकृतियों में होते हैं), और इस मामले में वे सभी क्षैतिज हैं लेकिन वे ऊर्ध्वाधर भी हो सकते हैं। वर्गों में भरे गुलाबी वर्गों का उपयोग न करने के लिए दर्शाते हैं।
यहाँ एक बड़ा और थोड़ा अधिक जटिल ग्रिड है:
ध्यान दें कि अनसुलझी पहेली में, ग्रेयर्ड आउट स्क्वायर में पहले से ही कुछ वर्ग भरे हुए हैं जो अवरुद्ध वर्गों को इंगित करते हैं कि आप एक डॉट को नहीं रख सकते हैं । पूंछ वाले डॉट्स आपको बताते हैं कि एक बिंदु उस स्थान पर है, और यह पूंछ की दिशा में कम से कम एक और बिंदु से जोड़ता है , लेकिन किसी अन्य दिशा में नहीं (विपरीत दिशा सहित)।
नोटेशन
इस पोस्ट के बाकी हिस्सों के लिए, मैं निम्नलिखित प्रतीकों का उपयोग करके बोर्ड का उल्लेख करूंगा:
- <,>, ^, v - बिंदु की दिशा में फैली हुई पूंछ के साथ पूर्व-स्थित डॉट को दर्शाता है
- * - एक बिंदु को दर्शाता है। यदि एक अनसुलझी ग्रिड (इनपुट) पर दिया जाता है, तो यह एक व्यक्तिगत आकार है। यदि आउटपुट में है, तो यह इसके चारों ओर डॉट्स से जुड़ा हुआ है।
- # - एक अवरुद्ध ग्रिड वर्ग को दर्शाता है (जहाँ आप डॉट नहीं लगा सकते हैं)
- -, | (हाइफ़न और बार) - दाईं और बाईं पूंछ के साथ एक बिंदु और क्रमशः ऊपर और नीचे की पूंछ के साथ एक बिंदु को चिह्नित करें
- ** (अंतरिक्ष चरित्र) - ** एक खाली स्थान का प्रतीक है
इन प्रतीकों का उपयोग करते हुए, बाद के उदाहरण के मामले (अनसुलझी) को निम्नानुसार दर्शाया जा सकता है:
<
#
^ #
और समाधान के रूप में प्रतिनिधित्व किया जा सकता है:
*< * *
*
*
* *
* *#*
^ # *
ध्यान दें कि कोई भी दो आकृतियाँ क्षैतिज, लंबवत या तिरछे स्पर्श नहीं कर सकती हैं , इसलिए निम्नलिखित मामला मान्य नहीं है:
***
**
**
चुनौती
आपकी चुनौती किसी भी लॉजिक डॉट्स पहेली को हल करना है, 4x4 से 9x9 तक समावेशी। आपको इनपुट की चार लाइनें मिलेंगी, फिर गेम बोर्ड। लाइनें इस प्रकार होंगी:
- पहली पंक्ति, आकृतियाँ - आकृतियों को खोजने के लिए, प्रत्येक को प्रपत्र में दिया गया है
sizexquantity
(उदाहरण के3x2
लिए, लंबाई तीन की दो आकृतियों के लिए) और एक स्थान द्वारा अलग किया गया। उदाहरण पंक्ति:3x1 2x1 1x1
- दूसरी पंक्ति, कॉलम - प्रत्येक कॉलम के लिए आवश्यक डॉट काउंट की एक अलग सूची। उदाहरण पंक्ति:
1 1 2 2
- तीसरी पंक्ति, पंक्तियाँ- प्रत्येक पंक्ति के लिए आवश्यक डॉट काउंट की एक अलग सूची। उदाहरण पंक्ति:
3 0 3 0
- 4 वीं पंक्ति, बोर्ड का आकार - एक पूर्णांक, बोर्ड का आकार,
B
बोर्ड को तब दिया गया है, और B
ऊपर उल्लिखित संकेतन का उपयोग करते हुए बोर्ड का प्रतिनिधित्व करने वाली इनपुट की लाइनें हैं। उदाहरण के लिए, बाद के उदाहरण के मामले के लिए पूरा इनपुट निम्नानुसार है:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
आपका प्रोग्राम तब हल किए गए बोर्ड को आउटपुट करेगा, उसी संकेतन में। उपरोक्त इनपुट के लिए मिलान आउटपुट निम्नानुसार है:
** * *
*
*
* *
* *#*
* # *
ध्यान दें कि गेम बोर्ड में कई समाधान हो सकते हैं। इस मामले में, बस एक वैध समाधान का उत्पादन करें। साथ ही, आपके प्रोग्राम को 10 सेकंड के भीतर एक जटिल डेस्कटॉप 10x10 ग्रिड के लिए एक उचित समाधान का उत्पादन करना चाहिए।
यह कोड गोल्फ है, इसलिए कम से कम बाइट्स जीतता है।
परीक्षण के मामलों
इनपुट 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
आउटपुट 1
*** *
***#
#
* * *
इनपुट 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
आउटपुट 2
* * *
*
* *
* #
* *
इनपुट 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
आउटपुट 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(यह शुरुआत में होना चाहिए, लगभग अंत के करीब नहीं खोया, लेकिन वैसे भी ...)