अधूरे निर्देशों का पालन करें


21

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

इनपुट

नक्शा ASCII वर्णों के आयताकार ग्रिड के रूप में दिया गया है। .एक सड़क, है #कोई भवन है, Aकरने के लिए Zविभिन्न रेस्तरां हैं। आप ऊपरी बाएँ कोने में शुरू करते हैं, पूर्व की ओर। उदाहरण:

.....A
.#.###
B....C
##.#.#
D....E
##F###

आपके मित्र के निर्देशों को एक (संभावित रूप से खाली) स्ट्रिंग या Lएस और Rएस वाले पात्रों की सूची के रूप में दिया जाएगा ।

उत्पादन

आप इनपुट स्ट्रिंग में बाएं और दाएं मुड़ने वाले किसी भी पथ पर चल सकते हैं, बशर्ते कि आप उनमें से प्रत्येक के साथ-साथ अंत में कम से कम एक कदम आगे ले जाएं। विशेष रूप से इसका मतलब है कि यदि स्ट्रिंग Rआपके साथ शुरू होती है तो बाएं-सबसे कॉलम में तुरंत दक्षिण में नहीं जा सकती है। इसका मतलब यह भी है कि आप मौके पर 180 ° घूम नहीं सकते।

आप इमारतों या रेस्तरां के माध्यम से नहीं चल सकते हैं सिवाय इसके कि आप अंत में पहुंचें। आप मान सकते हैं कि शीर्ष बाएं कोने एक है .

आपको उन सभी रेस्तरांओं का उत्पादन करना चाहिए जो आपके दोस्त के निर्देशों के साथ एक स्ट्रिंग या सूची के रूप में पहुंच सकते हैं।

आप मान सकते हैं कि निर्देश कम से कम एक रेस्तरां को ले जाएगा। उदाहरण के Lलिए, उपरोक्त मानचित्र के लिए कोई एकल अमान्य होगा।

उपरोक्त मानचित्र के लिए कुछ उदाहरण:

<empty> A
R       F
RR      B,D
RL      C,E
RLRL    E
RLLR    C
RLLL    B
RLRR    D
RLRRRR  A,C
RLLLRLL B

विशेष रूप से ध्यान दें जो Rनहीं पहुंचता है B

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।

मानक नियम लागू होते हैं।

अतिरिक्त परीक्षण मामले

यहाँ एक बड़ा नक्शा है, कॉनर ओ'ब्रायन के सौजन्य से (जिसे मैंने थोड़ा संशोधित किया है):

.......Y..........................######
.####.....#.##....##..######....#.###.##
B.........#.##.#..##....##...##.#.#P...#
.#.#####..#.##..#.##....##.#....#.####.#
.#.#...C..#.##...G##..#.##.#....#.#....#
.#.#.#.#..#.####.###.#..##.#....#.#.NO.#
.#.#A#.#..#.##...F###...##.#.##.#......#
.#.###....#.##....##....##.#....###....#
.#.....##...##....##...D##........###R.#
.#.##..##...##E...##..######....####...#
.....X....#.#.....................##S.T#
###########.###########M############...#
#................................###.#.#
#.#########.########.######.#.######.#.#
#......V#.....######.IJ...........##.#.#
#########.###......ZH############L##.#.#
#########.##########.###############.#.#
####K##...##########.#....#..........#.#
####....########U......##...#######Q.#.#
#####################################W.#

और यहां दिशाओं और उनके अपेक्षित परिणामों की कुछ चयनित सूचियां दी गई हैं:

<empty>                                 Y
RR                                      B
RLL                                     Y
RLRR                                    B,C,X
RLLLRRR                                 G
RLRLRLRL                                I,Z
RLLRRRLRRLRR                            C,D,F,G,Y
RLRRLLRLLLRL                            B,C,Y
RLLRRLRRRLLLL                           F,M,N,O,Y
RLRRLLLRRRRLLLL                         F,M,Y
RLRRLRRRRRRRRRR                         E,F,Y
RLRRRLLLRLLRRLL                         M,N,O
RLLRRLRRLRLRLRRLLR                      E,U
RLRLLRLRRLRRRRRLRL                      F,G,I,Z
RLLRRLLRLLRRRLRRLLRR                    W
RLLLRRRLRRLLLLLRLLLLLL                  D,G,X
RLRLLRLRRLRLRRRLRLLLRR                  B,C,E,J,X
RLRLRLLLLRLRRRRRRLRLRRLR                Y
RLRLRRRLRLLLLRLRRLLLLRLLRRL             E,M,X
RLRLLLRRRLLLRLLRLLRLRRLRLRR             B,E,F,K
RLRRRLLLLLLLLLLLLLLLRRRRLLL             A,B

बोनस प्रश्न: क्या कोई इनपुट है जो केवल I या केवल परिणाम देता है U? यदि हां, तो इस तरह का सबसे छोटा रास्ता क्या है?

जवाबों:


17

पर्ल, 150 149 146 145 141 140 138 136 135 133 130 126 125 124

+7 -F -Xn0i के लिए जोड़ा गया

एक प्रारंभिक प्रयास।

STDIN पर मानचित्र के साथ चलाएं और -i विकल्प के बाद के दिशा-निर्देश, जैसे

perl -F -Xn0iRL incomplete.pl
.....A
.#.###
B....C
##.#.#
D....E
##F###

अपने ऑपरेटिंग सिस्टम पर ^Dया ^Zउसके साथ काम करने वाले STDIN को बंद करें ।

incomplete.pl:

%P=0;$^I=~s``{%;=!/
/;%P=map{$_|=$F[$^H=$_+=(1,@+,-1,"-@+")[$d&3]]=~/(\w)|#|^$/*~!\$;{$1}}(%P)x@F}$d-=B&$'^u`eg;print%

दिए गए स्कोर को प्राप्त करने के लिए शाब्दिक नियंत्रण वर्ण द्वारा ^ H को बदलें

बोनस प्रश्न:

  • ऐसा कोई इनपुट नहीं है जिसका परिणाम केवल हो I
  • सबसे छोटा इनपुट जिसका परिणाम केवल Uहोता हैRLLRRLLRLRLRRLRRLRLRLRRLLR
  • एक अद्वितीय सेट में परिणाम के लिए आवश्यक सबसे लंबा इनपुट है RLLRRRLRLRLLLRRLRLLLLLRRRLLRRRLLLLLLLRRLRRRRजो देता हैB O R

4
टन हास्पेल? :)
लिन

14
उस नाम के साथ केवल एक एलियन है
टन हास्पेल

2
@ टोनहॉस्पेल यह आपके लिए एक सम्मान की बात है।
msh210

8

पायथन 2, 180 177 168 163 161 158 बाइट्स

def a(v,o,c=0,A=0,d='.',O={0}):
 while'.'==d:w=v.find('\n');c+=[1,~w,-1,w+1][A%4];d=v[c];o>v<a(v+' '*w,o[1:],c,ord(o[0])-~A,d);d>v>o<O.add(d)
 return`O`[9::5]

पैरामीटर v एक स्ट्रिंग के रूप में नक्शा है; oहै LRस्ट्रिंग।

मिच श्वार्ट्ज ने 2 को बचाया बाइट्स के 3 10 लॉट को । धन्यवाद!

मैंने दो बाइट्स को सेट O={0}और वापस करके बचाया `O`[9::5], जो बहुत पोर्टेबल नहीं हो सकता है: यह मानता है किhash(0) == 0 , मुझे लगता है, क्योंकि इसमें तत्वों का क्रम repr(O)होता है

set([0, 'A', 'B', 'C'])

और रचनात्मक रूप से उस स्ट्रिंग को मारना मुझे जवाब मिल गया।


मुझे लगता है कि यह एक विस्फ़ोटक विस्फोट से ग्रस्त है अगर आप इसे
लोंगिश

ओह, हाँ, यह एक पूर्ण प्रदर्शन आपदा है। यह उदाहरण ग्रिड के लिए काम करता है, हालांकि!
लिन

1

सी ++ 465

C ++ इतनी क्रिया है ...

#include <vector>
#include <iostream>
using namespace std;
#define M m[y][x]
#define A if(M!=46)break
vector<string>m;char n[99];int r(int x,int y,int z,const char *d){for(;;){if(z%2)y=y-2+z;else x=x+1-z;if(y<0||y>=m.size()||x<0||x>=m[y].size())break;if(*d){A;r(x,y,(*d==82?z+3:*d==76?z+1:z)%4,d+1);}else{if(M>64&&M<91)n[M]++;A;}}}int main(int c,char**v){string l;while(getline(cin,l))m.push_back(l);r(0,0,0,c>1?v[1]:"");for(char j=0;j<99;j++)if(n[j])cout<<j<<" ";}

मैं इसे और छोटा करने की कोशिश करूंगा। सुझावों का स्वागत है।

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