ASCII Maze Rendering 3000


42

ฉันไม่ชอบการพิมพ์ดังนั้นฉันวาดเขาวงกตในรูปแบบที่ง่ายมาก:

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

มันไม่ได้เป็น A- เขาวงกตไอเอ็นจี? แน่นอนผมคิดว่าเขาวงกตที่ทุกคนควรมีลักษณะ 3 มิติเหมือนกัน แต่เขาไม่ได้เช่นเดียวกับความท้าทายนี้สำหรับสูงสุด a- เขาวงกต -ingness ดังนั้นฉัน (ไม่เต็มใจ) ปรับปรุงด้วยตนเองเขาวงกตจะมีลักษณะเช่นนี้

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

น่าเสียดายที่มันยากที่จะทำงานกับเขาวงกตในรูปแบบนั้นและหลังจากพิมพ์ด้วยตนเองทั้งหมดฉันไม่ต้องการพิมพ์ต้นฉบับอีกครั้งดังนั้นฉันต้องการให้คุณเขียนโปรแกรมเพื่อทำสิ่งที่ตรงกันข้ามสำหรับฉัน

กฎระเบียบ

  • การป้อนข้อมูลจะเป็นสตริงหรือตัวละครหลายเมทริกซ์ประกอบเพียง" ", "|", "\", "+", "-"และการขึ้นบรรทัดใหม่
  • เอาต์พุตประกอบด้วย" "และ"#"ในรูปแบบที่อธิบายโดยเขาวงกต
  • เนื่องจากทักษะการออกแบบเขาวงกตที่น่าทึ่งคุณจึงไม่สามารถคาดเดาสิ่งใดเกี่ยวกับโครงสร้างของเขาวงกตได้นอกจากนั้นมีโครงสร้างที่ถูกต้อง
  • ใน 3d-ification (กระบวนการที่คุณต้องเลิกทำตอนนี้) แต่ละกระบวนการ#ถูกแปลงเป็นบล็อกอักขระ 3x4x7 นี้:
    +-----+
    |\     \
    + \     \
     \ +-----+
      \|     |
       +-----+
    
  • บล็อกที่อยู่ติดกันถูกรวมเข้าด้วยกันดังนี้:
    +-----+-----+
    |\     \     \
    + \     \     \
     \ +-----+-----+
      \|\     \     \
       + \     \     \
        \ +-----+-----+
         \|     |     |
          +-----+-----+
    
    แต่ไม่มีการรวมไลน์ดังนั้นจึงมีลักษณะเช่นนี้:
    +-----------+
    |\           \
    + \           \
     \ \           \
      \ \           \
       \ \           \
        \ +-----------+
         \|           |
          +-----------+
    
  • พื้นที่เว้าบางครั้งปิดกั้นส่วนอื่นของผนังอื่น ๆ
    +-----------+
    |\           \
    + \           \
     \ \     +-----+
      \ \     \    |
       \ \     \---+
        \ +-----+
         \|     |
          +-----+
    
  • ช่องว่างต่อท้ายในอินพุตหรือเอาต์พุตเป็นที่ยอมรับ (คุณต้องระบุว่าคำตอบของคุณต้องการช่องว่างต่อท้ายในอินพุต)
  • ช่องว่างนำหน้าจะต้องสอดคล้องกับช่องว่างในอินพุต
  • ฉันยังคงไม่ชอบการพิมพ์รหัสที่สั้นที่สุดจึงชนะ

กรณีทดสอบ:

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

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

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

Output:
#

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

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

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

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

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

Output:
###
###
###

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

Output:
 # #
# #
 # #
# #


อินพุต / เอาต์พุตสามารถเป็นรายการสตริงได้หรือไม่?
Nick Kennedy

@Nick ใช่ นั่นคือสิ่งที่ฉันหมายถึงเมทริกซ์ของตัวละคร
Hiatsu

ดีแค่อยากจะชี้แจง!
Nick Kennedy

1
ฉันชอบความท้าทายนี้มาก! แค่อยากรู้อยากเห็นทำไมรอบนี้และไม่สร้างเขาวงกต 3 มิติ?
AJFaraday

@AJFaraday ผลิตเขาวงกต (และอื่น ๆ ) ได้ทำไปแล้วในความท้าทายที่ฉันเชื่อมโยง
Hiatsu

คำตอบ:


30

Python 2 , 81 ไบต์

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)

ลองออนไลน์!

รับอินพุตเป็นรายการของสตริง (หรือรายการของอักขระ) พิมพ์เอาต์พุตสิ้นสุดด้วยข้อผิดพลาด

ความคิดที่คล้ายกับของ TSH เราดูอักขระที่ทำเครื่องหมาย?ด้านล่างเพื่อดูว่ามีช่องว่างใดและ\:

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

ภายในแต่ละแถว?จะมี\เครื่องหมายเป็นสันแนวตั้งระหว่างเซลล์ที่เติมและเซลล์ว่างของเขาวงกต เนื่องจากสันเขาเหล่านี้อยู่ในชั้นบนสุดของเขาวงกต\ตัวละครของพวกเขาจึงไม่ถูกบดบังด้วยองค์ประกอบเขาวงกตอื่น

จะมองไปที่?ตำแหน่งที่ iterates รหัสผ่านแถวk=1,4,7,...(ศูนย์จัดทำดัชนี) และในแต่ละแถวมีลักษณะที่ตำแหน่ง 6 kทุกที่เริ่มต้นด้วยตำแหน่ง มันติดตามว่าเราอยู่ในเซลล์ว่างหรือเต็มในบิตbและพลิกบิตนั้นเมื่อใดก็ตามที่\พบ หลังจากอ่านอักขระแต่ละตัวแล้วอักขระจะผนวกอักขระว่าง ( ) หรือเต็ม ( #) ตามbและพิมพ์สตริงผลลัพธ์หลังจากแถวเสร็จสมบูรณ์


ที่. คือ. น่าประทับใจ
connectyourcharger


5

เยลลี่ , 22 20 ไบต์

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

ลองออนไลน์!

ลิงก์ monadic ที่ใช้สตริง Jelly เป็นอินพุตและส่งคืนเขาวงกตที่ประมวลผลเป็นสตริง Jelly รวมถึงหนึ่งแถวของช่องว่างต่อท้าย

สามารถบันทึก1 ไบต์ได้หากยอมรับช่องว่างนำหน้าบรรทัดเดียว

รับแรงบันดาลใจจากสูตรของ @ tshดังนั้นอย่าลืมอัปเกรดด้วยเช่นกัน!

คำอธิบาย

ṫ"  $                | 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 ไบต์

-1 ไบต์ต้องขอบคุณ Kevin Cruijssen

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

ลองออนไลน์!

ท่าเรือXNOR คำตอบของงูหลาม รับอินพุตเป็นเมทริกซ์อักขระ ลิงก์ TIO แสดงอินพุตเป็นสตริงหลายบรรทัดเพื่อให้สามารถอ่านได้โดย|€Sส่วนหัวจะแปลงเป็นรูปแบบเมทริกซ์อักขระ


1
24 ไบต์ : ε'\¢„ #sè}ถึงðм€g„ #sè
Kevin Cruijssen

ว้าวดีมาก! ดูคำตอบสำหรับการปรับปรุงเพิ่มเติม PS: ฉันสับสนเกี่ยวกับความแตกต่างระหว่างและм K
Grimmy

3

เรติน่า 0.8.2 , 72 ไบต์

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

ลองออนไลน์! คำอธิบาย:

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

ยกเลิกการเอียงของทุกบรรทัด

-4G`

ลบสามบรรทัดสุดท้ายเมื่อฉันไม่ต้องการพวกเขา

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

อยู่ตรงกลางของแต่ละกลุ่มของสามบรรทัด (ใน Retina 1 ฉันเชื่อว่าสองขั้นตอนข้างต้นสามารถทำได้ในขั้นตอนเดียว: ,G1,3,-5`.)

T` `#`\\  +\\

เติมใบหน้าของบล็อก

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

เก็บเฉพาะอักขระที่สองของแต่ละบล็อก


2

C (เสียงดังกราว) , 120 117 ไบต์

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

ลองออนไลน์!

แรงบันดาลใจจากคำตอบอื่น ๆ

'\'=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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.