ASCII艺术H树


9

一个^ h树是分形树结构,用一条线开始。在每次迭代中,将T分支添加到所有端点。在这个挑战中,您必须创建每第二个 H树级别的ASCII表示。

第一级只需包含三个连字符减号字符:

---

下一级是递归构造的:

  • 创建上一个级别的副本的2x2矩阵,以三个空格或三行分隔。
  • 将副本的中心与H形式的ASCII艺术线条连接起来。-用于水平线,|垂直线以及+线彼此相遇的地方。

第二级

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

第三级

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

规则

  • 输入是一个整数,代表如上所述的ASCII art H树级别(不是实际的H树级别),为零或一索引。
  • 输出灵活。例如,您可以打印结果或返回以换行符分隔的字符串,每行的字符串列表或2D字符数组。
  • 您必须使用-|+和空格字符。
  • 尾随空格和最多三条尾随空白行。

这是代码高尔夫。以字节为单位的最短答案将获胜。


Answers:


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

打印开头的三个-s,将光标放在中间。

FN

重复给定的次数。

F²«

每个重复两次H。每个循环都比H前一个循环稍大一些,但是我们只需要备用Hs。

⟲T²

旋转图。

+×⁺²κX²ι←

画下一行的一半。

‖O

反映完成步骤。

每次迭代的结果如下:

---

|   |
+---+
|   |

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

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

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

如果您想知道第5级的H样子,可以快速浏览一下:i.imgur.com/EGapcrS.png
Paul

1

Python 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

Perl 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索引。返回二维字符数组。基本思想是表达

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.