Cầu và đường hầm


32

Bạn có trách nhiệm xây dựng một đường cao tốc mới. Tuy nhiên, nó dẫn qua các vùng đất miền núi và do đó cần rất nhiều cây cầu và đường hầm. Đường cao tốc nên ở một cấp độ duy nhất.

Đầu vào

Bạn được cung cấp một mô tả ASCII thô về cách các ngọn núi trông như thế nào trên đầu vào tiêu chuẩn, chẳng hạn như sau:

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

Các _trong dấu cột đầu tiên khi bắt đầu và mức độ đường. Dãy núi tiếp giáp nhau và nếu đoạn cuối cùng sẽ là một cây cầu, nó có số lượng ký tự chẵn.

Bạn có thể cho rằng một dòng đầu vào không bao giờ dài hơn 100 ký tự và không có quá 15 dòng. Mỗi dòng có cùng độ dài có thể được đệm không gian ở cuối. Con đường không bao giờ bắt đầu trong một ngọn núi hoặc như một cây cầu. Điều đầu tiên sau lát đường trong đầu vào là độ dốc xuống hoặc lên.

Đầu ra

Đầu ra là cùng một dãy núi, ngoại trừ việc bây giờ có một con đường mà trước đây chỉ là khởi đầu của nó. Đầu ra được đưa ra trên đầu ra tiêu chuẩn.

Đối với điều này có rất nhiều quy tắc:

  1. Đường phải bắt đầu tại địa điểm được chỉ định trong đầu vào và giữ nguyên mức trong suốt. Để làm cho nó dễ dàng hơn, chúng tôi đã chuẩn bị một số lát đường có mặt trước như sau _:

    _______
     \    /
      \/\/
    
  2. Con đường phải kéo dài đến cuối dãy núi (tức là chiều dài của các đường đầu vào cho biết con đường đi được bao xa).

  3. Đường hầm phải được khoan bất cứ khi nào một ngọn núi là nơi đường cần đi. Các đường hầm đi thẳng qua núi và để lại các lỗ ở đầu và cuối (nghĩa là một đường hầm thay thế độ dốc của núi bằng dấu ngoặc đóng ở đầu và dấu ngoặc mở ở cuối).

  4. Các đường hầm rời đi, tốt, một đường hầm trong núi thường có trần. May mắn lát gạch đường của chúng tôi may mắn có thể được sử dụng để gia cố trần để đường hầm không bị sập (đường phía trên đường hầm phải sử dụng _để gia cố đường hầm):

          /\
         /  \
        /____\
    ___)______(__
     \/        \/
    
  5. Đường hầm không cần phải gia cố khi ngọn núi không đủ cao so với nó. Nghe có vẻ lạ đối với tôi nhưng tôi đã được bảo rằng gạch lát đường có đủ mạnh để giữ ngay cả khi cách nhau trong trường hợp đó (không có trần hầm nào được vẽ khi có độ dốc ngay phía trên đường hầm):

           /\
        /\/__\
    ___)______(__
     \/        \/
    
  6. Cầu là cần thiết bất cứ khi nào con đường cần phải vượt qua một vực thẳm. Đối với những cây cầu ngắn, gạch lát nền có đủ mạnh nhưng vẫn cần một chút hỗ trợ ở đầu và cuối cầu (dốc xuống đầu tiên dưới cầu và dốc lên cuối cùng được thay thế Yđể có một chùm hỗ trợ cho cầu ):

    _____
     Y  Y
      \/
    
  7. Cầu dài hơn cần hỗ trợ thêm. Một cây cầu dài là một cây cầu có hơn sáu ô đường không được hỗ trợ liên tiếp. Những cây cầu dài cần một cây cột ở trung tâm của họ. Trụ cột dễ dàng được xây dựng với dầm trụ dựng sẵn của chúng tôi trông như thế này : |. Mỗi trụ cột cần hai trong số chúng và chúng kéo dài xuống tận cùng của vực thẳm:

    _____________________________
     Y            ||            Y
      \        /\ || /\      /\/ 
       \  /\  /  \||/  \  /\/    
        \/  \/    \/    \/       
    
  8. Vì đầu vào chỉ đại diện cho một phần của toàn bộ dãy núi, đường cao tốc cần được xây dựng xuyên qua, nên nó có thể kết thúc đột ngột ở giữa một cây cầu hoặc đường hầm. Quy tắc cầu dài vẫn áp dụng cho phân đoạn cuối cùng và bạn có thể giả sử rằng phần đầu tiên ngoài đầu vào đã cho hỗ trợ lại cầu.

Theo các quy tắc trên, chúng tôi nhận được những điều sau đây cho đầu vào của chúng tôi:

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

Mã ngắn nhất theo số ký tự thắng. Trailing khoảng trắng trong các dòng được bỏ qua để xác nhận.

Mẫu đầu vào 1

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

Sản lượng mẫu 1

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

Mẫu đầu vào 2

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

Sản lượng mẫu 2

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

chú thích

Không gian lưu trữ trong đầu ra được bỏ qua để so sánh với các giải pháp tham chiếu.

Điều kiện chiến thắng

Mã ngắn nhất sẽ thắng, như thông lệ trong golf. Trong trường hợp hòa, giải pháp trước đó thắng.

Các trường hợp thử nghiệm

Có hai tập lệnh kiểm tra, chứa các trường hợp kiểm thử giống hệt nhau:

Yêu cầu trong cả hai trường hợp : <test script> <my program> [arguments], ví dụ ./test ruby bridges.rbhoặc ./test.ps1 ./bridges.exe.

Một lưu ý khác

Nhiệm vụ này là một phần của cuộc thi golf được tổ chức tại trường đại học của tôi trong năm 2011-W24. Điểm số và ngôn ngữ của các thí sinh của chúng tôi như sau:

  • 304 - Perl
  • 343 - C
  • 375 - C
  • 648 - Con trăn

Giải pháp riêng của chúng tôi (nhờ Ventero) là

  • 262 - Ruby

1
Lưu ý: Tôi đã cập nhật các tập lệnh kiểm tra trong đó một số trường hợp kiểm thử chứa một dòng trống không chủ ý ở trên cùng. Nên sửa ngay.
Joey

Câu trả lời:


8

Perl, 210 195 194 193 ký tự

cập nhật

Cùng một ý tưởng, nhưng được áp dụng rất khác nhau, đối với hầu hết các phần.

Chạy với perl -p0(4 ký tự được tính cho các công tắc).

($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) 

Điều này cũng yêu cầu thay đổi tập lệnh kiểm tra bash, để không trích dẫn quá nhiều đối số:

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

BTW, tôi thực sự đánh giá cao các kịch bản thử nghiệm, @Joey.

bình luận:

#-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)

chỉnh sửa :

  • thay thế " {3,}" bằng 3 khoảng trắng và bộ +định lượng, để lưu ký tự khác
  • sử dụng 1while(...)biểu mẫu, nơi tôi có thể bỏ qua dấu chấm phẩy ở cuối tập lệnh

bản gốc (xem lịch sử cho phiên bản nhận xét)

@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

Tôi đã cố tình không nhìn vào giải pháp Perl của @ Howard cho đến khi tôi làm việc, nhưng tôi đã có thể cải thiện việc chơi golf của mình bằng cách xem xét sau đó.

Đặc biệt, các biểu thức cho trần hầm và các trụ mở rộng đã giúp. Làm tốt lắm, Howard.

Ngược lại, giải pháp thay thế của tôi để lấy độ dài dòng, sử dụng $ _ ẩn cho bản in, bỏ dấu chấm phẩy cuối cùng và xóa dòng mới có thể rút ngắn Howard xuống còn 222 ký tự.


1
Đối với bashkịch bản thử nghiệm, xin cảm ơn Ventero. Tôi chỉ lấy những gì anh ta tạo ra và bash nó cho đến khi nó hoạt động được phần nào ;-)
Joey

6

Perl, 234 ký tự

$_=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 $_;

Đây là một giải pháp chỉ có perex regex. Nó vượt qua tất cả các trường hợp thử nghiệm nhất định.

Phiên bản giống hệt nhưng dễ đọc hơn cho thấy các bước được thực hiện để có được kết quả:

$_=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
Rất tiếc. Điều đó có vẻ khá xấu xa trong tất cả các phần ;-). Tại sao người Perl luôn phải giải quyết mọi thứ bằng regexes? : -þ
Joey

Bởi vì các chế độ là vũ khí của một hacker Perl thực thụ: ð
FUZxxl

2
Một hacker perl (tôi đã tự gọi mình như vậy trong nhiều năm qua) nghĩ hoàn toàn khác, Joey: nếu một vấn đề có thể được giải quyết bằng regexes, tại sao phải bận tâm với bất cứ điều gì khác? Đây thực sự là một vấn đề lý tưởng cho các biểu thức thông thường, tôi nghĩ rằng: đó là hoặc tự thực hiện một máy trạng thái quay lui.
gian hàng

Điều đó không có nghĩa là hoàn toàn nghiêm trọng. Giải pháp tham khảo của riêng tôi ban đầu cũng sử dụng rất nhiều regexes.
Joey

4

C ++, 662 622 598 ký tự, 4 dòng

#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;}

Đây là nó, tôi đã thử nghiệm điều này với kịch bản powershell để nó ổn ...

Chỉnh sửa 1

Thay thế tất cả các hằng số char bằng các số, loại bỏ các cuộc gọi liên tiếp đến std :: cout + một vài thay đổi nhỏ khác.

Chỉnh sửa 2

chỉnh sửa lần cuối, chỉ để có được ít hơn 600. Lấy ra g [t] [f] dưới dạng #define và di chuyển một vài thứ xung quanh.


Đúng, tôi đã có một vài trường hợp thử nghiệm sai, nhưng đó là lỗi của riêng tôi. Có vẻ tốt bây giờ :-)
Joey

Nó sẽ giúp #define std::?
FUZxxl

@FUZxxl, tôi không nghĩ vậy, tôi chỉ sử dụng "std ::" 4 lần nên 20 ký tự, nếu tôi sử dụng một định nghĩa tôi sẽ cần 2 ký tự ở mỗi vị trí đó (ví dụ: "một cout" sử dụng như một std : :) và định nghĩa sẽ mất hơn 12 ký tự, "sử dụng không gian tên std" cũng không có giá trị.
Scott Logan

3

Ruby, 382 356 353 ký tự

Tôi nghĩ sẽ đưa ra một giải pháp phi regex.

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

Trình tiết kiệm không gian lớn nhất ở đây là sử dụng ||toán tử có điều kiện thay vì if - elsif - end. Vì vậy, thay vì viết if(a) lorem_ipsum endtôi đã viết !a||lopem_ipsum. Các khối lớn hơn có thể bao gồm sử dụng dấu ngoặc đơn !a||(block). Nếu điều kiện bao gồm các &&nhà khai thác thì họ phải phủ nhận bằng cách sử dụng dấu ngoặc đơn và a !hoặc bằng cách sử dụng luật của De Morgan.

Và đây là cùng một từ với nhiều từ hơn

# 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

Các bài kiểm tra đều ổn - Tôi vừa vặn kịch bản kiểm tra trong khi dán nó ... thật khó xử.
Aleksi Yrttiaho

2

Scala, 462 ký tự

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)}

Không đặc biệt cạnh tranh, nhưng tôi đã học được rất nhiều về các biểu thức thông thường ngày hôm nay. :-)


2

Erlang, 1182 ký tự

-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.

Không cạnh tranh chút nào. Thành thật mà nói, tôi chỉ đơn giản là quan tâm đến việc sản xuất một số nghệ thuật ascii tốt đẹp, không quá nhiều trong việc chơi golf. Lưu ý rằng điều này không sử dụng các biểu thức thông thường, thay vào đó, tôi đã tự viết máy trạng thái. Điều này cũng sẽ cần sửa chữa quá mức trong tập lệnh shell, được đề cập trong giải pháp perl ở trên.


1

Powershell, 300 295 287 byte

-8 byte sửa lỗi nhìn trộm từ câu trả lời của DCharness .

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

Kịch bản kiểm tra bị lật tẩy:

$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."

Đầu ra:

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.

Truyện tranh giải thích:

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!
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.