निम्नलिखित परिदृश्य की कल्पना करें: आप एक दोस्त के साथ युद्धपोत खेल रहे हैं लेकिन धोखा देने का फैसला करते हैं। शूटिंग के बाद एक जहाज को हिलाने के बजाय, जहां आपका जहाज हुआ करता था, आप किसी भी जहाज को नहीं रखने का फैसला करते हैं। आप उसे बताएं कि उसके सभी शॉट मिस हैं, जब तक कि इस तरह से जहाजों को रखना असंभव नहीं है।
आपको एक फ़ंक्शन, या एक पूर्ण प्रोग्राम लिखना होगा, जो किसी तरह 3 तर्क लेता है: फ़ील्ड आकार, जहाज के आकार की मात्रा की सूची और शॉट्स की सूची।
लड़ाई का मैदान
दिए गए मापदंडों में से एक बोर्ड आकार है। युद्ध का मैदान कोशिकाओं का एक वर्ग है, और दिए गए पैरामीटर वर्ग का केवल एक पक्ष है।
उदाहरण के लिए, निम्नलिखित आकार 5 का बोर्ड है।
फ़ील्ड पर निर्देशांक 2-घटक स्ट्रिंग के रूप में निर्दिष्ट किए गए हैं: एक पत्र जिसके बाद एक संख्या है। आप पत्रों पर किसी विशेष मामले में भरोसा कर सकते हैं।
पत्र कॉलम निर्दिष्ट करता है, संख्या सेल की पंक्ति को निर्दिष्ट करता है (1-अनुक्रमित)। उपरोक्त चित्र में उदाहरण के लिए, हाइलाइट किए गए सेल द्वारा चिह्नित किया गया है "D2"
।
चूंकि केवल 26 अक्षर हैं, इसलिए क्षेत्र 26x26 से बड़ा नहीं हो सकता है।
जहाजों
जहाज 1 या अधिक ब्लॉक की सीधी रेखाएं हैं। जहाजों की मात्रा एक सूची में निर्दिष्ट है, जहां पहला तत्व 1-सेल जहाजों की मात्रा है, दूसरा - 2-सेल जहाजों और इतने पर।
उदाहरण के लिए, सूची [4,1,2,0,1]
में निम्नलिखित पोत बनाए जाएंगे:
जब युद्ध के मैदान में रखा जाता है, तो जहाज एक दूसरे को स्पर्श नहीं कर सकते, या एक दूसरे को छू भी नहीं सकते। कोनों से भी नहीं। हालांकि वे मैदान के किनारों को छू सकते हैं।
नीचे आप वैध जहाज प्लेसमेंट का एक उदाहरण देख सकते हैं:
आप मान सकते हैं कि किसी दिए गए जहाज के लिए, हमेशा दिए गए आकार के खाली बोर्ड पर प्लेसमेंट मौजूद है।
उत्पादन
यदि जहाजों के ऐसे स्थान मौजूद हैं, तो आपको उनमें से किसी का भी उत्पादन करना होगा।
कार्यक्रम में 3 प्रकारों में से एक ascii वर्णों की एक नई-लाइन-अलग मैट्रिक्स को आउटपुट करना है - एक को रिक्त सेल, एक - एक जहाज का टुकड़ा, और एक - "मिस्ड" के रूप में चिह्नित सेल। कोई अन्य वर्ण आउटपुट नहीं होना चाहिए।
उदाहरण के लिए,
ZZ@Z
\@@Z
@\\Z
\Z\\
(इस उदाहरण में, मैंने "मिस्ड" सेल @
होने के लिए रिक्त सेल के रूप में परिभाषित \
किया, और Z
जहाज का टुकड़ा होने के लिए)
यदि ऐसा कोई प्लेसमेंट मौजूद नहीं है, तो प्रोग्राम / फ़ंक्शन को कुछ भी आउटपुट किए बिना वापस लौटना चाहिए।
इनपुट
यदि आप एक फुलब्लॉक प्रोग्राम बनाने का निर्णय लेते हैं, तो यह निर्दिष्ट करना है कि सूचियाँ कैसे इनपुट हैं, कुछ तर्क के माध्यम से जा सकते हैं, कुछ बिना किसी नियम के।
यह कोड-गोल्फ है , सबसे कम मात्रा में अक्षर जीतते हैं।
एक उदाहरण गैर golfed अनुकूलित समाधान पाया जा सकता है यहाँ
के साथ संकलित -std=c99
, पहला तर्क बोर्ड का आकार है, अन्य तर्कों जहाज आकार हैं। स्टडिन पर शॉट्स की एक नई-अलग-अलग सूची दी गई है। उदाहरण:
./a 4 1 1 1 <<< $'A2\nA4\nB3\nC3\nC4\D4'
10x10
एक 4,3,2,1
शिपसेट के साथ तुरंत गणना करता है
26x26
? मैंने regexps और recursion के आधार पर एक समाधान को स्केच किया, और यह खेतों की तुलना में बहुत धीमी गति से अनुपयोगी हो जाता है6x6
। या तो मैं बहुत मूर्खतापूर्ण कुछ करता हूं, या जवाब की कमी का मतलब है कि दूसरों को भी कोई सफलता नहीं मिली है।