アスキーアートH木


9

Hツリーはフラクタルツリー構造であるラインで始まっていること。各反復で、Tブランチがすべてのエンドポイントに追加されます。この課題では、毎秒の HツリーレベルのASCII表現を作成する必要があります。

最初のレベルは、単純に3ハイフンマイナス文字が含まれています。

---

次のレベルは再帰的に構築されます:

  • 3つのスペースまたは行で区切られた、前のレベルからのコピーの2x2マトリックスを作成します。
  • コピーの中心をHの形のASCIIアート線で接続します。-水平線、|垂直線、および+線が互いに接触する場合に使用します。

セカンドレベル

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

第3レベル

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

ルール

  • 入力は、上記のASCIIアートHツリーのレベル(実際のHツリーレベルではない)を表す整数で、ゼロまたは1インデックス付きです。
  • 出力は柔軟です。たとえば、結果を印刷したり、改行で区切られた文字列、各行の文字列のリスト、または文字の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²«

それぞれについて2回繰り返しますH。各ループはH前のループよりも少し大きくなりますが、必要なHのは代替のだけです。

⟲T²

フィギュアを回転させます。

+×⁺²κX²ι←

次の線の半分を描きます。

‖O

反映してステップを完了します。

各反復の結果は次のとおりです。

---

|   |
+---+
|   |

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

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

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

5番目のレベルHがどのように見えるのか不思議に思っている場合は、ズームアウトしてすぐに一目でわかり
Paul


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インデックス。文字の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.