रोगेलुइक पाथफाइंडिंग
आपका कार्य नीचे दिए गए तत्वों का द्वि-आयामी सरणी दिया जाएगा, जो एक कालकोठरी का प्रतिनिधित्व करता है, एक एकल संख्या को आउटपुट या वापस करने के लिए सोने के टुकड़ों की मात्रा का प्रतिनिधित्व करता है जो दुष्ट किसी भी राक्षस को जगाए बिना एकत्र कर सकता है।
सरणी के तत्व इस प्रकार हैं:
- रिक्त स्थान
.
या तो या एक स्थान, आपके कॉल द्वारा दर्शाए जाते हैं ; - दुष्ट की शुरुआती स्थिति का प्रतिनिधित्व, निश्चित रूप से, द्वारा किया जाता है
@
; - एक सोने के टुकड़े द्वारा दर्शाया गया है
$
; - दीवारों का प्रतिनिधित्व करते हैं
#
; - राक्षसों का प्रतिनिधित्व निम्न regexp के पात्रों द्वारा किया जाता है
[a-zA-Z*&]
:।
सरणी में ऊपर सूचीबद्ध कोई भी वर्ण नहीं होगा, इसलिए आप मान सकते हैं कि कोई भी चीज़ जो दीवार नहीं है, खाली जगह है, बदमाश या सोने का टुकड़ा एक राक्षस है।
पाथफाइंडिंग के नियम हैं:
- दुष्ट केवल खाली कोशिकाओं या कोशिकाओं से चल सकता है जिसमें सोना होता है;
- यह एक आसन्न या तिरछे आसन्न सेल में जाने के लिए एक मोड़ लेता है;
- सोना उठाना तत्काल है;
- दुष्ट एक राक्षस से सटे या तिरछे नहीं रह सकता है, एक से अधिक बारी के लिए इसे जागने के बिना, जो निषिद्ध है;
- दुष्ट किसी भी समय एक राक्षस के जागरूकता क्षेत्र में प्रवेश कर सकता है, राक्षस केवल तभी उठेगा जब बदमाश उसके साथ लगातार दो बार घूमेगा।
इनपुट और आउटपुट नियम
आप किसी भी उचित प्रारूप में इनपुट प्राप्त कर सकते हैं, जिसमें दो-आयामी सरणी, एक फ्लैट सरणी, एक स्ट्रिंग या जो कुछ भी शामिल है। यदि यह आपके जीवन को आसान बनाता है, तो आप सरणी के आयाम भी ले सकते हैं।
यह गारंटी है कि बदमाश शुरुआत में एक राक्षस के पास नहीं होंगे।
एक पूर्ण कार्यक्रम या एक समारोह ठीक है।
स्कोरिंग
यह कोड-गोल्फ है , यह स्कोर आपके सबमिशन का बाइट्स काउंट कम बेहतर है।
परीक्षण के मामलों
मैं पठनीय उद्देश्यों के लिए यहां रिक्त स्थानों के लिए डॉट्स का उपयोग करता हूं, यदि आप चाहें तो आप रिक्त स्थान का उपयोग कर सकते हैं (ऊपर देखें)। यह भी ध्यान दें कि यह एक शुद्ध संयोग है कि दुष्ट हमेशा ऊपरी-बाएँ कोने में होता है, आपके कोड को किसी अन्य मान्य स्थिति को भी संभालना चाहिए।
1)
@..
.$.
... -> 1
बस एक स्वच्छता परीक्षण।
2)
@....
...g$
..... -> 0
फिर से, एक विवेक परीक्षण।
3)
@....
...$g
..... -> 1
बदमाश सोने को बाईं ओर घुमाकर पकड़ सकता है।
4)
@....g..
.......$
........
.....h.. -> 1
बदमाश राक्षसों के बीच झग-झग कर सकते हैं, कभी भी एक के पास एक से अधिक मोड़ के लिए नहीं रुक सकते।
5)
@....z..
.......$
.....b.. -> 0
पिछले परीक्षण मामले की रणनीति यहां काम नहीं करती है - राक्षस संवेदनशीलता क्षेत्र ओवरलैप।
6)
@$#.
###$
.... -> 1
चेतना जांच।
7)
@..#..
$.$g.$
...#.. -> 2
डिट्टो।
8)
@#.d#$
$...##
e.....
..$...
##..$b
.#..g$ -> 3
यहां सभी सोने में से, केवल तीन तक ही सुरक्षित रूप से पहुंचा जा सकता है: शुरुआती स्थिति के पास सोना एक को नीचे ले जाने और फिर शुरुआती स्थिति में वापस आ सकता है। शीर्ष बाएं कोने से भागने के लिए बदमाश को तिरछे डाउन-राइट को दो बार घुमाना पड़ता है। बीच में सोना कोई चुनौती नहीं है। बाहरी सोने की रखवाली की जाती है g
और b
इसे बीच सोने के स्थान से तिरछे स्थान पर घुमाकर और फिर वापस प्राप्त किया जा सकता है। बाकी नहीं मिल सकता है: शीर्ष-दाहिने सोने को दीवारों द्वारा अवरुद्ध किया जाता है, और नीचे-दाहिने सोने को राक्षस संवेदनशीलता क्षेत्रों में दो मोड़ की आवश्यकता होती है।
निम्नलिखित परीक्षण मामलों को उदारतापूर्वक mbomb007 द्वारा दान किया गया था।
9)
12345678
a @....g.D
b .......$
c ......#.
d .....h.. -> 1
यह एक मुश्किल है। एक रास्ता है b4-b5-c6-b7-c8-b8(grab)
।
10)
12345678
a @....g.D
b .......$
c .......#
d .....h.. -> 1
एक रास्ता है [bc]4-c5-b6-c7-b8(grab)
।
11)
12345678
a @....g.D
b ......#$
c .......#
d .....h.. -> 1
अतिरिक्त दीवार वास्तव में कुछ भी नहीं बदलती है, [bc]4-c5-b6-c7-b8(grab)
अभी भी एक समाधान है।
@
एक वैध इनपुट है?