Mê cung ASCII kết xuất 3000


42

Tôi không thích gõ, vì vậy tôi vẽ mê cung của mình ở một định dạng rất đơn giản:

# #####
#     #
# ### #
# # # #
#   # #
##### #

Không phải là mê cung sao? Tất nhiên, tôi nghĩ rằng tất cả các mê cung nên trông giống 3d, tương tự nhưng không giống với thử thách này , vì tối đa là mê cung , vì vậy tôi (miễn cưỡng) cập nhật thủ công mê cung như thế này:

+-----+     +-----------------------------+
|\     \    |\                             \
+ \     \   + \                             \
 \ \     \   \ +-----------------------+     \
  \ \     \   \|                       |\     \
   \ \     \   +-----------------------+ \     \
    \ \     \     +-----------------+   \ \     \
     \ \     \    |\                 \   \ \     \
      \ \     \   + \                 \   \ \     \
       \ \     \   \ \     +-----+     \   \ \     \
        \ \     \   \ \     \    |\     \   \ \     \
         \ \     \   \ \     \---+ \     \   \ \     \
          \ \     \   \ +-----+   \ \     \   \ \     \
           \ \     \   \|     |    \ \     \   \ \     \
            \ \     \   +-----+     \ \     \   \ \     \
             \ \     +-----------------+     \   \ \     \
              \ \                             \   \ \     \
               \ \                             \   \ \     \
                \ +-----------------------------+   \ +-----+
                 \|                             |    \|     |
                  +-----------------------------+     +-----+

Thật không may, thật khó để làm việc với mê cung ở định dạng đó và sau tất cả cách gõ thủ công đó, tôi không muốn gõ lại bản gốc, vì vậy tôi cần bạn viết chương trình để thực hiện đảo ngược cho tôi.

Quy tắc

  • Đầu vào sẽ là một chuỗi hoặc nhân vật ma trận multiline gồm duy nhất của " ", "|", "\", "+", "-", và dòng mới.
  • Đầu ra bao gồm " ""#", trong mô hình được mô tả bởi mê cung.
  • Do kỹ năng thiết kế mê cung tuyệt vời của tôi, bạn không thể giả định gì về cấu trúc của mê cung, ngoài việc đó là một cấu trúc giải mã hợp lệ.
  • Trong 3d-ificate, (quy trình bây giờ bạn phải hoàn tác,) từng #được chuyển đổi thành khối ký tự 3x4x7 này:
    +-----+
    |\     \
    + \     \
     \ +-----+
      \|     |
       +-----+
    
  • Các khối liền kề được nối với nhau, như thế này:
    +-----+-----+
    |\     \     \
    + \     \     \
     \ +-----+-----+
      \|\     \     \
       + \     \     \
        \ +-----+-----+
         \|     |     |
          +-----+-----+
    
    nhưng không tham gia các dòng, vì vậy nó thực sự trông như thế này:
    +-----------+
    |\           \
    + \           \
     \ \           \
      \ \           \
       \ \           \
        \ +-----------+
         \|           |
          +-----------+
    
  • Không gian lõm đôi khi chặn các phần của các bức tường khác.
    +-----------+
    |\           \
    + \           \
     \ \     +-----+
      \ \     \    |
       \ \     \---+
        \ +-----+
         \|     |
          +-----+
    
  • Trailing khoảng trắng trong đầu vào hoặc đầu ra là chấp nhận được. (Bạn phải chỉ định nếu câu trả lời của bạn yêu cầu khoảng trắng ở đầu vào.)
  • Khoảng trắng hàng đầu phải tương ứng với khoảng trống trong đầu vào.
  • Tôi vẫn không thích gõ, vì vậy mã ngắn nhất sẽ thắng

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

Input:
+-----+     +-----------------------------+
|\     \    |\                             \
+ \     \   + \                             \
 \ \     \   \ +-----------------------+     \
  \ \     \   \|                       |\     \
   \ \     \   +-----------------------+ \     \
    \ \     \     +-----------------+   \ \     \
     \ \     \    |\                 \   \ \     \
      \ \     \   + \                 \   \ \     \
       \ \     \   \ \     +-----+     \   \ \     \
        \ \     \   \ \     \    |\     \   \ \     \
         \ \     \   \ \     \---+ \     \   \ \     \
          \ \     \   \ +-----+   \ \     \   \ \     \
           \ \     \   \|     |    \ \     \   \ \     \
            \ \     \   +-----+     \ \     \   \ \     \
             \ \     +-----------------+     \   \ \     \
              \ \                             \   \ \     \
               \ \                             \   \ \     \
                \ +-----------------------------+   \ +-----+
                 \|                             |    \|     |
                  +-----------------------------+     +-----+

Output:
# #####
#     #
# ### #
# # # #
#   # #
##### #

Input:
+-----+
|\     \
+ \     \
 \ +-----+
  \|     |
   +-----+

Output:
#

Input:
      +-----------------+
      |\                 \
      + \                 \
   +-----+     +-----+     +-----+
   |\           \    |\           \
   + \           \---+ \           \
    \ \     +-----+   \ +-----+     \
     \ \     \    |    \|     |\     \
      \ \     \---+     +-----+ \     \
       \ \     +-----+     +-----+     \
        \ \           \    |\           \
         \ \           \   + \           \
          \ +-----+     +-----+     +-----+
           \|     |\                 \    |
            +-----+ \                 \---+
                   \ +-----------------+
                    \|                 |
                     +-----------------+

Output:
 ###
## ##
#   #
## ##
 ###

Input:
+-----------------------------------------------------------------------------------------------------+
|\                                                                                                     \
+ \                                                                                                     \
 \ +-----------------------------------------------+     +-----------------------------------------+     \
  \|                                               |\     \                                        |\     \
   +-----------------------------------------------+ \     \---------------------------------------+ \     \
      +-----+     +-----------------------------+   \ \     \     +-----------------------------+   \ \     \
      |\     \    |\                             \   \ \     \    |\                             \   \ \     \
      + \     \   + \                             \   \ \     \   + \                             \   \ \     \
       \ \     \   \ +-----------+     +-----+     \   \ \     \   \ +-----------------------+     \   \ \     \
        \ \     \   \|           |\     \    |\     \   \ \     \   \|                       |\     \   \ \     \
         \ \     \   +-----------+ \     \---+ \     \   \ \     \   +-----------------------+ \     \   \ \     \
          \ \     \     +-----+   \ \     \   \ \     \   \ \     +-----------------------+   \ \     \   \ \     \
           \ \     \    |\     \   \ \     \   \ \     \   \ \                             \   \ \     \   \ \     \
            \ \     \   + \     \   \ \     \   \ \     \   \ \                             \   \ \     \   \ \     \
             \ \     \   \ +-----+   \ \     \   \ \     \   \ +-----------------------------+   \ \     \   \ \     \
              \ \     \   \|     |    \ \     \   \ \     \   \|                             |    \ \     \   \ \     \
               \ \     \   +-----+     \ \     \   \ \     \   +-----------------------------+     \ \     \   \ \     \
                \ \     +-----------+   \ \     \   \ \     +-----------------------------------+   \ \     \   \ \     \
                 \ \                 \   \ \     \   \ \                                         \   \ \     \   \ \     \
                  \ \                 \   \ \     \   \ \                                         \   \ \     \   \ \     \
                   \ \     +-----------+   \ \     \   \ \     +-----------------------+     +-----+   \ \     \   \ \     \
                    \ \     \          |    \ \     \   \ \     \                      |\     \    |    \ \     \   \ \     \
                     \ \     \---------+     \ \     \   \ \     \---------------------+ \     \---+     \ \     \   \ \     \
                      \ \     \     +-----------+     \   \ \     \     +-----------+   \ \     \     +-----+     \   \ +-----+
                       \ \     \    |\                 \   \ \     \    |\           \   \ \     \    |\           \   \|     | 
                        \ \     \   + \                 \   \ \     \   + \           \   \ \     \   + \           \   +-----+  
                         \ \     \   \ +-----------------+   \ \     \   \ \           \   \ +-----+   \ +-----+     \            
                          \ \     \   \|                 |    \ \     \   \ \           \   \|     |    \|     |\     \            
                           \ \     \   +-----------------+     \ \     \   \ \           \   +-----+     +-----+ \     \            
                            \ \     +-----------------------------+     +-----+           +-----------------------+     +-----------+
                             \ \                                                                                                     \
                              \ \                                                                                                     \
                               \ +-----------------------------------------------------------------------------------------------------+
                                \|                                                                                                     | 
                                 +-----------------------------------------------------------------------------------------------------+  

Output:
#################
        #       #
# ##### # ##### #
#   # # #     # #
# # # # ##### # #
#   # #       # # 
### # ####### # #
#   # #    #  # # 
# ### # ## # ##
#     # ##    #  
#################

Input:
+-----------------+
|\                 \
+ \                 \
 \ \                 \
  \ \                 \
   \ \                 \
    \ \                 \
     \ \                 \
      \ \                 \
       \ +-----------------+
        \|                 | 
         +-----------------+

Output:
###
###
###

Input: (Note leading whitespace)
      +-----+     +-----+
      |\     \    |\     \
      + \     \   + \     \
   +-----+-----+-----+-----+
   |\     \    |\     \    | 
   + \     \---+ \     \---+  
    \ +-----+-----+-----+-----+
     \|     |\     \    |\     \
      +-----+ \     \---+ \     \
         +-----+-----+-----+-----+
         |\     \    |\     \    | 
         + \     \---+ \     \---+  
          \ +-----+   \ +-----+      
           \|     |    \|     |       
            +-----+     +-----+        

Output:
 # #
# #
 # #
# #


Đầu vào / đầu ra có thể là một danh sách các chuỗi?
Nick Kennedy

@Nick vâng. Đó là những gì tôi có nghĩa là ma trận nhân vật.
Hiatsu

tuyệt vời chỉ muốn làm rõ!
Nick Kennedy

1
Tôi thực sự thích thử thách này! Chỉ tò mò, tại sao cách này tròn và không tạo ra mê cung 3d?
AJFaraday

@AJFaraday Sản xuất mê cung (và hơn thế nữa) đã được thực hiện trong thử thách tôi liên kết.
Hiatsu

Câu trả lời:


30

Python 2 , 81 byte

def f(M,k=1,r='',b=0):
 for c in M[k][k::6]:b^=c>' ';r+=' #'[b]
 print r;f(M,k+3)

Hãy thử trực tuyến!

Lấy đầu vào dưới dạng danh sách các chuỗi (hoặc danh sách các danh sách các ký tự). In đầu ra, kết thúc có lỗi.

Ý tưởng tương tự như của tsh . Chúng tôi nhìn vào các ký tự được đánh dấu như ?bên dưới để xem đó là khoảng trắng và là \:

+-----------+
|?     ?     ?
+ \           \
 \ \     +-----+
  \ ?     ?    |?
   \ \     \---+
    \ +-----+
     \|?    |?
      +-----+

Trong mỗi hàng với ?một, một \đánh dấu một sườn thẳng đứng giữa một ô được lấp đầy và một ô trống của mê cung. Bởi vì những đường vân này nằm ở lớp trên cùng của mê cung, \nhân vật của chúng không bao giờ bị che khuất bởi một yếu tố mê cung khác.

Để xem các ?vị trí, mã lặp qua các hàng k=1,4,7,...(không có chỉ mục) và trong mỗi hàng nhìn vào mọi vị trí thứ 6 bắt đầu bằng vị trí k. Nó theo dõi xem chúng ta đang ở trong một ô trống hay toàn bộ trong bit bvà lật bit đó bất cứ khi nào \gặp phải. Sau khi mỗi ký tự được đọc, nó sẽ thêm ký tự đó vào khoảng trống ( ) hoặc full ( #) bvà in chuỗi kết quả sau khi hàng hoàn thành.


Cái đó. Là. ẤN TƯỢNG.
Connectyourcharger


5

Thạch , 22 20 byte

ṫ"J‘$m3n⁶m€6Ż^\ị⁾# Ḋ

Hãy thử trực tuyến!

Một liên kết đơn âm lấy chuỗi Jelly làm đầu vào và trả lại mê cung đã xử lý dưới dạng chuỗi Jelly bao gồm một hàng khoảng trắng ở cuối.

1 byte có thể được lưu nếu một dòng khoảng trắng hàng đầu được chấp nhận.

Lấy một số cảm hứng từ công thức của @ tsh , vì vậy hãy chắc chắn cũng nâng cấp nó!

Giải trình

ṫ"  $                | Tail each string using a paired member of the following:
  J                  | - Sequence along the list of strings
   ‘                 | - Incremented by 1
     m3              | Take every 3rd string (1st, 4th, 7th, ...)
       n⁶            | Not equal to space character
         m€6         | Within each list take every 6th item (1st, 7th, ...)
            Ż        | Prepend a zero to the list
             ^\      | Reduce using xor, collecting up results; vectorised across lists (so starts with 0 xor first list, then output of that xor second list, and so on)
               ị⁾#   | Index into "#", " "
                   Ḋ | Remove first list

5

05AB1E , 25 22 byte

-1 byte nhờ Kevin Cruijssen

εN3%iN.$6ιнηðÊO„ #sèJ,

Hãy thử trực tuyến!

Cổng câu trả lời Python của xnor . Đưa đầu vào dưới dạng ma trận ký tự. Liên kết TIO hiển thị đầu vào dưới dạng một chuỗi nhiều dòng để dễ đọc, với |€Stiêu đề chuyển đổi nó thành định dạng ma trận ký tự.


1
24 byte : ε'\¢„ #sè}toðм€g„ #sè
Kevin Cruijssen

Wow, tìm thấy tốt đẹp! Xem câu trả lời để cải thiện hơn nữa. PS: Tôi bối rối về sự khác biệt giữa мK.
Grimmy

3

Võng mạc 0.8.2 , 72 byte

¶(?<=(.|(¶))+)(?<-2>.)+
¶
-4G`
.+¶(.+)¶.+
$1
T` `#`\\  +\\
.(.)....|.
$1

Hãy thử trực tuyến! Giải trình:

¶(?<=(.|(¶))+)(?<-2>.)+
¶

De-skew tất cả các dòng.

-4G`

Xóa ba dòng cuối cùng vì tôi không cần chúng.

.+¶(.+)¶.+
$1

Chỉ giữ giữa mỗi nhóm của ba dòng. (Trong Retina 1, tôi tin rằng hai giai đoạn trên có thể được thực hiện trong một giai đoạn duy nhất : ,G1,3,-5`.)

T` `#`\\  +\\

Điền vào các mặt của các khối.

.(.)....|.
$1

Chỉ giữ ký tự thứ hai của mỗi khối.


2

C (tiếng kêu) , 120 117 byte

o,c,t,s,r;f(char*m){for(s=o=0;*m;!r?t^=*m!=32,s=t?35:46:0)*++m==10?m-=~++o,c=t=0,s=10:0,r||printf(&s),r=c++%6|o%3-1;}

Hãy thử trực tuyến!

Lấy cảm hứng từ những câu trả lời khác.

'\'=92   ' '=32=>46='.'  '#'=35   '\n'=10 
// o offset == // l line 
// c line counter 
// t toggle 
// r => ? test, point to inspect 
for(o=s=0;*m;
!r?t=*m-32?!t:t,s=t?35:46:0) // t^=*m!=32 @ceilingcat 
// if test(r) is enabled: toggle(t) and sets (s)

*++m==10?m-=~++o,c=t=0,s=10:0,
// next char => if it's \n overwrites (s)
// and increments offset(o) and move pointer(m)

r || printf (&s)
// r or print! Thanks to @ceilingcat
// instead of 
    *++m-10?0:(m-=~++o,c=t=0,s=10),
    !r*s?putchar(s):0, 
 Saved 5 !

r=c++%6|o%3-1;// enable test every 6 x 3+1 positions
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.