ASCII 아트 H 나무


9

H 트리 프랙탈 트리 구조 인 행으로 시작있다. 각 반복에서 T 분기가 모든 엔드 포인트에 추가됩니다. 이 과제에서는 매 초마다 H 트리 수준 의 ASCII 표현을 만들어야합니다 .

번째 수준 에는 단순히 세 개의 하이픈 빼기 문자가 포함됩니다.

---

다음 레벨은 재귀 적으로 구성됩니다.

  • 3 개의 공백 또는 선으로 구분하여 이전 레벨에서 2x2 복사본의 행렬을 만듭니다.
  • 사본의 중심을 H의 형태로 ASCII 아트 라인으로 연결하십시오 -. 수평선, |수직선 및 +선이 서로 만나는 경우에 사용하십시오 .

두 번째 수준

-+-   -+-
 |     |
 +-----+
 |     |
-+-   -+-

세 번째 수준

-+-   -+-   -+-   -+-
 |     |     |     |
 +--+--+     +--+--+
 |  |  |     |  |  |
-+- | -+-   -+- | -+-
    |           |
    +-----------+
    |           |
-+- | -+-   -+- | -+-
 |  |  |     |  |  |
 +--+--+     +--+--+
 |     |     |     |
-+-   -+-   -+-   -+-

규칙

  • 입력은 0 또는 1 인덱싱 된 위에서 설명한 실제 ASCII 트리가 아닌 ASCII 아트 H 트리의 레벨을 나타내는 정수 입니다.
  • 출력이 유연합니다. 예를 들어, 결과를 인쇄하거나 줄 바꿈으로 구분 된 문자열, 각 줄의 문자열 목록 또는 2D 문자 배열을 반환 할 수 있습니다.
  • 당신은 사용해야합니다 -, |, +및 공백 문자.
  • 후행 공백과 최대 3 개의 후행 공백이 허용됩니다.

이것은 코드 골프입니다. 바이트 단위의 최단 답변이 이깁니다.


답변:


7

캔버스 , 20 19 바이트

ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│

여기 사용해보십시오!

설명:

ø                    push an empty canvas
 ⁸«╵[              repeat input*2 + 1 times
     ↷               rotate clockwise
      L⇵             ceil(width/2)
        ;l⇵          ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
           └┌        reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
             ├       add 2 to the top ⌈w÷2⌉
              -×     "-" * (2 + ⌈w÷2⌉)
                ╋    in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
                 ‼   normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
                  │  and palindromize horizontally

7

, 22 바이트

P-²FNF²«⟲T²+×⁺²κX²ι←‖O

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 인덱스가 0입니다. 설명:

P-²

-커서를 중앙에두고 초기 3 초를 인쇄하십시오 .

FN

주어진 횟수만큼 반복하십시오.

F²«

각각에 대해 두 번 반복하십시오 H. 각 루프 H는 이전 루프 보다 약간 더 크지 만 대체 Hs 만 필요 합니다.

⟲T²

그림을 회전시킵니다.

+×⁺²κX²ι←

다음 줄의 반을 그립니다.

‖O

단계를 완료하기 위해 반영하십시오.

각 반복의 결과는 다음과 같습니다.

---

|   |
+---+
|   |

-+-   -+-
 |     | 
 +-----+ 
 |     | 
-+-   -+-

|   |   |   |
+-+-+   +-+-+
| | |   | | |
  |       |  
  +-------+  
  |       |  
| | |   | | |
+-+-+   +-+-+
|   |   |   |

-+-   -+-   -+-   -+-
 |     |     |     | 
 +--+--+     +--+--+ 
 |  |  |     |  |  | 
-+- | -+-   -+- | -+-
    |           |    
    +-----------+    
    |           |    
-+- | -+-   -+- | -+-
 |  |  |     |  |  | 
 +--+--+     +--+--+ 
 |     |     |     | 
-+-   -+-   -+-   -+-

5 단계 H가 어떻게 생겼는지 궁금하다면 빠른 축소보기 : i.imgur.com/EGapcrS.png
Paul

1

파이썬 2 , 227 바이트

L=len
def f(n):
 if n==1:return[['-']*3]
 m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
 for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
 return m

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


0

펄 6 , 118 바이트

{map ->\y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2

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

인덱스가 0입니다. 문자의 2D 배열을 반환합니다. 기본 아이디어는

b = y & -y   // Isolate lowest one bit
b <= x % (4*b) <= 3*b

패턴을 생성

--- --- --- ---
 -----   ----- 
--- --- --- ---
   ---------   
--- --- --- ---
 -----   ----- 
--- --- --- ---

설명

{ ... }o*R**2  # Feed $_=2**$n into block
map ->\y{ ... },2..^$_*4  # Map y=2..2**n*4-1
map { ... },2..^$_*6      # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]]    # Choose char depending on base-2 number from two Bools
map { ... }  # Map coordinates to Bool
  # Horizontal lines
  ,$^x  # Modulo 8*¾=6
  ,y/2    # Skip every second row
  # Vertical lines
  ,y      # Modulo 8
  ,$x/3   # Skip every third column
   -$_    # Empty middle column
# Map using expression
$^b%%1*$b&&  # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2  # Pattern with modulo 8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.