ASCII 미로 렌더링 3000


42

나는 타이핑을 좋아하지 않으므로 매우 간단한 형식으로 미로를 그립니다.

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

그것은 A- 아닌가 미로 -ing? 물론, 모든 미로가 최대한의 미로 효과를 얻으려면 이 도전 과 동일하지는 않지만 3d로 보일 것이라고 생각합니다 . 그래서 수동으로 미로를 다음과 같이 업데이트했습니다.

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

불행히도, 해당 형식의 미로로 작업하기가 어렵고 모든 수동 입력 후에 원본을 다시 입력하고 싶지 않으므로 반전을 수행하는 프로그램을 작성해야합니다.

규칙

  • 입력 만 이루어진 여러 문자 또는 문자열 행렬 것 " ", "|", "\", "+", "-", 및 개행.
  • 출력은 미로에 의해 설명 된 패턴 으로 " "및 로 구성됩니다 "#".
  • 나의 놀라운 미로 설계 기술로 인해, 당신은 미로의 구조에 대해 아무 것도 가정 할 수 없으며, 그 외에는 유효한 해체가 있습니다.
  • 3d- #ification ( 이제 취소해야하는 프로세스)에서 각각 3x4x7 문자 블록으로 변환되었습니다.
    +-----+
    |\     \
    + \     \
     \ +-----+
      \|     |
       +-----+
    
  • 인접 블록이 다음과 같이 결합되었습니다.
    +-----+-----+
    |\     \     \
    + \     \     \
     \ +-----+-----+
      \|\     \     \
       + \     \     \
        \ +-----+-----+
         \|     |     |
          +-----+-----+
    
    그러나 줄을 연결하지 않으면 실제로 다음과 같이 보입니다.
    +-----------+
    |\           \
    + \           \
     \ \           \
      \ \           \
       \ \           \
        \ +-----------+
         \|           |
          +-----------+
    
  • 오목한 공간은 때때로 다른 벽의 일부를 막습니다.
    +-----------+
    |\           \
    + \           \
     \ \     +-----+
      \ \     \    |
       \ \     \---+
        \ +-----+
         \|     |
          +-----+
    
  • 입력 또는 출력의 후행 공백이 허용됩니다. ( 입력에 후행 공백이 필요한지 여부를 지정해야합니다 .)
  • 선행 공백은 입력의 빈 공간에 해당해야합니다.
  • 나는 여전히 타이핑을 좋아하지 않으므로 가장 짧은 코드가 승리합니다.

테스트 사례 :

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

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

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

Output:
#

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

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

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

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

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

Output:
###
###
###

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

Output:
 # #
# #
 # #
# #


입력 / 출력이 문자열 목록 일 수 있습니까?
Nick Kennedy

@ 닉 네. 그것이 제가 문자 매트릭스에 의해 의미 한 것입니다.
히 아츠

잘하고 싶었다!
Nick Kennedy

1
나는이 도전을 정말로 좋아한다! 그냥 궁금해서 왜 이런 식으로 3D 미로를 생산하지 않습니까?
AJFaraday

@AJFaraday 미로 (및 그 이상)를 생성하는 것은 이미 연결 한 도전에서 이루어졌습니다.
히 아츠

답변:


30

파이썬 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 와 유사합니다 . ?아래에 표시된 문자 를 확인하여 공백과 공백을 확인합니다 \.

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

?\표시된 각 행 내에서 , 채워진 셀과 미로의 빈 셀 사이에 세로 융기 점이 표시됩니다. 이 융기 부분은 미로의 최상층에 있기 때문에 \다른 미로 요소에 의해 캐릭터가 가려지지 않습니다.

상기 찾으려면 ?위치, 코드 행을 반복 k=1,4,7,...마다 6 위치 (영 인덱스), 각 행의 외모에 위치로 시작 k. 그것은 우리가 bit에서 비어있는 셀에 있는지 풀 셀에 있는지를 추적 b하고 a \가 발생할 때마다 그 비트를 뒤집 습니다. 각 문자를 읽은 후에 따라 빈 ( ) 또는 전체 ( #) 문자를 추가 b하고 행이 완료된 후 결과 문자열을 인쇄합니다.


그. 입니다. 감동적인.
22:41에 충전기를 연결하십시오


5

젤리 , 22 20 바이트

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

온라인으로 사용해보십시오!

젤리 문자열을 입력으로 받아 처리 된 미로를 한 ​​줄의 후행 공백을 포함하는 젤리 문자열로 반환하는 모나드 링크.

한 줄의 선행 공백이 허용되는 경우 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 바이트

Kevin Cruijssen 덕분에 -1 바이트

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

온라인으로 사용해보십시오!

xnor의 Python 답변 포트 . 문자 행렬로 입력을받습니다. TIO 링크는 입력을 가독성을 위해 여러 줄 문자열로 표시하며 |€S헤더를 입력하여 문자 매트릭스 형식으로 변환합니다.


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

와우, 좋은 발견! 추가 개선 사항에 대한 답변을 참조하십시오. PS는 : 나는 사이의 차이에 대해 혼란 스러워요 мK.
그리미

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.