पुल और सुरंगें


32

आप एक नए फ्रीवे के निर्माण के लिए जिम्मेदार हैं। हालांकि, यह पहाड़ी भूमि के माध्यम से होता है और इसलिए कई पुलों और सुरंगों की आवश्यकता होती है। फ्रीवे खुद एक ही स्तर पर रहना चाहिए।

इनपुट

आपको एक संक्षिप्त ASCII विवरण दिया गया है कि मानक इनपुट पर पहाड़ कैसे दिखते हैं, जैसे कि निम्नलिखित:

                         /\                                
                        /  \                               
                   /\  /    \                              
            /\    /  \/      \                             
           /  \  /            \                  /\        
          /    \/              \                /  \       
_        /                      \        /\    /    \      
 \      /                        \      /  \  /      \  /\ 
  \    /                          \    /    \/        \/  \
   \  /                            \  /                    
    \/                              \/                     

_पहले कॉलम के निशान में शुरुआत और सड़क के स्तर। पर्वत श्रृंखला सन्निहित है और यदि अंतिम खंड एक पुल होगा, तो इसमें कई अक्षर भी हैं।

आप मान सकते हैं कि इनपुट की एक पंक्ति 100 वर्णों से अधिक लंबी नहीं है और यह कि 15 से अधिक लाइनें नहीं हैं। प्रत्येक पंक्ति में एक ही लंबाई होती है जो संभवतः अंत में अंतरिक्ष-गद्देदार होती है। सड़क कभी भी पहाड़ के भीतर या पुल के रूप में शुरू नहीं होती है। इनपुट में रोड टाइल के बाद पहली चीज या तो ढलान या नीचे है।

उत्पादन

आउटपुट एक ही पर्वत श्रृंखला है, सिवाय इसके कि अब एक सड़क है जहां पहले केवल इसकी शुरुआत थी। आउटपुट मानक आउटपुट पर दिया जाता है।

इसके लिए कई नियम हैं:

  1. सड़क को इनपुट में बताए गए स्थान पर शुरू करना चाहिए और पूरे स्तर पर समान रहना चाहिए। इसे आसान बनाने के लिए, हमने कई प्रीमियर रोड टाइलें तैयार की हैं जो इस तरह दिखती हैं _:

    _______
     \    /
      \/\/
    
  2. सड़क का विस्तार पर्वत श्रृंखला के अंतिम छोर तक होना चाहिए (यानी इनपुट लाइनों की लंबाई तय करती है कि सड़क कितनी दूर तक जाती है)।

  3. जब भी कोई पहाड़ जहां सड़क पर जाना हो, वहां सुरंगों को ड्रिल किया जाना चाहिए। सुरंग सीधे पर्वत के माध्यम से जाती है और प्रारंभ और अंत में छेद छोड़ देती है (अर्थात एक सुरंग पहाड़ की ढलान को उसके आरंभ में एक बंद कोष्ठक और उसके अंत में एक कोष्ठक के साथ बदल देती है)।

  4. सुरंग छोड़ते हैं, ठीक है, पहाड़ में एक सुरंग जिसमें आमतौर पर एक छत होती है। हमारे प्रीमियर रोड टाइल्स को सौभाग्य से छत को मजबूत करने के लिए इस्तेमाल किया जा सकता है ताकि सुरंग गिर न जाए (सुरंग _को मजबूत करने के लिए सुरंग के ऊपर की रेखा का उपयोग करना पड़ता है ):

          /\
         /  \
        /____\
    ___)______(__
     \/        \/
    
  5. जब पहाड़ इसके ऊपर काफी ऊंचा नहीं होता है तो सुरंग को सुदृढ़ करने की आवश्यकता नहीं होती है। यह मेरे लिए भी अजीब लगता है, लेकिन मुझे बताया गया है कि प्रीमियर रोड टाइल्स काफी मजबूत होती हैं, यहां तक ​​कि उस स्थिति में भी बाहर रखा जाता है (सुरंग के ऊपर कोई ढलान होने पर कोई सुरंग की छत नहीं खींची जाती है):

           /\
        /\/__\
    ___)______(__
     \/        \/
    
  6. जब भी सड़क को एक खाई को पार करने की आवश्यकता होती है, तो पुलों की आवश्यकता होती है। छोटे पुलों के लिए प्रीमियर रोड की टाइलें काफी मजबूत हैं, लेकिन अभी भी पुल की शुरुआत और अंत में थोड़ा समर्थन की जरूरत है (पुल के नीचे पहली ढलान और आखिरी ऊपर की ओर ढलान को बदल दिया जाता है Yताकि पुल के लिए एक समर्थन बीम हो। ):

    _____
     Y  Y
      \/
    
  7. लंबे पुलों को अतिरिक्त समर्थन की आवश्यकता है। एक लंबा पुल वह है जिसमें एक पंक्ति में छह से अधिक असमर्थित रोड टाइल हैं। लंबे पुलों को उनके केंद्र में एक स्तंभ की आवश्यकता होती है। खंभे आसानी से हमारे पूर्वनिर्मित स्तंभ बीम के साथ निर्मित होते हैं जो इस तरह दिखते हैं |:। प्रत्येक खंभे को उनमें से दो की जरूरत होती है और वे नीचे की ओर नीचे की ओर होते हैं:

    _____________________________
     Y            ||            Y
      \        /\ || /\      /\/ 
       \  /\  /  \||/  \  /\/    
        \/  \/    \/    \/       
    
  8. चूंकि इनपुट केवल पूरे पर्वत श्रृंखला के एक हिस्से का प्रतिनिधित्व करता है, जिसके माध्यम से फ्रीवे को बनाने की आवश्यकता होती है, यह पुल या सुरंग के बीच में अचानक समाप्त हो सकता है। लंबे खंड का नियम अभी भी अंतिम खंड के लिए लागू होता है और आप मान सकते हैं कि दिए गए इनपुट से परे पहला भाग फिर से पुल का समर्थन करता है।

उपरोक्त नियमों के बाद हमें अपने इनपुट के लिए निम्नलिखित मिलते हैं:

                         /\                                
                        /  \                               
                   /\  /    \                              
            /\    /  \/      \                             
           /  \  /            \                  /\        
          /____\/______________\                /__\       
_________)______________________(________)(____)____(______
 Y      Y                        Y      Y  Y  Y      Y  YY 
  \    /                          \    /    \/        \/  \
   \  /                            \  /                    
    \/                              \/                     

चरित्र गणना जीत से सबसे छोटा कोड। सत्यापन के लिए लाइनों में अनुगामी व्हाट्सएप की अनदेखी की जाती है।

नमूना इनपुट 1

_                                                           
 \                            /\                            
  \                          /  \                           
   \                        /    \                          
    \                /\    /      \              /\        /
     \    /\        /  \  /        \      /\  /\/  \      / 
      \  /  \      /    \/          \    /  \/      \/\  /  
       \/    \    /                  \  /              \/   
              \  /                    \/                    
               \/                                           

नमूना उत्पादन 1

____________________________________________________________
 Y             ||             YY             ||             
  \            ||            /  \            ||             
   \           ||           /    \           ||             
    \          ||    /\    /      \          ||  /\        /
     \    /\   ||   /  \  /        \      /\ |/\/  \      / 
      \  /  \  ||  /    \/          \    /  \/      \/\  /  
       \/    \ || /                  \  /              \/   
              \||/                    \/                    
               \/                                           

नमूना इनपुट 2

                                           /\  /\                      
                                          /  \/  \                    /
           /\                            /        \  /\              / 
    /\    /  \                          /          \/  \            /  
   /  \  /    \/\                      /                \    /\    /   
  /    \/        \                    /                  \  /  \  /    
_/                \                  /                    \/    \/     
                   \                /                                  
                    \            /\/                                   
                     \  /\      /                                      
                      \/  \    /                                       
                           \  /                                        
                            \/                                         

नमूना आउटपुट 2

                                           /\  /\                      
                                          /  \/  \                    /
           /\                            /        \  /\              / 
    /\    /  \                          /          \/  \            /  
   /  \  /    \/\                      /                \    /\    /   
  /____\/________\                    /__________________\  /__\  /____
_)________________(__________________)____________________()____()_____
                   Y       ||       Y                                  
                    \      ||    /\/                                   
                     \  /\ ||   /                                      
                      \/  \||  /                                       
                           \| /                                        
                            \/                                         

ध्यान दें

संदर्भ समाधान के साथ तुलना में आउटपुट में अनुगामी रिक्त स्थान की अनदेखी की जाती है।

जीतने की स्थिति

सबसे कम कोड जीतता है, जैसा कि गोल्फ में प्रथागत है। एक टाई के मामले में, पहले वाला समाधान जीत जाता है।

परीक्षण के मामलों

समान परीक्षण मामलों वाले दो परीक्षण स्क्रिप्ट हैं:

मंगलाचरण दोनों मामलों में है: <test script> <my program> [arguments]जैसे ./test ruby bridges.rbया ./test.ps1 ./bridges.exe

एक और नोट

यह कार्य 2011-डब्ल्यू 24 के दौरान मेरे विश्वविद्यालय में आयोजित एक गोल्फ प्रतियोगिता का हिस्सा था। हमारे प्रतियोगियों के स्कोर और भाषाएँ इस प्रकार थीं:

  • 304 - पर्ल
  • 343 - सी
  • 375 - सी
  • 648 - अजगर

हमारा अपना समाधान (वेंटरो के लिए धन्यवाद) था

  • 262 - रूबी

1
नोट: मैंने परीक्षण स्क्रिप्ट को अद्यतन किया जहां कुछ परीक्षण मामलों में शीर्ष पर एक अनजाने खाली रेखा थी। अब तय होना चाहिए।
जॉय

जवाबों:


8

पर्ल, 210 195 194 193 वर्ण

अद्यतन करें

समान विचारों, लेकिन अधिकांश भाग के लिए बहुत अलग तरीके से लागू किया गया।

perl -p0(स्विच के लिए गिने जाने वाले 4 चार्ट) के साथ दौड़ें।

($o,$c,$r,$b)=/((.+\n)?(_.+\n)(.+\n)?)/;/\n/;$n=$-[0];$c=~s{/ }{/_}g;$r=~y{ /\\}{_)(};map{s{\\(   +)  \1(/|\n)}{\\$1||$1$2}g,y{\\/}{Y}}$b;s/\Q$o/$c$r$b/;1while(s/_ /__/||s/(\|.{$n}) /$1|/s) 

इसके लिए बैश टेस्ट स्क्रिप्ट में बदलाव की आवश्यकता होती है, ताकि आर्गन्स को ओवर-कोट न किया जाए:

-   got=$("$cmd" "$args")
+   got=$("$cmd" $args)

BTW, मैं वास्तव में परीक्षण लिपियों की सराहना करता हूं, @ जॉय।

टिप्पणी की:

#-p : implicitly read input and print after transformations
#-0 : "slurp mode": don't break lines

# grab the roadway line, along with the lines above and below for ceiling and buttresses
# also grab the whole match in $o for replacing later
($o,$c,$r,$b)=/((.+\n)?(_.+\n)(.+\n)?)/;

# compute line length
/\n/;$n=$-[0];

# start ceilings
$c=~s{/ }{/_}g;

# build the road and tunnels
$r=~y{ /\\}{_)(};

# use map to avoid repeating $b =~
map{
  # insert the pillar tops
  s{\\(   +)  \1(/|\n)}{\\$1||$1$2}g,
  # and the buttresses
  y{\\/}{Y}
} $b;

# put those 3 (or 2) lines back into the original
s/\Q$o/$c$r$b/;

# extend ceiling tiles to the right and pillars downward
1while(s/_ /__/||s/(\|.{$n}) /$1|/s)

संपादन :

  • एक और चरित्र को बचाने के लिए " {3,}" को 3 शाब्दिक रिक्त स्थान और +परिमाणक के साथ बदलें
  • 1while(...)फॉर्म का उपयोग करें , जहां मैं स्क्रिप्ट के अंत में अर्धविराम को छोड़ सकता हूं

मूल (टिप्पणी संस्करण के लिए इतिहास देखें)

@a=map{($r=$n),y{ /\\}{_)(}if/_/;$n++;$_}<>;if($r){while($a[$r-1]=~s{(/[ _]*) }{$1_}){}}map{s{(^|\\)( {3,})  \2(/|$)}{$1$2||$2$3}g;y{\\/}{YY}}$a[$r+1];$_=join'',@a;/\n/;$n=$-[0];while(s/(\|.{$n}) /$1|/s){}print

जब तक मेरा काम नहीं होता तब तक मैंने जानबूझकर @ हावर्ड के पर्ल समाधान को नहीं देखा, लेकिन मैं बाद में देख कर अपनी गोल्फ में सुधार कर पाया।

विशेष रूप से, सुरंग की छत और फैले हुए खंभों के लिए रेगीक्स ने मदद की। अच्छी तरह से किया, हावर्ड।

इसके विपरीत, लाइन लंबाई प्राप्त करने के लिए मेरा विकल्प, प्रिंट के लिए निहित $ _ का उपयोग करते हुए, अंतिम अर्धविराम को छोड़कर, और नई कथानक को हटाने से हावर्ड के 222 पात्रों को छोटा किया जा सकता है।


1
के लिए bashपरीक्षण स्क्रिप्ट Ventero करने के लिए धन्यवाद देते हैं। मैंने सिर्फ वही बनाया जो उसने बनाया था और जब तक वह कुछ हद तक काम नहीं करता, तब तक ;-)
जॉय

6

पर्ल, 234 वर्ण

$_=join'',<>;$l=index($_,"\n");
($w)=/(_[^\n]*)/;$w=~y/ \\\//_()/;s/_[^\n]*/$w/e;
while(s/(\/[ _]*) (?=[^\n]*\n_)/$1_/||s/(_.{$l})[\\\/]/$1Y/s){}while(s/(\n( |Y *Y)*)Y( {3,})  \3(Y| ?\n)/\1Y\3||\3\4/||s/(?<=\|.{$l}) /|/s){}
print $_;

यह एक पर्ल रेगेक्स-ओनली सॉल्यूशन है। यह सभी दिए गए परीक्षण मामलों को पास करता है।

समान लेकिन अधिक पठनीय संस्करण परिणाम प्राप्त करने के लिए उठाए गए कदम दिखाता है:

$_=join'',<>;                    # read the input
$l=index($_,"\n");               # determine length of line

($w)=/(_[^\n]*)/;                # extract the line starting with _
$w=~y/ \\\//_()/;                # and build road there (i.e. replace all chars in line)
s/_[^\n]*/$w/e;                  # put road back into string

while(s/(\/[ _]*) (?=[^\n]*\n_)/$1_/||s/(_.{$l})[\\\/]/$1Y/s){}
                                 # build ceiling of tunnels
                                 # build Y supports directly below the road

while(s/(\n( |Y *Y)*)Y( {3,})  \3(Y| ?\n)/\1Y\3||\3\4/||s/(?<=\|.{$l}) /|/s){}
                                 # build center support in middle of bridges
                                 # and extend them down to the ground

print $_;                        # print result

1
ओह। बल्कि सभी हिस्सों में बुराई दिखती है; ;-) पर्ल लोगों को हमेशा सब कुछ सॉल्वैंट्स के साथ क्यों हल करना पड़ता है? :
जॉय

क्योंकि प्रतिगमन एक सच्चे पर्ल हैकर के हथियार हैं:
Z

2
एक पर्ल हैकर (मैंने वर्षों में अपने आप को इस तरह से बुलाया था) काफी सोचता है, जोए: अगर रेगेक्स के साथ एक समस्या को हल किया जा सकता है, तो किसी और चीज से परेशान क्यों? यह वास्तव में नियमित अभिव्यक्ति के लिए एक आदर्श समस्या है, मुझे लगता है: यह वह है या अपने आप को एक बैकट्रैकिंग स्टेट मशीन को लागू करना है।
बूथबीज

यह पूरी तरह से गंभीर नहीं था। मेरे स्वयं के संदर्भ समाधान ने शुरू में बहुत से रीगेक्स का भी उपयोग किया।
जॉय

4

सी ++, 662 622 598 वर्ण, 4 लाइनें

#include<iostream>
#include<string>
#define s for(
#define v g[t][f]
int t,f,r,q,m=-1,w,b,e,h,j,x,y,l,c=18;int main(){std::string g[19];s;r<19;h=c)getline(std::cin,g[r++]);s;c>=0;g[c--].push_back(0))(q=g[c].size())&&g[c][0]-95?0:r=c;s;c<q;y=0){x=g[r][++c];x==47?x=41,w=e=1:++y;x==92?x=40,w=0:++y;t=r-1;f=c;y>1?x=95,w?r&&v==32?v=95:0:++b:0;c-q?0:e=1;t++;s v=x;m<0;)g[h].find(47)<g[h--].npos?m=h:0;t=r+1;if(r<m){(y=v)==47?y=89,e=1:0;v=y-92?y:89;if(e){y=e=0;if((b/=2)>4){j=l=r+1;s;!y;t=j,f=c-b+1,v==32?v=124,++j:0)t=l,y=f=c-b,v==32?v=124,l++,y=0:0;}b=0;}}}s f=q,t=0;t<=m;std::cout<<g[t++]<<'\n')v=32;}

यह यह होना चाहिए, मैंने इसे पॉवरशेल स्क्रिप्ट के साथ परीक्षण किया है इसलिए यह ठीक होना चाहिए ...

संपादित करें 1

सभी चार स्थिरांक को संख्याओं के साथ बदल दिया गया, क्रमिक कॉल को std :: cout + में कुछ अन्य छोटे बदलावों को हटा दिया गया।

संपादित करें 2

अंतिम संपादन, बस इसे 600 से कम प्राप्त करने के लिए। एक जी के रूप में जी [टी] [एफ] को बाहर ले जाएं और कुछ चीजों को चारों ओर ले जाएं।


हां, मेरे पास कुछ परीक्षण मामले गलत थे, लेकिन यह मेरी अपनी गलती है। अब अच्छा लग रहा है :-)
जॉय

क्या यह मदद करेगा #define std::?
फ़ूजएक्सएक्सएल

@FUZxxl, मुझे ऐसा नहीं लगता है, मैं केवल "std ::" का उपयोग करता हूं 4 बार ताकि 20 वर्ण हों, अगर मैंने परिभाषित किया तो मुझे उन स्थानों में से प्रत्येक पर 2 चार्ट की आवश्यकता होगी (उदाहरण के लिए "as a stout" का उपयोग करके std : :) और परिभाषित 12 से अधिक वर्ण लेगा, "नेमस्पेस std का उपयोग करना" या तो इसके लायक नहीं है।
स्कॉट लोगान

3

रूबी, 382 356 353 वर्ण

मैंने एक गैर-रेगेक्स समाधान को एक शॉट देने के लिए सोचा।

m=$<.read;n,r,s,$e,t=(/\n/=~m)+1,/^_/=~m,m.size,(u,d=47,92),0;def j y;$e.member? y;end;(n-1).times{|i|x=r+i;c=m[x];j(c)||(m[x]=95;a,b=x-n,x+n;t<41||a<0||m[a]>32||m[a]=95;b>s||!j(m[b])||(m[b]<d||(p=(/\/|\n/=~m[b..s])/2+b;p-b<4||(w=[f=false,f];p.step(s,n){|p|2.times{|i|(w[i]||=j m[i=p+i])||m[i]='|'}}));m[b]='Y'));c!=u||t=m[x]=41;c!=d||t=m[x]=40};print m

यहां सबसे बड़ा स्पेस सेवर ||इसके बजाय सशर्त ऑपरेटर का उपयोग करना है if - elsif - end। इसलिए लिखने के बजाय if(a) lorem_ipsum endमैंने लिखा है !a||lopem_ipsum। कोष्ठक का उपयोग करके बड़े ब्लॉकों को शामिल किया जा सकता है !a||(block)। यदि शर्त में &&ऑपरेटर शामिल हैं, तो उन्हें कोष्ठक का उपयोग करके !या डे मॉर्गन के नियमों का उपयोग करके नकार दिया जाना चाहिए ।

और यहाँ अधिक शब्दों के साथ भी ऐसा ही है

# read the STDIN to string
mountains = $<.read
line_length,road_level,size,$slopes,in_tunnel =
        (/\n/ =~ mountains) + 1, # Fint the first new line
        /^_/ =~ mountains, # Find the index of the road
        mountains.size, 
        (slope_up,slope_down=47,92),
        0

def is_slope y;$slopes.member? y;end

# For each index in the road line
(line_length - 1).times { |i|
  curindex = road_level + i
  curchar = mountains[curindex]

  # If not a slope then
  (is_slope(curchar))|| (

    # mark road as underscore
    mountains[curindex] = 95
    above, below = curindex - line_length, curindex + line_length

    # add roof to tunnel if in tunnel and the mountain
    # is high enough
    in_tunnel<41||above<0||mountains[above]>32||mountains[above]=95

    # If there's a slope character below the road
    below>size||!is_slope(mountains[below])||(

      # if there's a downward slop - start a bridge
      mountains[below]<slope_down||(

          # If bridge is longer than 6 characters
          # Add support to the middle
          support_pos = (/\/|\n/=~mountains[below..size])/2+below
          support_pos-below<4||(
            # Init collision detection
            collision_detected=[f=false,f]
            # Build supports as long as 
            # There is mountains below
            support_pos.step(size,line_length) { |support_pos|

               # Add two parallel suppports
               2.times { |i|

               # Add support if the bottom of the 
               # gap has not been reached
               (collision_detected[i]||=is_slope(mountains[i=support_pos+i]))||mountains[i] = '|'
               }
            }
          )
      )

      # Add support to the beginning and to the end
      # of the bridge
      mountains[below] = 'Y'
    )
  )

  # Add tunnel entrance and exit
  curchar!=slope_up||in_tunnel=mountains[curindex]=41
  curchar!=slope_down||in_tunnel=mountains[curindex]=40
}

print mountains

परीक्षण ठीक हैं - मैंने इसे परीक्षण करते समय परीक्षण स्क्रिप्ट को खराब कर दिया था ... अजीब।
अलेक्सी यर्थियाहो

2

स्काला, 462 वर्ण

object B extends App{var r="""(?s)((?:.*\n)?)((?:.*?\n)?)(_.*?\n)(.*?\n)(.*)""".r
var r(a,b,c,d,e)=io.Source.stdin.mkString
var s=a+b.replaceAll("(?<=/ {0,99}) (?=.*\\\\)","_")+c.replaceAll("\\\\","(").replaceAll("/",")").replaceAll(" ","_")+d.replaceAll("\\\\( {3,99})  \\1/","Y$1||$1Y").replaceAll("\\\\( {3,99})  \\1\\n","Y$1||$1\n").replaceAll("\\\\( {0,9})/","Y$1Y")+e
for(i<-1 to 15)s=s.replaceAll("(?s)(?<=\\|.{"+s.split("\n")(0).size+"}) ","|")
print(s)}

विशेष रूप से प्रतिस्पर्धी नहीं है, लेकिन मैंने आज नियमित अभिव्यक्तियों के बारे में बहुत कुछ सीखा है। :-)


2

एरलंग, 1182 वर्ण

-module(b).
-export([t/0]).
t()->r([]).
r(R)->case io:get_line("")of eof->{_,Q}=lists:foldl(fun([$ |L],{$_,Q})->{$ ,[[$X|L]|Q]};([C|_]=L,{_,Q})->{C,[L|Q]}end,{$ ,[]},R),{_,P}=lists:foldl(fun s/2,{s,[]},lists:flatten(Q)),io:put_chars(lists:reverse(P));L->r([L|R])end.
s($X,{s,R})->{{r,s},[$ |R]};s($/,{{r,s},R})->{{r,r},[$/|R]};s($\\,{{r,r},R})->{{r,s},[$\\|R]};s($\n,{{r,_},R})->{u,[$\n|R]};s(_,{{r,r}=S,R})->{S,[$_|R]};s($_,{_,R})->{u,[$_|R]};s($\n,{u,R})->{{g,i,1,1,[]},[$\n|R]};s($\\,{u=S,R})->{S,[$(|R]};s($/,{u=S,R})->{S,[$)|R]};s(_,{u=S,R})->{S,[$_|R]};s($\\,{{g,i,X,_L,T},R})->{{g,o,X+1,X,[$Y|T]},R};s($/,{{g,o,X,L,T},R})->a(o,X,L),{{g,i,X+1,X,[$Y|T]},R};s($\n,{{g,S,X,L,T},R})->a(S,X,L),{{d,1},[$\n,f(T,X)|R]};s(C,{{g,S,X,L,T},R})->{{g,S,X+1,L,[C|T]},R};s($\n,{{d,_},R})->{{d,1},[$\n|R]};s($ ,{{d,X},R})->{{d,X+1},[case get(X)of y->$|;_->$ end|R]};s($/,{{d,X},R})->put(X,n),{{d,X+1},[$/|R]};s($\\,{{d,X},R})->put(X,n),{{d,X+1},[$\\|R]};s($\n=N,{S,R})->{S,[N|R]};s(X,{S,R})->{S,[X|R]}.
a(o,X,L)when X-L-1>6->Pos=round((X-L-1)/2+L),put(Pos,y),put(Pos+1,y);a(_,_,_)->v.
f(L,M)->{_,R}=lists:foldl(fun(C,{X,R})->case get(M-X)of y->{X+1,[$||R]};_->{X+1,[C|R]}end end,{1,[]},L),R.

प्रतिस्पर्धी बिल्कुल नहीं। सच कहूँ तो, मैं बस कुछ अच्छी एस्की कला के उत्पादन में दिलचस्पी रखता था, गोल्फ में इतना नहीं। ध्यान दें कि यह नियमित अभिव्यक्ति का उपयोग नहीं करता है, इसके बजाय, मैंने खुद को राज्य मशीन लिखा था। यह शेल स्क्रिप्ट में ओवरक्लोटिंग फिक्स की भी आवश्यकता होगी, जो ऊपर दिए गए पर्ल समाधान में उल्लिखित है।


1

पॉवर्सशेल, 300 295 287 बाइट्स

-8 बाइट्स DCharness'es जवाब से झांकना तय करते हैं ।

param($s)filter e{$r,$e=$_-split'#';$e|%{$r=$r-replace($_-split';')};$r}
$x=$s-match'(.+
)?(_.+)(
.+)?'
$o,$c,$r,$b=$Matches[0..3]
for($s=$s|% *ce $o(("$c#/ ;/_"|e)+("$r# ;_#/;)#\\;("|e)+($b+'#\\(   +)  \1;\$1||$1#/|\\;Y'|e));$s-ne($x="$s#_ ;__#(?s)(?<=\|.{$($r|% Le*)}) ;|"|e)){$s=$x}$s

अनगुल्ड परीक्षण स्क्रिप्ट:

$f = {

param($s)
$x=$s-match'(.+
)?(_.+)(
.+)?'
$o,$c,$r,$b=$Matches[0..3]
$c=$c-replace'/ ','/_'                  # we assume that road does not start as a tunnel
$r=$r-replace' ','_'
$r=$r-replace'/',')'
$r=$r-replace'\\','('
$b=$b-replace'\\(   +)  \1','\$1||$1'   # we assume that road does not start as a bridge under a chasm
$b=$b-replace'/|\\','Y'
$s=$s.replace($o,"$c$r$b")              # string method replace (not operator) does not handle regexp
for(;$s-ne($x=$s-replace'_ ','__'-replace"(?s)(?<=\|.{$($r.Length)}) ",'|')){$s=$x}
$s

}

$pass = 0
$count = 0

@(
# Test 2
,(2,@'
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /____\              /____\              /____\      
_)______(____________)______(____________)______(_____
         Y    ||    Y        Y    ||    Y        Y    
          \   ||   /          \   ||   /          \   
           \  ||  /            \  ||  /            \  
            \ || /              \ || /              \ 
             \||/                \||/                \
              \/                  \/                  
'@,@'
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /    \              /    \              /    \      
_/      \            /      \            /      \     
         \          /        \          /        \    
          \        /          \        /          \   
           \      /            \      /            \  
            \    /              \    /              \ 
             \  /                \  /                \
              \/                  \/                  
'@)

# Test 1
,(1,@'
____________________________________________________________
 Y             ||             YY             ||             
  \            ||            /  \            ||             
   \           ||           /    \           ||             
    \          ||    /\    /      \          ||  /\        /
     \    /\   ||   /  \  /        \      /\ |/\/  \      / 
      \  /  \  ||  /    \/          \    /  \/      \/\  /  
       \/    \ || /                  \  /              \/   
              \||/                    \/                    
               \/                                           
'@,@'
_                                                           
 \                            /\                            
  \                          /  \                           
   \                        /    \                          
    \                /\    /      \              /\        /
     \    /\        /  \  /        \      /\  /\/  \      / 
      \  /  \      /    \/          \    /  \/      \/\  /  
       \/    \    /                  \  /              \/   
              \  /                    \/                    
               \/                                           
'@)

# Test 3
,(3,@'
    /\                 
   /  \                
  /____\/\/\/\/\/\/\/\ 
_)____________________(
'@,@'
    /\                 
   /  \                
  /    \/\/\/\/\/\/\/\ 
_/                    \
'@)

# Test 4
,(4,@'
___________________________________________________
 Y           ||           YY          ||          Y
  \          ||          /  \         |/\        / 
   \         ||         /    \        /  \      /  
    \    /\  ||    /\  /      \      /    \    /   
     \  /  \ ||   /  \/        \    /      \  /    
      \/    \||  /              \  /        \/     
             \| /                \/                
              \/                                   
'@,@'
_                                                  
 \                        /\                      /
  \                      /  \          /\        / 
   \                    /    \        /  \      /  
    \    /\        /\  /      \      /    \    /   
     \  /  \      /  \/        \    /      \  /    
      \/    \    /              \  /        \/     
             \  /                \/                
              \/                                   
'@)

# Test 5
,(5,@'
                                                      /
                                                     / 
                                                    /__
___________________________________________________)___
 Y           ||           YY          ||          Y    
  \          ||          /  \         |/\        /     
   \         ||         /    \        /  \      /      
    \    /\  ||    /\  /      \      /    \    /       
     \  /  \ ||   /  \/        \    /      \  /        
      \/    \||  /              \  /        \/         
             \| /                \/                    
              \/                                       
'@,@'
                                                      /
                                                     / 
                                                    /  
_                                                  /   
 \                        /\                      /    
  \                      /  \          /\        /     
   \                    /    \        /  \      /      
    \    /\        /\  /      \      /    \    /       
     \  /  \      /  \/        \    /      \  /        
      \/    \    /              \  /        \/         
             \  /                \/                    
              \/                                       
'@)

# Test 6
,(6,@'
_______________________________)
 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
'@,@'
_                              /
 \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ 
'@)

# Test 7
,(7,@'
_________________________________)
 Y              ||              Y 
  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/  
'@,@'
_                                /
 \                              / 
  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/  
'@)

# Test 8
,(8,@'
      /\    /\    /\    /\    /\    /\ 
_)(__)__(__)__(__)__(__)__(__)__(__)__(
   YY    YY    YY    YY    YY    YY    
'@,@'
      /\    /\    /\    /\    /\    /\ 
_/\  /  \  /  \  /  \  /  \  /  \  /  \
   \/    \/    \/    \/    \/    \/    
'@)

# Test 9
,(9,@'
  /\/\/\/\/\/\/\/\ 
_)________________(
'@,@'
  /\/\/\/\/\/\/\/\ 
_/                \
'@)

# Test 10
,(10,@'
      /\                                                            /\                              
     /  \                                                          /  \                             
    /    \                                                        /    \                            
   /      \                                                      /      \                           
  /________\                                                    /________\/\/\/\/\                  
_)__________(__________________________________________________)__________________(______)(_________
             Y                       ||                       Y                    Y    Y  Y   ||   
              \                      ||    /\                /                      \  /    \  ||  /
               \    /\               ||   /  \              /                        \/      \ || / 
                \  /  \              ||  /    \            /                                  \||/  
                 \/    \             || /      \          /                                    \/   
                        \        /\  ||/        \        /                                          
                         \      /  \ |/          \      /                                           
                          \    /    \/            \    /                                            
                           \/\/                    \/\/                                             
'@,@'
      /\                                                            /\                              
     /  \                                                          /  \                             
    /    \                                                        /    \                            
   /      \                                                      /      \                           
  /        \                                                    /        \/\/\/\/\                  
_/          \                                                  /                  \      /\         
             \                                                /                    \    /  \        
              \                            /\                /                      \  /    \      /
               \    /\                    /  \              /                        \/      \    / 
                \  /  \                  /    \            /                                  \  /  
                 \/    \                /      \          /                                    \/   
                        \        /\    /        \        /                                          
                         \      /  \  /          \      /                                           
                          \    /    \/            \    /                                            
                           \/\/                    \/\/                                             
'@)

# Test 11
,(11,@'
__________________________________________________
 Y     ||     YY     ||     YY         ||         
  \    ||    /  \    ||    /  \        /\         
   \   ||   /    \   ||   /    \      /  \    /\  
    \  ||  /      \  ||  /      \    /    \  /  \/
     \ || /        \ || /        \  /      \/     
      \||/          \||/          \/              
       \/            \/                           
'@,@'
_                                                 
 \            /\            /\                    
  \          /  \          /  \        /\         
   \        /    \        /    \      /  \    /\  
    \      /      \      /      \    /    \  /  \/
     \    /        \    /        \  /      \/     
      \  /          \  /          \/              
       \/            \/                           
'@)

# Test 12
,(12,@'
                                           /\  /\                      
                                          /  \/  \                    /
           /\                            /        \  /\              / 
    /\    /  \                          /          \/  \            /  
   /  \  /    \/\                      /                \    /\    /   
  /____\/________\                    /__________________\  /__\  /____
_)________________(__________________)____________________()____()_____
                   Y       ||       Y                                  
                    \      ||    /\/                                   
                     \  /\ ||   /                                      
                      \/  \||  /                                       
                           \| /                                        
                            \/                                         
'@,@'
                                           /\  /\                      
                                          /  \/  \                    /
           /\                            /        \  /\              / 
    /\    /  \                          /          \/  \            /  
   /  \  /    \/\                      /                \    /\    /   
  /    \/        \                    /                  \  /  \  /    
_/                \                  /                    \/    \/     
                   \                /                                  
                    \            /\/                                   
                     \  /\      /                                      
                      \/  \    /                                       
                           \  /                                        
                            \/                                         
'@)

# Test 13
,(13,@'
_____________)(____________)(_____________________
 Y    ||    Y  Y    ||    Y  Y   ||   YY    ||    
  \   ||   /    \   ||   /    \  ||  /  \   |/\  /
   \  ||  /      \  ||  /      \ || /    \  /  \/ 
    \ || /        \ || /        \||/      \/      
     \||/          \||/          \/               
      \/            \/                            
'@,@'
_            /\            /\                     
 \          /  \          /  \        /\          
  \        /    \        /    \      /  \    /\  /
   \      /      \      /      \    /    \  /  \/ 
    \    /        \    /        \  /      \/      
     \  /          \  /          \/               
      \/            \/                            
'@)

# Test 14
,(14,@'
            /\            /\                    
___________)__(__________)__(________)(_________
 Y   ||   Y    Y   ||   Y    Y      Y  Y    YY  
  \  ||  /      \  ||  /      \    /    \  /  \/
   \ || /        \ || /        \  /      \/     
    \||/          \||/          \/              
     \/            \/                           
'@,@'
            /\            /\                    
_          /  \          /  \        /\         
 \        /    \        /    \      /  \    /\  
  \      /      \      /      \    /    \  /  \/
   \    /        \    /        \  /      \/     
    \  /          \  /          \/              
     \/            \/                           
'@)

# Test 15
,(15,@'
           /\            /\                    
          /__\          /__\        /\         
_________)____(________)____(______)__(____)(__
 Y      Y      Y      Y      Y    Y    Y  Y  YY
  \    /        \    /        \  /      \/     
   \  /          \  /          \/              
    \/            \/                           
'@,@'
           /\            /\                    
          /  \          /  \        /\         
_        /    \        /    \      /  \    /\  
 \      /      \      /      \    /    \  /  \/
  \    /        \    /        \  /      \/     
   \  /          \  /          \/              
    \/            \/                           
'@)

# Test 16
,(16,@'
          /\            /\                    
         /  \          /  \        /\         
        /____\        /____\      /__\    /\  
_______)______(______)______(____)____(__)__()
 Y    Y        Y    Y        Y  Y      YY     
  \  /          \  /          \/              
   \/            \/                           
'@,@'
          /\            /\                    
         /  \          /  \        /\         
        /    \        /    \      /  \    /\  
_      /      \      /      \    /    \  /  \/
 \    /        \    /        \  /      \/     
  \  /          \  /          \/              
   \/            \/                           
'@)

# Test 17
,(17,@'
         /\            /\                    
        /  \          /  \        /\         
       /    \        /    \      /  \    /\  
      /______\      /______\    /____\  /__\/
_____)________(____)________(__)______()_____
 Y  Y          Y  Y          YY              
  \/            \/                           
'@,@'
         /\            /\                    
        /  \          /  \        /\         
       /    \        /    \      /  \    /\  
      /      \      /      \    /    \  /  \/
_    /        \    /        \  /      \/     
 \  /          \  /          \/              
  \/            \/                           
'@)

# Test 18
,(18,@'
        /\            /\                    
       /  \          /  \        /\         
      /    \        /    \      /  \    /\  
     /      \      /      \    /    \  /  \/
    /________\    /________\  /______\/_____
___)__________(__)__________()______________
 YY            YY                           
'@,@'
        /\            /\                    
       /  \          /  \        /\         
      /    \        /    \      /  \    /\  
     /      \      /      \    /    \  /  \/
    /        \    /        \  /      \/     
_  /          \  /          \/              
 \/            \/                           
'@)

# Test 19
,(19,@'
       /\            /\                    
      /  \          /  \        /\         
     /    \        /    \      /  \    /\  
    /      \      /      \    /    \  /  \/
   /        \    /        \  /      \/     
  /__________\  /__________\/______________
_)____________()___________________________
'@,@'
       /\            /\                    
      /  \          /  \        /\         
     /    \        /    \      /  \    /\  
    /      \      /      \    /    \  /  \/
   /        \    /        \  /      \/     
  /          \  /          \/              
_/            \/                           
'@)

# Test 20
,(20,@'
__________________________________________________
 Y     ||     YY     ||     YY         ||         
  \    ||    /  \    ||    /  \        /\         
   \   ||   /    \   ||   /    \      /  \    /\  
    \  ||  /      \  ||  /      \    /    \  /  \ 
     \ || /        \ || /        \  /      \/    \
      \||/          \||/          \/              
       \/            \/                           
'@,@'
_                                                 
 \            /\            /\                    
  \          /  \          /  \        /\         
   \        /    \        /    \      /  \    /\  
    \      /      \      /      \    /    \  /  \ 
     \    /        \    /        \  /      \/    \
      \  /          \  /          \/              
       \/            \/                           
'@)

# Test 21
,(21,@'
      /\            /\                    
     /  \          /  \        /\         
    /    \        /    \      /  \    /\  
   /      \      /      \    /    \  /  \/
  /________\    /________\  /______\/_____
_)__________(__)__________()______________
             YY                           
'@,@'
      /\            /\                    
     /  \          /  \        /\         
    /    \        /    \      /  \    /\  
   /      \      /      \    /    \  /  \/
  /        \    /        \  /      \/     
_/          \  /          \/              
             \/                           
'@)

# Test 22
,(22,@'
     /\            /\                    
    /  \          /  \        /\         
   /    \        /    \      /  \    /\  
  /______\      /______\    /____\  /__\/
_)________(____)________(__)______()_____
           Y  Y          YY              
            \/                           
'@,@'
     /\            /\                    
    /  \          /  \        /\         
   /    \        /    \      /  \    /\  
  /      \      /      \    /    \  /  \/
_/        \    /        \  /      \/     
           \  /          \/              
            \/                           
'@)

# Test 23
,(23,@'
                         /\                                 
                        /  \                                
                   /\  /    \                               
            /\    /  \/      \                              
           /  \  /            \                  /\         
          /____\/______________\                /__\        
_________)______________________(________)(____)____(_______
 Y      Y                        Y      Y  Y  Y      Y  YY  
  \    /                          \    /    \/        \/  \/
   \  /                            \  /                     
    \/                              \/                      
'@,@'
                         /\                                 
                        /  \                                
                   /\  /    \                               
            /\    /  \/      \                              
           /  \  /            \                  /\         
          /    \/              \                /  \        
_        /                      \        /\    /    \       
 \      /                        \      /  \  /      \  /\  
  \    /                          \    /    \/        \/  \/
   \  /                            \  /                     
    \/                              \/                      
'@)

# Test 24
,(24,@'
    /\            /\                    
   /  \          /  \        /\         
  /____\        /____\      /__\    /\  
_)______(______)______(____)____(__)__()
         Y    Y        Y  Y      YY     
          \  /          \/              
           \/                           
'@,@'
    /\            /\                    
   /  \          /  \        /\         
  /    \        /    \      /  \    /\  
_/      \      /      \    /    \  /  \/
         \    /        \  /      \/     
          \  /          \/              
           \/                           
'@)

# Test 25
,(25,@'
   /\            /\                    
  /__\          /__\        /\         
_)____(________)____(______)__(____)(__
       Y      Y      Y    Y    Y  Y  YY
        \    /        \  /      \/     
         \  /          \/              
          \/                           
'@,@'
   /\            /\                    
  /  \          /  \        /\         
_/    \        /    \      /  \    /\  
       \      /      \    /    \  /  \/
        \    /        \  /      \/     
         \  /          \/              
          \/                           
'@)

# Test 26
,(26,@'
  /\            /\                    
_)__(__________)__(________)(_________
     Y   ||   Y    Y      Y  Y    YY  
      \  ||  /      \    /    \  /  \/
       \ || /        \  /      \/     
        \||/          \/              
         \/                           
'@,@'
  /\            /\                    
_/  \          /  \        /\         
     \        /    \      /  \    /\  
      \      /      \    /    \  /  \/
       \    /        \  /      \/     
        \  /          \/              
         \/                           
'@)

# Test 27
,(27,@'
_)(____________)(_____________________
   Y    ||    Y  Y   ||   YY    ||    
    \   ||   /    \  ||  /  \   |/\  /
     \  ||  /      \ || /    \  /  \/ 
      \ || /        \||/      \/      
       \||/          \/               
        \/                            
'@,@'
_/\            /\                     
   \          /  \        /\          
    \        /    \      /  \    /\  /
     \      /      \    /    \  /  \/ 
      \    /        \  /      \/      
       \  /          \/               
        \/                            
'@)

# Test 28
,(28,@'
____________________________________
 Y     ||     YY         ||         
  \    ||    /  \        /\         
   \   ||   /    \      /  \    /\  
    \  ||  /      \    /    \  /  \/
     \ || /        \  /      \/     
      \||/          \/              
       \/                           
'@,@'
_                                   
 \            /\                    
  \          /  \        /\         
   \        /    \      /  \    /\  
    \      /      \    /    \  /  \/
     \    /        \  /      \/     
      \  /          \/              
       \/                           
'@)

# Test 29
,(29,@'
_____________________________
 Y            ||            Y
  \        /\ || /\      /\/ 
   \  /\  /  \||/  \  /\/    
    \/  \/    \/    \/       
'@,@'
_                            
 \                          /
  \        /\    /\      /\/ 
   \  /\  /  \  /  \  /\/    
    \/  \/    \/    \/       
'@)

# Test 30
,(30,@'
_____
 Y  Y
  \/ 
'@,@'
_    
 \  /
  \/ 
'@)

# Test 31
,(31,@'
       /\    
    /\/__\   
___)______(__
 YY        YY
'@,@'
       /\    
    /\/  \   
_  /      \  
 \/        \/
'@)

# Test 32
,(32,@'
      /\     
     /  \    
    /____\   
___)______(__
 YY        YY
'@,@'
      /\     
     /  \    
    /    \   
_  /      \  
 \/        \/
'@)

# Test 33
,(33,@'
_______
 Y    Y
  \/\/ 
'@,@'
_      
 \    /
  \/\/ 
'@)

# Test 34
,(34,@'
_)()()()()()()()()()()()()()()()()()(
'@,@'
_/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
'@)

) | % {
    $num, $expected, $s = $_
    $result = &$f $s
    $passed=$result-eq$expected
    "$num : $passed"
    # $result           # uncomment this line to display results

    $pass+=$passed
    $count+=1
}

"$pass/$count passed."

आउटपुट:

2 : True
1 : True
3 : True
4 : True
5 : True
6 : True
7 : True
8 : True
9 : True
10 : True
11 : True
12 : True
13 : True
14 : True
15 : True
16 : True
17 : True
18 : True
19 : True
20 : True
21 : True
22 : True
23 : True
24 : True
25 : True
26 : True
27 : True
28 : True
29 : True
30 : True
31 : True
32 : True
33 : True
34 : True
34/34 passed.

स्पष्टीकरण कॉमिक्स:

Start here:
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /    \              /    \              /    \      
_/      \            /      \            /      \     
         \          /        \          /        \    
          \        /          \        /          \   
           \      /            \      /            \  
            \    /              \    /              \ 
             \  /                \  /                \
              \/                  \/                  

Match and zoom it!
  /    \              /    \              /    \      $ceiling \
_/      \            /      \            /      \     $road    |  $outline
         \          /        \          /        \    $bottom  /

Start ceiling:
  /_   \              /_   \              /_   \      $ceiling \
_/      \            /      \            /      \     $road    |  $outline
         \          /        \          /        \    $bottom  /

Dig tunnels, build a road:
  /_   \              /_   \              /_   \      $ceiling \
_)______(____________)______(____________)______(_____$road    |  $outline
         \          /        \          /        \    $bottom  /

Attach to the road the top parts of pillars:
  /_   \              /_   \              /_   \      $ceiling \
_)______(____________)______(____________)______(_____$road    |  $outline
         \    ||    /        \    ||    /        \    $bottom  /

The road need support:
  /____\              /____\              /____\      $ceiling \
_)______(____________)______(____________)______(_____$road    |  $outline
         Y    ||    Y        Y    ||    Y        Y    $bottom  /

Put the road back into mountainous lands:
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /_   \              /_   \              /_   \      $ceiling \
_)______(____________)______(____________)______(_____$road    |  $outline
         Y    ||    Y        Y    ||    Y        Y    $bottom  /
          \        /          \        /          \   
           \      /            \      /            \  
            \    /              \    /              \ 
             \  /                \  /                \
              \/                  \/                  

Build ceilings and build down pillars:
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /__  \              /__  \              /__  \      
_)______(____________)______(____________)______(_____
         Y    ||    Y        Y    ||    Y        Y    
          \   ||   /          \   ||   /          \   
           \      /            \      /            \  
            \    /              \    /              \ 
             \  /                \  /                \
              \/                  \/                  

A few iterations later...
    /\                  /\                  /\        
   /  \                /  \                /  \       
  /____\              /____\              /____\      
_)______(____________)______(____________)______(_____
         Y    ||    Y        Y    ||    Y        Y    
          \   ||   /          \   ||   /          \   
           \  ||  /            \  ||  /            \  
            \ || /              \ || /              \ 
             \||/                \||/                \
              \/                  \/                  

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